<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          神器!Alibaba Sentinel,功能真心強(qiáng)大

          共 6709字,需瀏覽 14分鐘

           ·

          2022-05-16 01:30




          文末送書《實(shí)戰(zhàn)Alibaba Sentinel:深度解析微服務(wù)高并發(fā)流量治理》,包郵,無套路!有興趣的同學(xué)記得在文末參與


          Sentinel 是什么?

          隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 以流量為切入點(diǎn),從流量控制、熔斷降級、系統(tǒng)負(fù)載保護(hù)等多個維度保護(hù)服務(wù)的穩(wěn)定性。

          Sentinel 具有以下特征:

          • 豐富的應(yīng)用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、集群流量控制、實(shí)時熔斷下游不可用應(yīng)用等。
          • 完備的實(shí)時監(jiān)控:Sentinel 同時提供實(shí)時的監(jiān)控功能。您可以在控制臺中看到接入應(yīng)用的單臺機(jī)器秒級數(shù)據(jù),甚至 500 臺以下規(guī)模的集群的匯總運(yùn)行情況。
          • 廣泛的開源生態(tài):Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應(yīng)的依賴并進(jìn)行簡單的配置即可快速地接入 Sentinel。
          • 完善的 SPI 擴(kuò)展點(diǎn):Sentinel 提供簡單易用、完善的 SPI 擴(kuò)展接口。您可以通過實(shí)現(xiàn)擴(kuò)展接口來快速地定制邏輯。例如定制規(guī)則管理、適配動態(tài)數(shù)據(jù)源等。

          Sentinel 的主要特性:

          img

          Sentinel 基本概念:

          資源:

          資源是 Sentinel 的關(guān)鍵概念。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。只要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護(hù)起來。大部分情況下,可以使用方法簽名,URL,甚至服務(wù)名稱作為資源名來標(biāo)示資源。

          規(guī)則:

          圍繞資源的實(shí)時狀態(tài)設(shè)定的規(guī)則,可以包括流量控制規(guī)則、熔斷降級規(guī)則以及系統(tǒng)保護(hù)規(guī)則。所有規(guī)則可以動態(tài)實(shí)時調(diào)整。

          Sentinel 功能和設(shè)計(jì)理念:

          流量控制:

          流量控制在網(wǎng)絡(luò)傳輸中是一個常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)。然而,從系統(tǒng)穩(wěn)定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機(jī)不可控的,而系統(tǒng)的處理能力是有限的。我們需要根據(jù)系統(tǒng)的處理能力對流量進(jìn)行控制。Sentinel 作為一個調(diào)配器,可以根據(jù)需要把隨機(jī)的請求調(diào)整成合適的形狀,如下圖所示:

          img

          流量控制設(shè)計(jì)理念,流量控制有以下幾個角度:

          • 資源的調(diào)用關(guān)系,例如資源的調(diào)用鏈路,資源和資源之間的關(guān)系;
          • 運(yùn)行指標(biāo),例如 QPS、線程池、系統(tǒng)負(fù)載等;
          • 控制的效果,例如直接限流、冷啟動、排隊(duì)等。

          Sentinel 的設(shè)計(jì)理念是讓您自由選擇控制的角度,并進(jìn)行靈活組合,從而達(dá)到想要的效果。

          熔斷降級:

          除了流量控制以外,降低調(diào)用鏈路中的不穩(wěn)定資源也是 Sentinel 的使命之一。由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個資源出現(xiàn)了不穩(wěn)定,最終會導(dǎo)致請求發(fā)生堆積。Sentinel 和 Hystrix 的原則是一致的: 當(dāng)檢測到調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定的表現(xiàn),例如請求響應(yīng)時間長或異常比例升高的時候,則對這個資源的調(diào)用進(jìn)行限制,讓請求快速失敗,避免影響到其它的資源而導(dǎo)致級聯(lián)故障。

          熔斷降級設(shè)計(jì)理念:

          在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。Hystrix 通過 線程池隔離 的方式,來對依賴(在 Sentinel 的概念中對應(yīng) 資源)進(jìn)行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點(diǎn)是除了增加了線程切換的成本(過多的線程池導(dǎo)致線程數(shù)目過多),還需要預(yù)先給各個資源做線程池大小的分配。

          Sentinel 對這個問題采取了兩種手段:

          1. 通過并發(fā)線程數(shù)進(jìn)行限制 : 和資源池隔離的方法不同,Sentinel 通過限制資源并發(fā)線程的數(shù)量,來減少不穩(wěn)定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預(yù)先分配線程池的大小。當(dāng)某個資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時間變長,對資源的直接影響就是會造成線程數(shù)的逐步堆積。當(dāng)線程數(shù)在特定資源上堆積到一定的數(shù)量之后,對該資源的新請求就會被拒絕。堆積的線程完成任務(wù)后才開始繼續(xù)接收請求。
          2. 通過響應(yīng)時間對資源進(jìn)行降級 : 除了對并發(fā)線程數(shù)進(jìn)行控制以外,Sentinel 還可以通過響應(yīng)時間來快速降級不穩(wěn)定的資源。當(dāng)依賴的資源出現(xiàn)響應(yīng)時間過長后,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間窗口之后才重新恢復(fù)。

          系統(tǒng)負(fù)載保護(hù):

          Sentinel 同時提供系統(tǒng)維度的自適應(yīng)保護(hù)能力。防止雪崩,是系統(tǒng)防護(hù)中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時候,如果還持續(xù)讓請求進(jìn)入,可能會導(dǎo)致系統(tǒng)崩潰,無法響應(yīng)。在集群環(huán)境下,網(wǎng)絡(luò)負(fù)載均衡會把本應(yīng)這臺機(jī)器承載的流量轉(zhuǎn)發(fā)到其它的機(jī)器上去。如果這個時候其它的機(jī)器也處在一個邊緣狀態(tài)的時候,這個增加的流量就會導(dǎo)致這臺機(jī)器也崩潰,最后導(dǎo)致整個集群不可用。針對這個情況,Sentinel 提供了對應(yīng)的保護(hù)機(jī)制,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個平衡,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請求。

          Sentinel 的開源生態(tài):

          img

          Sentinel 分為兩個部分:

          • 核心庫(Java 客戶端)不依賴任何框架/庫,能夠運(yùn)行于所有 Java 運(yùn)行時環(huán)境,同時對 Dubbo / Spring Cloud 等框架也有較好的支持。
          • 控制臺(Dashboard)基于 Spring Boot 開發(fā),打包后可以直接運(yùn)行,不需要額外的 Tomcat 等應(yīng)用容器。

          Sentinel 基本使用:

          1.首先,我們需要導(dǎo)入依賴:


          ????com.alibaba.csp
          ????sentinel-core
          ????1.6.3

          2.定義資源限流規(guī)則:

          資源 是 Sentinel 中的核心概念之一。最常用的資源是我們代碼中的 Java 方法。當(dāng)然,您也可以更靈活的定義你的資源

          //初始化規(guī)則
          ????private?static?void?initFlowRules()?{
          ????????List?rules?=?new?ArrayList<>();?//限流規(guī)則的集合
          ????????FlowRule?flowRule?=?new?FlowRule();//限流規(guī)則
          ????????flowRule.setResource("ruleTest");//資源(可以是方法名稱、接口)
          ????????//線程數(shù)(FLOW_GRADE_THREAD)與QPS?(FLOW_GRADE_QPS)
          ????????flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);?//限流的閾值的類型
          ????????flowRule.setCount(18);//?QPS數(shù)
          ????????rules.add(flowRule);
          ????????FlowRuleManager.loadRules(rules);
          ????}

          3.啟動測試類,官網(wǎng)提供了以下代碼做演示:

          public?static?void?main(String[]?args)?{
          ????????initFlowRules();?//初始化一個規(guī)則
          ????????while(true){
          ????????????Entry?entry=null;
          ????????????try{
          ????????????????entry=?SphU.entry("ruleTest");
          ????????????????System.out.println("Hello?Word");
          ????????????}catch?(BlockException?e){//如果被限流了,那么會拋出這個異常
          ????????????????e.printStackTrace();
          ????????????}finally?{
          ????????????????if(entry!=null){
          ????????????????????entry.exit();//?釋放
          ????????????????}
          ????????????}
          ????????}
          }

          Demo 運(yùn)行之后,我們可以在日志 ~/logs/csp/${appName}-metrics.log.xxx 里看到下面的輸出:

          img

          其中 p 代表通過的請求, block 代表被阻止的請求, s 代表成功執(zhí)行完成的請求個數(shù), e 代表用戶自定義的異常, rt 代表平均響應(yīng)時長。可以看到,這個程序每秒穩(wěn)定輸出 "hello world" 18 次,和規(guī)則中預(yù)先設(shè)定的閾值是一樣的。

          Sentinel 控制臺:

          下載 https://github.com/alibaba/Sentinel/releases ,下載 sentinel-dashboard-1.6.3.jar 。(啟動 Sentinel 控制臺需要 JDK 版本為 1.8 及以上版本。)

          啟動控制臺:

          java?-Dserver.port=8080?-Dcsp.sentinel.dashboard.server=localhost:8080?-Dproject.name=sentinel-dashboard?-jar?sentinel-dashboard.jar

          其中 -Dserver.port=8080 用于指定 Sentinel 控制臺端口為 8080。從 Sentinel 1.6.0 起,Sentinel 控制臺引入基本的登錄功能,默認(rèn)用戶名和密碼都是 sentinel

          .

          客戶端接入控制臺:

          將剛剛演示的Demo 接入控制臺,首秀按要導(dǎo)入依賴:


          ????com.alibaba.csp
          ????sentinel-transport-simple-http
          ????1.6.3

          啟動時加入 JVM 參數(shù) -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制臺地址和端口。若啟動多個應(yīng)用,則需要通過 -Dcsp.sentinel.api.port=xxxx 指定客戶端監(jiān)控 API 的端口(默認(rèn)是 8719)。其他配置項(xiàng)見:https://github.com/alibaba/Sentinel/wiki/%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E9%A1%B9 配置如下:

          -Dcsp.sentinel.dashboard.server=localhost:8080?-Dproject.name=sentinel-demo

          這樣子啟動Demo,客戶端配置好了與控制臺的連接參數(shù)之后,并不會主動連接上控制臺,需要觸發(fā)一次客戶端的規(guī)則才會開始進(jìn)行初始化,并向控制臺發(fā)送心跳和客戶端規(guī)則等信息。就能再控制臺上看到效果如下:

          img

          其他具體相關(guān)可以查看github介紹。

          Sentinel 整合SpringBoot:

          Sentinel 提供了 @SentinelResource 注解用于定義資源,并提供了 AspectJ 的擴(kuò)展用于自動定義資源、處理 BlockException 等。首先需要導(dǎo)入依賴:


          ??com.alibaba.csp
          ??sentinel-core
          ??1.6.3


          ??com.alibaba.csp
          ??sentinel-transport-simple-http
          ??1.6.3


          ??com.alibaba.csp
          ??sentinel-annotation-aspectj
          ??1.6.3

          在主啟動類中添加規(guī)則:

          @SpringBootApplication
          public?class?SentinelDemoApplication?{

          ????public?static?void?main(String[]?args)?{
          ????????initFlowRules();
          ????????SpringApplication.run(SentinelDemoApplication.class,?args);
          ????}

          ????//初始化規(guī)則
          ????private?static?void?initFlowRules(){
          ????????List?rules=new?ArrayList<>();?//限流規(guī)則的集合
          ????????FlowRule?flowRule=new?FlowRule();
          ????????flowRule.setResource("sayHello");//資源(方法名稱、接口)
          ????????flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);?//限流的閾值的類型
          ????????flowRule.setCount(2);
          ????????rules.add(flowRule);
          ????????FlowRuleManager.loadRules(rules);
          ????}

          }

          還需要通過配置的方式將 SentinelResourceAspect 注冊為一個 Spring Bean:

          @Configuration
          public?class?AopConfiguration?{

          ????@Bean
          ????public?SentinelResourceAspect?sentinelResourceAspect(){
          ????????return?new?SentinelResourceAspect();
          ????}
          }

          此刻我們可以通過注解 @SentinelResource 來定義資源 :

          @RestController
          public?class?SentinelController?{
          ????
          ????//針對方法級別的限流
          ????@SentinelResource(value?=?"sayHello",?blockHandler?=?"exceptionHandler",?fallback?=?"fallbackHandler")
          ????@GetMapping("/say")
          ????public?String?sayHello(String?name)?{
          ????????System.out.println("hello?world");
          ????????if?(1?==?1)?throw?new?RuntimeException("Hello");
          ????????return?"hello?world";
          ????}

          ????//?該方法的參數(shù)除了?BlockException,包括參數(shù)、返回值,需要與原來的資源方法一致
          ????public?String?exceptionHandler(String?name,?BlockException?ex)?{
          ????????return?"blockHandler:"?+?name?+?ex.getMessage();
          ????}

          ????//用于在拋出異常的時候提供 fallback處理邏輯。
          ????public?String?fallbackHandler(String?name)?{
          ????????return?"fallbackHandler:"?+?name;
          ????}
          }

          啟動服務(wù)就可以看到效果了。這里需要加入到Sentinel-dashboard中:-Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-demo



          贈書福利

          書籍:贈送?3?本實(shí)戰(zhàn)Alibaba Sentinel:深度解析微服務(wù)高并發(fā)流量治理》,涵蓋的知識主要包括:限流與熔斷等基礎(chǔ)概念、Sentinel的特性與性能壓測,Sentinel概念、核心類與數(shù)據(jù)結(jié)構(gòu),Sentinel整體工作流程,資源指標(biāo)數(shù)據(jù)統(tǒng)計(jì),限流與流量效果控制,熔斷降級與熔斷器,授權(quán)與系統(tǒng)自適應(yīng)功能,擴(kuò)展Sentinel實(shí)現(xiàn)開關(guān)降級,Sentinel動態(tài)數(shù)據(jù)源,Sentinel適配主流框架的實(shí)現(xiàn)原理,熱點(diǎn)參數(shù)限流,集群限流,異步調(diào)用鏈的支持,資源指標(biāo)數(shù)據(jù)的收集與持久化。

          更多介紹和目錄可以點(diǎn)擊下面鏈接了解。

          贈送規(guī)則:直接點(diǎn)擊下方抽獎小程序,第三方工具,無任何套路!

          點(diǎn)擊抽獎:實(shí)戰(zhàn)Alibaba Sentinel

          開獎時間:5月14日20:00


          如有文章對你有幫助,

          在看”和轉(zhuǎn)發(fā)是對我最大的支持!

          推薦

          點(diǎn)擊領(lǐng)?。?span style="outline: 0px;max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;">151個大廠面試講解?。▓D片可上下滑動!)??

          瀏覽 47
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码一区二区激情 | 国产无码小电影 | 国产精品三级在线观看 | 欧美一级内射美妇网站 | 九热精品在线观看 |