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

          程序員都應(yīng)該懂的微服務(wù)容錯(cuò)與隔離:熔斷保護(hù)、超時(shí)與重試原理

          共 1931字,需瀏覽 4分鐘

           ·

          2022-01-23 01:20


          上文給大家講解的內(nèi)容是微服務(wù)容錯(cuò)與隔離:限流保護(hù),計(jì)數(shù)器+漏桶+令牌桶算法限流實(shí)現(xiàn),那么本文給大家講解的內(nèi)容是微服務(wù)容錯(cuò)與隔離:熔斷保護(hù)、超時(shí)與重試;

          熔斷保護(hù)

          斷路器(Circuit Breaker)就像保險(xiǎn)絲,在電路系統(tǒng)中,一般在所有的家電系統(tǒng)連接外部供電的線路中間都會(huì)加一個(gè)保險(xiǎn)絲,當(dāng)外部電壓過高,達(dá)到保險(xiǎn)絲的熔點(diǎn)時(shí),保險(xiǎn)絲就會(huì)被熔斷,從而可以切斷家電系統(tǒng)與外部電路的聯(lián)通,進(jìn)而保障家電系統(tǒng)不會(huì)因?yàn)殡妷哼^高而損壞。

          Hystrix提供的熔斷器就有類似功能,在一定時(shí)間內(nèi)調(diào)用的服務(wù)次數(shù)達(dá)到設(shè)定的閾值,并且出錯(cuò)的次數(shù)也達(dá)到設(shè)置的出錯(cuò)閾值時(shí),就會(huì)進(jìn)行服務(wù)熔斷,讓服務(wù)調(diào)用方執(zhí)行本地設(shè)置的降級(jí)策略。但是Hystrix提供的熔斷器具有自我反饋、自我恢復(fù)的功能,Hystrix會(huì)根據(jù)調(diào)用接口的情況,讓熔斷器在關(guān)閉(closed)、打開(open)、半打開(half-open)三種狀態(tài)之間自動(dòng)切換。

          ● closed→open:正常情況下熔斷器為closed狀態(tài),當(dāng)訪問同一個(gè)接口的次數(shù)超過設(shè)定閾值并且錯(cuò)誤比例超過設(shè)置的錯(cuò)誤閾值時(shí),就會(huì)打開熔斷機(jī)制,這時(shí)候熔斷器的狀態(tài)從closed變?yōu)閛pen。

          ● open→half-open:當(dāng)服務(wù)接口對(duì)應(yīng)的熔斷器狀態(tài)為open時(shí),所有服務(wù)調(diào)用方調(diào)用該服務(wù)接口時(shí)都執(zhí)行本地降級(jí)方法,Hystrix提供了一種測(cè)試策略,也就是設(shè)置了一個(gè)時(shí)間窗口,從熔斷器的狀態(tài)變?yōu)閛pen開始的一個(gè)時(shí)間窗口內(nèi),調(diào)用該服務(wù)接口時(shí)都委托服務(wù)降級(jí)方法執(zhí)行。如果時(shí)間超過了時(shí)間窗口,則熔斷器的狀態(tài)從open變?yōu)閔alf-open,這個(gè)時(shí)候熔斷器允許定量服務(wù)請(qǐng)求。

          ● half-open→closed:當(dāng)熔斷器的狀態(tài)為half-open時(shí),如果調(diào)用成功達(dá)到一定比例,則關(guān)閉熔斷器,否則熔斷器的狀態(tài)再次變?yōu)閏losed。

          超時(shí)與重試

          在服務(wù)容錯(cuò)模式中,超時(shí)模式是最常見的容錯(cuò)模式。在實(shí)際開發(fā)中,有太多的故障是沒有設(shè)置超時(shí)時(shí)間導(dǎo)致的服務(wù)“Hang住”或者OOM異常,或者是超時(shí)時(shí)間設(shè)置不合理導(dǎo)致的資源無法回收問題,最終導(dǎo)致系統(tǒng)崩潰。這些故障都是因?yàn)闆]有意識(shí)到超時(shí)設(shè)置的重要性而造成的。

          超時(shí)場(chǎng)景

          ● 代理層超時(shí)與重試:Haproxy、Nginx、Twemproxy組件可實(shí)現(xiàn)代理功能,如Haproxy和Nginx可以實(shí)現(xiàn)請(qǐng)求的負(fù)載均衡,Twemproxy可以實(shí)現(xiàn)Redis的分片代理。我們需要設(shè)置代理與后端真實(shí)服務(wù)器之間的網(wǎng)絡(luò)連接和讀寫超時(shí)時(shí)間。

          ● Web容器超時(shí):Tomcat、Jetty等提供HTTP服務(wù)運(yùn)行環(huán)境,我們需要設(shè)置客戶端與容器之間的網(wǎng)絡(luò)連接和讀寫超時(shí)時(shí)間,以及在此容器中默認(rèn)的Socket網(wǎng)絡(luò)連接和讀寫超時(shí)時(shí)間。

          ● 中間件客戶端超時(shí)與重試:如消息中間件、CXF、Httpclient等,我們需要設(shè)置客戶的網(wǎng)絡(luò)連接和讀寫超時(shí)時(shí)間,以及失敗重試機(jī)制。

          ● 數(shù)據(jù)庫客戶端超時(shí):如MySQL、Oracle,需要分別設(shè)置JDBCConnection、Statement的網(wǎng)絡(luò)連接和讀寫超時(shí)時(shí)間、事務(wù)超時(shí)時(shí)間、獲取連接池連接等待時(shí)間。

          ● 業(yè)務(wù)超時(shí):如超時(shí)訂單取消任務(wù)、超時(shí)活動(dòng)關(guān)閉,以及通過Future#get(timeout,unit)限制某個(gè)接口的超時(shí)時(shí)間。

          ● 前端Ajax超時(shí):瀏覽器通過Ajax訪問網(wǎng)絡(luò)時(shí)的網(wǎng)絡(luò)連接和讀寫超時(shí)時(shí)間。

          重試機(jī)制

          重試是伴隨著超時(shí)的,常見于因網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致的服務(wù)調(diào)用超時(shí)場(chǎng)景。重試策略的參數(shù)設(shè)定一般需要與超時(shí)時(shí)間設(shè)置結(jié)合,要考慮接口的響應(yīng)時(shí)間。立刻重試可能不是太好的策略,因?yàn)檫@樣會(huì)導(dǎo)致在網(wǎng)絡(luò)抖動(dòng)的情況下對(duì)依賴服務(wù)的大量重試請(qǐng)求風(fēng)暴;太長時(shí)間后再重試,會(huì)占用資源,失去重試機(jī)制的容錯(cuò)價(jià)值。在集群下,需要考慮對(duì)下游服務(wù)集群的同一個(gè)服務(wù)實(shí)例的重試次數(shù)與切換其他服務(wù)實(shí)例進(jìn)行重試次數(shù)的比例,通常建議原有機(jī)器負(fù)載過高而響應(yīng)延遲時(shí),可以切換到集群中的其他服務(wù)實(shí)例,這樣更快返回響應(yīng)的概率會(huì)更大一點(diǎn)。

          冪等

          所謂冪等就是多次執(zhí)行操作所產(chǎn)生的影響與一次執(zhí)行的影響相同。

          在允許重試的場(chǎng)景中,我們需要保證服務(wù)提供方能夠?qū)崿F(xiàn)業(yè)務(wù)邏輯的冪等,因?yàn)橹卦嚈C(jī)制可能導(dǎo)致服務(wù)提供方被多次調(diào)用。冪等設(shè)計(jì)需要解決的是“寫重試”的問題。

          本文給大家講解的內(nèi)容是微服務(wù)容錯(cuò)與隔離:熔斷保護(hù)、超時(shí)與重試

          1. 下篇文章給大家講解的內(nèi)容是微服務(wù)容錯(cuò)與隔離:SpringCloudHystrix容錯(cuò)框架

          2. 覺得文章不錯(cuò)的朋友可以轉(zhuǎn)發(fā)此文關(guān)注小編;

          3. 感謝大家的支持!



          瀏覽 38
          點(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>
                  成人在线视频黄色 | 顶级欧美AAAAAA特级欧美AAAAAA | 日韩骚逼网站 | 亚洲视频在线观看高清无码 | 日韩国产在线一区 |