激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java之springcloud Sentinel案例講解

Java之springcloud Sentinel案例講解

2021-11-12 14:10深情以改 Java教程

這篇文章主要介紹了Java之springcloud Sentinel案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

一、Sentinel是什么?

Sentinel (分布式系統的流量防衛兵) 是阿里開源的一套用于服務容錯的綜合性解決方案。
它以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度來保護服務的穩定性。

二、使用步驟

1.下載地址

下載地址:https://github.com/alibaba/Sentinel/releases
java -jar sentinel-dashboard-1.7.0.jar
訪問:http://localhost:8080
用戶名密碼:sentinel/sentinel

2.導入依賴

?
1
2
3
4
5
<!--服務容錯 每一個服務 都引入 sentinel 客戶端-->                                                                                               
<dependency>                                                                                                                                                         
    <groupId>com.alibaba.cloud</groupId>                                                                                                                                                           
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>                                                                                                                                                         
</dependency>                                                                                                                                                        

3.添加配置

?
1
2
3
4
5
6
#spring:                                                                                                                                                           
#  cloud:                                                                                                                                                          
    sentinel:                                                                                                                                                          
      transport:                                                                                                                                                           
        port: 8081 #跟控制臺交流的端口,隨意指定一個未使用的端口即可                                                                                                                                                           
        dashboard: localhost:8080 # 指定控制臺服務的地址                                                                                                                                                         

4.啟動jar

Java之springcloud Sentinel案例講解

5 運行接口后就才能被監控,設置流控規則

Java之springcloud Sentinel案例講解

6 測試重復刷新后

Java之springcloud Sentinel案例講解

該處使用的url網絡請求的數據。

三 容錯異常

?
1
FlowException)

降級
DegradeException)
參數熱點異常
ParamFlowException
系統
SystemBlockException
授權
AuthorityException

自定義sentinel異常 BlockExceptionAspect

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Slf4j                                                                                                                                                                                                             
@Component                                                                                                                                                                                                             
public class BlockExceptionAspect  implements UrlBlockHandler {                                                                                                                                                                                                            
                                                                                                                                                                                                                
    @Override                                                                                                                                                                                                              
    public void blocked(HttpServletRequest httpServletRequest,                                                                                                                                                                                                             
                        HttpServletResponse httpServletResponse, BlockException e) throws IOException {                                                                                                                                                                                                            
                                                                                                                                                                                                                
                                                                                                                                                                                                                
        System.out.println("進入。。。 MyUrlBlockHandler");                                                                                                                                                                                                             
        // 打印日志                                                                                                                                                                                                             R
        log.error(e.getMessage(),e);                                                                                                                                                                                                               
        // 統一返回結果                                                                                                                                                                                                              
        R appResult = null;                                                                                                                                                                                                            
        if (e instanceof FlowException) {                                                                                                                                                                                                              
            appResult = new R(ResponseEnum.FLOW_BLOCK,null);                                                                                                                                                                                                               
        } else if (e instanceof DegradeException) {                                                                                                                                                                                                            
            appResult = new R(ResponseEnum.DEG_BLOCK,null);                                                                                                                                                                                                            
        } else if (e instanceof ParamFlowException) {                                                                                                                                                                                                              
            appResult = new R(ResponseEnum.DEG_BLOCK,null);                                                                                                                                                                                                            
        } else if (e instanceof SystemBlockException) {                                                                                                                                                                                                            
            appResult = new R(ResponseEnum.DEG_BLOCK,null);                                                                                                                                                                                                            
        } else if (e instanceof AuthorityException) {                                                                                                                                                                                                              
            appResult = new R(ResponseEnum.DEG_BLOCK,null);                                                                                                                                                                                                            
        }                                                                                                                                                                                                              
        httpServletResponse.setCharacterEncoding("utf-8");                                                                                                                                                                                                             
        httpServletResponse.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);                                                                                                                                                                                                             
                                                                                                                                                                                                                
        httpServletResponse.getWriter().print(JSON.toJSONString(appResult));                                                                                                                                                                                                               
                                                                                                                                                                                                                
    }                                                                                                                                                                                                              
}                                                                                                                                                                                                              

一: QPS每秒查詢率(Query Per Second)
原理:每天80%的訪問集中在20%的時間里,這20%時間叫做峰值時間。

公式:( 總PV數 * 80% ) / ( 每天秒數 * 20% ) = 峰值時間每秒請求數(QPS) 。

PV(page view)即頁面瀏覽量,通常是衡量一個網絡新聞頻道或網站甚至一條網絡新聞的主要指標。網頁瀏覽數是評價網站流量最常用的指標之一,簡稱為PV。

機器:峰值時間每秒QPS / 單臺機器的QPS = 需要的機器 。

每天300w PV 的在單臺機器上,這臺機器需要多少QPS?

( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)。

一般需要達到139QPS,因為是峰值。(200萬pv才有100峰值qps)

二:TPS
TPS:Transactions Per Second(每秒傳輸的事物處理個數),即服務器每秒處理的事務數。

TPS包括一條消息入和一條消息出,加上一次用戶數據庫訪問。(業務TPS = CAPS × 每個呼叫平均TPS)

一個事務是指一個客戶機向服務器發送請求然后服務器做出反應的過程。客戶機在發送請求時開始計時,收到服務器響應后結束計時,以此來計算使用的時間和完成的事務個數。

一般的,評價系統性能均以每秒鐘完成的技術交易的數量來衡量。系統整體處理能力取決于處理能力最低模塊的TPS值。

三:RT(Response-time)
響應時間是指:系統對請求作出響應的時間(一次請求耗時)。

響應時間:執行一個請求從開始到最后收到響應數據所花費的總體時間,即從客戶端發起請求到收到服務器響應結果的時間。響應時間RT(Response-time),是一個系統最重要的指標之一,它的數值大小直接反應了系統的快慢。

四:Load(系統負載)
Linux的Load(系統負載),是一個讓新手不太容易了解的概念。load的就是一定時間內計算機有多少個active_tasks,也就是說是計算機的任務執行隊列的長度,cpu計算的隊列。

top/uptime等工具默認會顯示1分鐘、5分鐘、15分鐘的平均Load。

具體來說,平均Load是指,在特定的一段時間內統計的正在CPU中運行的(R狀態)、正在等待CPU運行的、處于不可中斷睡眠的(D狀態)的任務數量的平均值。

最后,說一下CPU使用率和Load的關系吧。如果主要是CPU密集型的程序在運行(If CPU utilization is near 100 percent (user + nice + system), the workload sampled is CPU-bound.),

那么CPU利用率高,Load一般也會比較高。而I/O密集型的程序在運行,

可能看到CPU的%user, %system都不高,%iowait可能會有點高,這時的Load通常比較高。

同理,程序讀寫慢速I/O設備(如磁盤、NFS)比較多時,Load可能會比較高,而CPU利用率不一定高。這種情況,還經常發生在系統內存不足并開始使用swap的時候,Load一般會比較高,而CPU使用率并不高。

五:PV
頁面訪問次數:Page View

六:UV
訪客數(去重復):Unique Visitor

七:帶寬
帶寬(bps)=總流量數(bit)/產生流量的時長(秒)=(PV頁面平均大小8)/統計時間(秒)

說明:公式中的 8 指的是將 Byte 轉換為 bit,即 8b/B,因為帶寬的單位是 bps(比特率),即bit per second,每秒二進制位數,而容量單位一般使用 Byte。

假設某站點的日均 PV 是 10w,頁面平均大小 0.4 M,那么其平均帶寬需求是:

平均帶寬 = (10w * 0.4M * 8) / (60 * 60 * 24)= 3.7 Mbps

以上計算的僅僅是平均帶寬,我們在進行容量預估時需要的是峰值帶寬,即必須要保證站點在峰值流量時能夠正常運轉。假設,峰值流量是平均流量的5倍,這個5倍稱為峰值因 子。按照這個計算,實際需要的帶寬大約在3.7 Mbps * 5=18.5 Mbps 。

帶寬需求 = 平均帶寬 * 峰值因子

八:并發連接數
并發數是指系統同時能處理的請求數量,這個也是反應了系統的負載能力。

總結

功能 Sentinel Hystrix resilience4j
隔離策略 信號量隔離(并發線程數限流) 線程池隔離/信號量隔離 信號量隔離
熔斷降級策略 基于響應時間、異常比率、異常數 基于異常比率 基于異常比率、響應時間
實時統計實現 滑動窗口(LeapArray) 滑動窗口 (基于 RxJava)
動態規則配置 支持多種數據源 支持多種數據源 有限支持
擴展性 多個擴展點 插件的形式 接口的形式
基于注解的支持 支持 支持 支持
限流 基于 QPS,支持基于調用關系的限流 有限的支持 Rate Limiter
流量整形 支持預熱模式、勻速器模式、預熱排隊模式(流量規則處可配置) 不支持 簡單的 Rate Limiter 模式
系統自適應保護 支持 不支持 不支持
控制臺 提供開箱即用的控制臺,可配置規則、查看秒級監控、機器發現等 簡單的監控查看 不提供控制臺,可對接其它監控系統

到此這篇關于Java之springcloud Sentinel案例講解的文章就介紹到這了,更多相關Java之springcloud Sentinel內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_56219549/article/details/119514267

延伸 · 閱讀

精彩推薦
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 一区二区三区视频播放 | 姑娘第四集免费看视频 | 欧美日韩在线影院 | 欧美一级淫片免费视频黄 | 污视频在线看 | 亚洲成人夜色 | 九一免费国产 | 亚洲成人福利在线 | 国产毛片电影 | 99爱精品在线 | 亚洲成人免费网站 | 久久久一区二区三区视频 | 精品久久久久久久久久中出 | 国产精品wwww | 斗罗破苍穹在线观看免费完整观看 | 神马福利电影 | 国产精品免费一区二区三区都可以 | 91久久线看在观草草青青 | 欧美性生活免费视频 | 日日鲁一鲁视频 | 蜜桃视频在线入口www | 久久久久久中文字幕 | 综合网天天色 | 精品国产91久久久久久久妲己 | 蜜桃成品人免费视频 | 国产精品久久久久一区二区 | 亚洲99| 成人福利在线免费观看 | 欧美成人鲁丝片在线观看 | 看毛片免费| 国产精品美女一区二区 | 欧美视频网 | 中国av免费在线观看 | 蜜桃传媒视频麻豆第一区免费观看 | 欧美人与性禽动交精品 | 久久久国产精品成人免费 | 国产一区二区三区高清 | 成品片a免人视频 | 狠狠操天天射 | 成人福利在线观看 | 久久久久久久亚洲视频 |