最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Chassis3過載狀態(tài)下的快速失敗解決分析

 更新時(shí)間:2024年01月17日 09:27:47   作者:liubao68  
本文解密了Java Chassis 3快速失敗相關(guān)的機(jī)制和背后故事,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Java Chassis 3技術(shù)解密:過載狀態(tài)下的快速失敗

在 熔斷機(jī)制的改進(jìn)路程 技術(shù)解密中,總結(jié)了如何設(shè)計(jì)一個(gè)優(yōu)雅的熔斷機(jī)制。 作為微服務(wù)最重要的治理策略之一,熔斷機(jī)制能夠在故障場(chǎng)景起到防止雪崩效應(yīng)的作用。過載狀態(tài)是一種特殊的故障場(chǎng)景,主要指超出了系統(tǒng)處理能力的請(qǐng)求量。 在過載狀態(tài),熔斷機(jī)制可能無法起到預(yù)期的效果。 為了對(duì)過載狀態(tài)下的防護(hù)有個(gè)比較直觀的認(rèn)識(shí), 我們先討論幾個(gè)典型場(chǎng)景:

  • 假設(shè)系統(tǒng)啟用了熔斷機(jī)制,并且設(shè)置了隔離倉來檢測(cè)過載情況。 當(dāng)系統(tǒng)流量過載的時(shí)候,隔離倉觸發(fā)過載保護(hù),熔斷機(jī)制會(huì)短暫隔離對(duì)于實(shí)例的訪問,并將流量轉(zhuǎn)移到其他實(shí)例。 由于總的處理實(shí)例數(shù)減少,系統(tǒng)實(shí)際能夠處理的負(fù)荷在熔斷機(jī)制生效的場(chǎng)景下,會(huì)進(jìn)一步降低。 這意味著,相較于沒有熔斷機(jī)制,過載場(chǎng)景熔斷機(jī)制反而更容易觸發(fā)雪崩效應(yīng)。
  • 實(shí)際業(yè)務(wù)場(chǎng)景中,一些接口比較耗時(shí),其他接口都很快的情況非常常見。 如果對(duì)耗時(shí)接口開啟隔離倉進(jìn)行過載防護(hù),會(huì)增加耗時(shí)接口的失敗率;如果不開啟過載防護(hù),耗時(shí)接口的并發(fā)增加,直觀的表現(xiàn)是用戶響應(yīng)時(shí)間的增加。在一些業(yè)務(wù)系統(tǒng)看來,用戶體驗(yàn)的下降的影響遠(yuǎn)小于故障率增加的影響。 微服務(wù)治理策略對(duì)于這類系統(tǒng),也可能帶來適得其反的效果。

在過載場(chǎng)景,不能進(jìn)入熔斷狀態(tài),這需要額外的保護(hù)機(jī)制來防止過載。 快速失敗機(jī)制是防止過載的最常用手段,雖然存在性能要求不高的業(yè)務(wù)場(chǎng)景,快速失敗會(huì)導(dǎo)致錯(cuò)誤率提升這種看似矛盾的情況,但是沒有讓快速失敗機(jī)制關(guān)上大門,恰當(dāng)?shù)目焖偈〔⒋钆錁I(yè)務(wù)上的重試的處理還可以明顯改善用戶體驗(yàn)。 快速失敗機(jī)制的要求很簡(jiǎn)單,就是盡早的拒絕過載流量,盡可能減少過載流量占用的CPU和其他資源時(shí)間。

限流

限流是最常用的快速失敗措施。 但有個(gè)細(xì)節(jié)經(jīng)常會(huì)被忽略:流量經(jīng)常是不均衡的,瞬時(shí)流量超過閾值,不代表這些流量就應(yīng)該被拒絕掉。 一個(gè)良好的限流措施,需要對(duì)流量進(jìn)行適當(dāng)?shù)氖崂恚詼p少不必要的限流。 比如下圖,限流的核心作用是將每個(gè)時(shí)間片內(nèi),不均勻的流量,變成均勻的流量。

限流發(fā)生的時(shí)機(jī)越早越好。通常會(huì)在 edge service 應(yīng)用限流策略。

## 服務(wù)治理配置
servicecomb:
  matchGroup:
    allOperation: |
      matches:
        - apiPath: 
            prefix: "/"
  rateLimiting:
  ## 限流器每1毫秒允許通過10個(gè)請(qǐng)求,如果一個(gè)請(qǐng)求超過1000毫秒沒有獲取到
  ## 許可,將被拒絕
    allOperation: |
      rate: 10
      limitRefreshPeriod: 1
      timeoutDuration: 1000

上述限流策略限制了單位時(shí)間內(nèi)進(jìn)入 edge service 的請(qǐng)求數(shù)量,并能對(duì)請(qǐng)求進(jìn)行梳理。限制數(shù)量可能在應(yīng)用程序生命周期過程中難于規(guī)劃,需要通過系統(tǒng)性的性能測(cè)試來評(píng)估限制大小。 一個(gè)比較好的策略是通過并發(fā)數(shù)來限制流量。在 edge service, 可以限制發(fā)往某個(gè)下游的實(shí)例當(dāng)前正在處理的請(qǐng)求數(shù)。

## 服務(wù)治理配置
servicecomb:
  matchGroup:
    allOperation: |
      matches:
        - apiPath: 
            prefix: "/"
  instanceBulkhead:
    ## 隔離倉限制正在處理的請(qǐng)求數(shù)為20個(gè),新來的請(qǐng)求等待1000毫秒沒有獲取到許可,將被拒絕。
    allOperation: |
      maxConcurrentCalls: 100
      maxWaitDuration: 1000

相比較于單位時(shí)間內(nèi)請(qǐng)求數(shù), 當(dāng)前正在處理的請(qǐng)求數(shù)能夠很好的反饋當(dāng)前的系統(tǒng)繁忙程度,因?yàn)橐粋€(gè)請(qǐng)求的時(shí)延增加,會(huì)導(dǎo)致當(dāng)前正在處理的請(qǐng)求數(shù)增加。對(duì)于CPU密集型任務(wù), 可以設(shè)置稍微小一點(diǎn)的值;對(duì)于IO密集型任務(wù),可以設(shè)置稍微大一點(diǎn)的值。

線程池隊(duì)列

在線程池入隊(duì)和出隊(duì)的時(shí)候,進(jìn)行快速失敗,也是非常常用而且比較有效的手段。 但是這類機(jī)制不適用于edge service純異步工作模式場(chǎng)景, 更加適合于微服務(wù)的同步工作模式。

servicecomb:
  executor:
    default:
      maxQueueSize-per-group: 1000

上述配置限制了線程池的隊(duì)列大小, 少量的過載請(qǐng)求會(huì)被排隊(duì),隊(duì)列超限后就會(huì)快速拒絕并失敗。

servicecomb:
  rest:
    server:
      requestWaitInPoolTimeout: 1000

Java Chassis在出隊(duì)的時(shí)候,也會(huì)檢測(cè)任務(wù)等待的時(shí)間。 如果等待時(shí)間過長(zhǎng), 也會(huì)立即拒絕改任務(wù),避免額外的處理資源浪費(fèi)。

全局的超時(shí)檢測(cè)

一般的RPC系統(tǒng)會(huì)針對(duì)請(qǐng)求發(fā)送到響應(yīng)接收設(shè)置請(qǐng)求超時(shí)時(shí)間。 微服務(wù)系統(tǒng)結(jié)構(gòu)通常的調(diào)用關(guān)系比較復(fù)雜。 比如一個(gè)請(qǐng)求鏈路可能涉及 a -> b -> c -> d。 如果我們的設(shè)計(jì)目標(biāo)是請(qǐng)求處理時(shí)間小于30s, 如果在 b 接收到 a 的請(qǐng)求的時(shí)候, 發(fā)現(xiàn)已經(jīng)處理了 30s, b完全可以不需要請(qǐng)求c來處理這個(gè)請(qǐng)求, 快速失敗。 Java Chassis 能夠在任務(wù)處理的關(guān)鍵階段,進(jìn)行全局的已經(jīng)處理的時(shí)間檢查。

全局的超時(shí)檢測(cè)可以處理對(duì)快速失敗有非常特殊要求的業(yè)務(wù)場(chǎng)景,考慮到多數(shù)情況下都會(huì)很少使用,這里不在詳細(xì)描述其技術(shù)細(xì)節(jié), 感興趣的開發(fā)者可以參考Java Chassis的開發(fā)指導(dǎo)。

客戶故事:系統(tǒng)毛刺(指系統(tǒng)中極低概率的請(qǐng)求緩慢或者處理超時(shí))是困擾覺大多數(shù)應(yīng)用的老大難問題。 因?yàn)閷?dǎo)致系統(tǒng)毛刺的因素非常多,包括請(qǐng)求的分布不均衡、CPU調(diào)度的不可預(yù)期、垃圾回收等等。 系統(tǒng)毛刺給客戶的用戶體驗(yàn)評(píng)價(jià)帶來很多負(fù)面的影響,整體請(qǐng)求成功率偏低,平均響應(yīng)時(shí)延偏高。 為了改善毛刺,早期的主要機(jī)制是設(shè)置請(qǐng)求超時(shí)時(shí)間,包括設(shè)置某個(gè)具體微服務(wù)的請(qǐng)求超時(shí)時(shí)間,或者根據(jù)調(diào)用的順序,配置逐級(jí)遞減的超時(shí)時(shí)間。 超時(shí)時(shí)間的配置確實(shí)起到了快速失敗的目的,然而在HTTP場(chǎng)景下,超時(shí)會(huì)導(dǎo)致關(guān)閉連接并重新建連,在大并發(fā)場(chǎng)景,會(huì)引入更長(zhǎng)時(shí)間的毛刺和請(qǐng)求超時(shí)。 引入流量梳理和隔離倉機(jī)制后,系統(tǒng)毛刺問題和超時(shí)導(dǎo)致的連接重連問題得到了極大的改善。

以上就是Java Chassis3過載狀態(tài)下的快速失敗解決分析的詳細(xì)內(nèi)容,更多關(guān)于Java Chassis3過載狀態(tài)失敗解決的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mybatis注解sql時(shí)出現(xiàn)的一個(gè)錯(cuò)誤及解決

    Mybatis注解sql時(shí)出現(xiàn)的一個(gè)錯(cuò)誤及解決

    這篇文章主要介紹了Mybatis注解sql時(shí)出現(xiàn)的一個(gè)錯(cuò)誤及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 親測(cè)解決,nacos下線失敗問題

    親測(cè)解決,nacos下線失敗問題

    這篇文章主要介紹了親測(cè)解決,nacos下線失敗問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中枚舉Enum類的超詳細(xì)講解

    Java中枚舉Enum類的超詳細(xì)講解

    ??枚舉??是Java語言中一種特殊的類類型,它通過enum關(guān)鍵字定義,用于表示一組固定的、預(yù)定義的常量,這篇文章主要介紹了Java中枚舉Enum類的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-05-05
  • 你什么是Elastic Stack(ELK)

    你什么是Elastic Stack(ELK)

    這篇文章主要介紹了你什么是Elastic Stack(ELK),ELK是三款軟件的簡(jiǎn)稱,分別是Elasticsearch、Logstash、Kibana組成,需要的朋友可以參考下
    2023-04-04
  • 淺談一下單體架構(gòu)的缺點(diǎn)是什么

    淺談一下單體架構(gòu)的缺點(diǎn)是什么

    這篇文章主要介紹了單體架構(gòu)的缺點(diǎn)是什么,通常我們所使用的傳統(tǒng)單體應(yīng)用架構(gòu)都是模塊化的設(shè)計(jì)邏輯,程序在編寫完成后會(huì)被打包并部署為一個(gè)具體的應(yīng)用,而應(yīng)用的格式則依賴于相應(yīng)的應(yīng)用語言和框架,需要的朋友可以參考下
    2023-04-04
  • mybatis-plus批量更新太慢該如何解決詳解

    mybatis-plus批量更新太慢該如何解決詳解

    這篇文章主要給大家介紹了關(guān)于mybatis-plus批量更新太慢該如何解決的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot內(nèi)置tomcat調(diào)優(yōu)測(cè)試優(yōu)化

    SpringBoot內(nèi)置tomcat調(diào)優(yōu)測(cè)試優(yōu)化

    這篇文章主要介紹了SpringBoot內(nèi)置tomcat調(diào)優(yōu)測(cè)試優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java ForkJoinPool線程池的使用之并行計(jì)算數(shù)組求和實(shí)例

    Java ForkJoinPool線程池的使用之并行計(jì)算數(shù)組求和實(shí)例

    這篇文章主要介紹了Java ForkJoinPool線程池的使用之并行計(jì)算數(shù)組求和實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 一文了解MyBatis Plus批量數(shù)據(jù)插入功能

    一文了解MyBatis Plus批量數(shù)據(jù)插入功能

    mybatisPlus底層的新增方法是一條一條的新增的,下面這篇文章主要給大家介紹了MyBatis Plus批量數(shù)據(jù)插入功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Java中Arrays類和Collections類常用方法示例詳解

    Java中Arrays類和Collections類常用方法示例詳解

    本文總結(jié)了Java中Arrays和Collections類的常用方法,涵蓋數(shù)組填充、排序、搜索、復(fù)制、列表轉(zhuǎn)換等操作,幫助開發(fā)者高效處理集合與數(shù)組數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2025-07-07

最新評(píng)論

永吉县| 靖江市| 牟定县| 镇雄县| 盱眙县| 虹口区| 涿州市| 怀远县| 左权县| 济宁市| 砚山县| 兴城市| 达拉特旗| 陈巴尔虎旗| 白水县| 西乌珠穆沁旗| 锡林郭勒盟| 新安县| 临朐县| 屯留县| 清远市| 瑞金市| 东丽区| 光泽县| 惠水县| 乌拉特中旗| 曲阜市| 武威市| 江源县| 朔州市| 读书| 准格尔旗| 壤塘县| 平凉市| 垫江县| 宁南县| 吴忠市| 瓮安县| 漳州市| 阿尔山市| 明溪县|