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

          FA2# 集群流控使用場景和實現(xiàn)原理

          共 1398字,需瀏覽 3分鐘

           ·

          2021-04-02 16:43

          前言

          資源是有限的,預(yù)測是必要的,然而意外也是可能發(fā)生的。我們可以看到一些重大生產(chǎn)事故往往是被突發(fā)的流量沖跨的,對流量的治理和防護就尤為重要。防患于未然,保障服務(wù)高可用,需要引起重視。另外我們也需要對標行業(yè)一流治理能力,本文介紹下高可用中另外一個成員,集群限流。

          一、集群流控使用場景

          場景一  需要控制調(diào)用總量

          某些場景下,需要對APP應(yīng)用某些資源(接口)的調(diào)用總量設(shè)置限制。例如:該APP由于依賴了第三方提供服務(wù),第三方流量有限制,需要對總量進行管控。部署的節(jié)點可能擴縮容,這種單純通過單機限流措施難以湊效。

          場景二 單機流量不均衡

          應(yīng)用APP部署了10個節(jié)點,總流量為2000QPS,每個節(jié)點200。這事理想狀態(tài),實際可能由于負載均衡造成流量傾斜。有的節(jié)點流量高、有的節(jié)點流量低。如果只從單機限流角度限流,可能會出現(xiàn)一個APP應(yīng)用中有的節(jié)點已經(jīng)發(fā)生限流,有的負載還很低的情況。

          場景三  部署節(jié)點配置不同

          應(yīng)用APP部署了10個節(jié)點,有的節(jié)點2C4G,有的節(jié)點8C16G。這種混合部署的場景,如果只從單機設(shè)置限流閾值,只能以配置低的壓測值作為設(shè)置閾值,高配置節(jié)點會造成資源浪費。

          備注:通過集群流控配合單機限流更好的應(yīng)對不同場景流量防護,是流量防護中比較好的實踐。


          二、集群流控實現(xiàn)原理

          實現(xiàn)集群流控,需要統(tǒng)計請求的調(diào)用總量。我們采用在應(yīng)用內(nèi)部選一臺機器作為Token Server,用于流量的統(tǒng)計和token的發(fā)放。

          請求流程

          如下圖所示,在請求鏈路中當服務(wù)A發(fā)起的請求調(diào)用B服務(wù)時,B服務(wù)開啟了集群流控,其中一個節(jié)點作為Token Server,其他節(jié)點均為Token Client。流程如下:

          • 當請求到達節(jié)點時會向Token Server發(fā)起token請求
          • Token Server根據(jù)是否達到閾值決定是否發(fā)放token
          • 承接請求的節(jié)點獲取token后向下游調(diào)用,超過限流閾值Token Server未發(fā)放token,請求被拒絕

          實現(xiàn)原理

          集群流控的實現(xiàn)依然基于令牌桶實現(xiàn)的,下面為示意圖:

          工作過程

          • 請求流量從令牌桶中獲取令牌,持有令牌放行,否則被拒
          • 假如設(shè)置閾值每秒允許100個請求通過,則請求發(fā)送速率r=100/s
          • 需要令牌生產(chǎn)速率為1/r,即1/100每10毫秒產(chǎn)生一個令牌
          • 令牌桶容量為b已滿多余的令牌將被丟棄
          • 令牌桶為空請求被拒
          • 允許突發(fā)流量最大突發(fā)流量為令牌桶容量b
          • 請求通過相應(yīng)的令牌從令牌桶中移除

          動態(tài)選主

          我們的服務(wù)有發(fā)布、有擴縮容,原來被選為Token Server的節(jié)點可能會下線等,我們采取了基于分布式鎖(公平鎖)的方式來動態(tài)選主。

          使用公平鎖主要避免獨占鎖帶來的羊群效益。

          閾值設(shè)置

          集群閾值的設(shè)置有兩種類型:全局閾值和單機均攤

          • 全局閾值表示整個集群能承受的總閾值流量,不隨節(jié)點的變化而變化 例如:全局閾值設(shè)置為500,無論該應(yīng)用部署了多少節(jié)點,總的流量閾值保持500不變

          • 單機均攤指每個節(jié)點能承受的閾值,隨著節(jié)點的增減Token Server的閾值會動態(tài)變化 例如:單機均攤設(shè)置為100,3個節(jié)點集群流控總閾值為300;擴容了兩個節(jié)點后,總閾值則為500


          瀏覽 41
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  豆花官网进入免费操逼 | 人妻公日日澡久久久 | 啊啊啊额在线视频 | 男女WWWWWWWWW | 无码国产69精品久久久久 |