<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>

          sentinel初探

          共 2217字,需瀏覽 5分鐘

           ·

          2021-12-02 09:40

          背景:

          ?????? 最近線上系統(tǒng)遇到線程耗盡,導(dǎo)致不能正常辦理業(yè)務(wù)問題。通過分析發(fā)現(xiàn),因?yàn)槠渲袃蓚€(gè)定時(shí)任務(wù)觸發(fā)時(shí)間短,每個(gè)處理耗時(shí)反而很長(zhǎng),線程耗盡,已獲得的線程部分報(bào)沒有提供者,即服務(wù)不可用,同時(shí)導(dǎo)致部分業(yè)務(wù)請(qǐng)求無法獲得線程,業(yè)務(wù)中斷無返回。


          ?????? 解決此具體問題可以用具體方案,比如將線程數(shù)量調(diào)大,有問題的定時(shí)任務(wù)觸發(fā)時(shí)間調(diào)長(zhǎng)。但是,我們希望避免類似問題再出現(xiàn),因此可以采用熔斷限流組件。比如Netflix的一款開源限流組件Hystrix,作為作為Spring Cloud官方默認(rèn)的熔斷組件,但是已經(jīng)停止維護(hù)。另外一款是18年7月開源的sentinel,行業(yè)應(yīng)用普遍。


          ? ? ? ?什么是熔斷:個(gè)人理解如果當(dāng)調(diào)用失敗達(dá)到指定的次數(shù),則將熔斷器打開一段時(shí)間,即將請(qǐng)求鏈路斷開;在指定時(shí)間內(nèi),都不再讓消費(fèi)者向提供者發(fā)送請(qǐng)求;當(dāng)熔斷時(shí)間到了,就將熔斷器設(shè)置為半打開的狀態(tài),此時(shí)消費(fèi)者可以往提供者發(fā)送請(qǐng)求,并統(tǒng)計(jì)成功次數(shù),如果達(dá)到指定的成功次數(shù),熔斷器則變?yōu)殛P(guān)閉狀態(tài),即將請(qǐng)求鏈路打開,否則熔斷器又變回打開狀態(tài)。


          ???????什么是限流:個(gè)人理解限制單位時(shí)間內(nèi)請(qǐng)求數(shù)量,比如每秒只能1個(gè)請(qǐng)求,多余請(qǐng)求直接返回,不會(huì)發(fā)到服務(wù)提供者上去。


          ?????? 由于系統(tǒng)采用的是dubbo框架,dubbo自帶服務(wù)降級(jí),但是其服務(wù)降級(jí)可理解為將后端報(bào)錯(cuò)包裝成具有業(yè)務(wù)意義的返回,并不帶熔斷。所以盡管每次因?yàn)?RPC 異常而導(dǎo)致調(diào)用失敗,也不會(huì)進(jìn)行熔斷處理;即不管調(diào)用失敗多少次,消費(fèi)者還是會(huì)繼續(xù)進(jìn)行調(diào)用。其實(shí)這樣會(huì)導(dǎo)致服務(wù)的資源浪費(fèi):

          ?????? 只要服務(wù)提供者出現(xiàn)異常達(dá)到一定的次數(shù),其實(shí)可以理解為服務(wù)提供者短時(shí)間內(nèi)已經(jīng)不能正常提供服務(wù)了,后續(xù)再調(diào)用也是浪費(fèi)資源。當(dāng)出現(xiàn)提供者不可用,消費(fèi)者還會(huì)進(jìn)行 1+retires 次的 RPC 調(diào)用,這樣就更加浪費(fèi)資源了。所以,為 dubbo 配一個(gè)熔斷機(jī)制是非常有必要的了。

          ?

          Sentinel(微服務(wù)的哨兵)簡(jiǎn)介:

          ?????? 隨著分布式系統(tǒng)變得越來越流行,服務(wù)之間的可靠性變得比以往任何時(shí)候都更加重要。Sentinel以“流量”為切入點(diǎn),在流量控制、?流量整形、熔斷、系統(tǒng)自適應(yīng)保護(hù)等多個(gè)領(lǐng)域開展工作,保障微服務(wù)的可靠性和彈性。哨兵具有以下特點(diǎn):

          ????豐富的應(yīng)用場(chǎng)景:Sentinel在阿里巴巴已經(jīng)被廣泛使用,幾乎覆蓋了近10年雙11(11.11)購(gòu)物節(jié)的所有核心場(chǎng)景,比如“秒殺”需要限制突發(fā)流量到滿足系統(tǒng)容量、消息削峰填谷、下游不可靠業(yè)務(wù)斷路、集群流量控制等。


          ????實(shí)時(shí)監(jiān)控:Sentinel 還提供實(shí)時(shí)監(jiān)控能力??梢詫?shí)時(shí)查看單臺(tái)機(jī)器的運(yùn)行時(shí)間信息,以及500個(gè)節(jié)點(diǎn)以下集群的聚合運(yùn)行時(shí)間信息。


          ????廣泛的開源生態(tài)系統(tǒng):Sentinel 提供與常用框架和庫(kù)(例如 Spring Cloud、Dubbo 和 gRPC)的開箱即用集成。您只需將適配器依賴項(xiàng)添加到?您的服務(wù)即可輕松使用 Sentinel。


          ????多語(yǔ)言支持:Sentinel 為 Java、Go和C++提供了本機(jī)支持。


          ????豐富的SPI擴(kuò)展:Sentinel提供簡(jiǎn)單易用的SPI擴(kuò)展接口,可以讓您快速自定義邏輯,例如自定義規(guī)則管理、適配數(shù)據(jù)源等。


          ????具體可以參考:https://gitee.com/rmlb/Sentinel/

          ?

          Sentinel使用

          ?????? 本demo使用技術(shù)springboot+dubbo+mybatis-puls+sentinel,工程已上傳github,地址是:https://github.com/zbf2016/springboot-dubbo-sentinel.git

          ?????? 工程目錄截圖:

          ????????d53549360ea85c51da30593613f8c614.webp

          ?????? dubbo-service:接口模塊,所有需要暴露的接口放此模塊,會(huì)被dubbo-consumer和dubbo-service模塊依賴。

          ?????? dubbo-common:公共模塊,主要放工具類等。

          ?????? dubbo-consumer:消費(fèi)者模塊獨(dú)立模塊。

          ?????? dubbo-provider:服務(wù)提供者獨(dú)立模塊。

          ?????? sentinel配置放在common模塊,如下:

          2d92ca438e75673faada2f741d1f3416.webp

          ?????? 服務(wù)提供者接口:

          7a3332dc4bc14eb6d44cedbb2abc400e.webp

          ?????? 服務(wù)提供者接口實(shí)現(xiàn)

          ab2f63dacbd579f7f8c3791699b7d540.webp

          ?????? 消費(fèi)者需要繼承熔斷流控規(guī)則類:

          6ec3baaf83cc0a222a08bcf2a058a7ac.webp

          ?????? 測(cè)試,服務(wù)提供者不啟動(dòng),模擬100次請(qǐng)求,一秒請(qǐng)求2次

          58644806c7e045cf7b66d7653b254475.webp

          ?????? 觀察結(jié)果如下:

          e811512e55cf4a1e4fbd085ec9646132.webp

          ?????? 當(dāng)?shù)?次請(qǐng)求,第2次請(qǐng)求,第4次請(qǐng)求,第6次請(qǐng)求都是正常,沒有被限流,也就是符合1QPS的限流規(guī)則,說明sentinel起了限流作用。

          5586937b7db763f6c21c29b56f849a3a.webp

          ?????? 當(dāng)?shù)?0次請(qǐng)求后,所有的請(qǐng)求都被熔斷了,符合熔斷規(guī)則設(shè)置的5秒內(nèi)10個(gè)請(qǐng)求,有2個(gè)異常及以上即熔斷。

          ??????

          Sentinel監(jiān)控

          ?????? Sentinel監(jiān)控可以直接在github下載jar包,參考github即可,啟動(dòng)后如下所示:

          17f26b5e23e626ad2a9200321751bf80.webp


          賬號(hào)密碼都是sentinel,初次進(jìn)入是空白

          a15f57ffc980256fb67b5d634ed1295b.webp


          ?????? 當(dāng)有請(qǐng)求之后,可在控制界面配置限流規(guī)則和熔斷規(guī)則,目前只在服務(wù)生效期間有用,服務(wù)重啟需要重新配,如需要長(zhǎng)期有效,可以整合nacos即可

          2d4d53055b7ab2fa3266e932078b63f3.webp

          ?????? 總結(jié):sentinel使用簡(jiǎn)單,功能強(qiáng)大,在微服務(wù)系統(tǒng)中被廣泛使用,讓系統(tǒng)高可用。


          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  四虎影库久久久 | 免费无码黄十八禁 | 国产精品美女被操视频 | 豆花视频在线免费观看 | 爽好紧别夹喷水免费视频 |