1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        限流 & 熔斷的考量

        共 1951字,需瀏覽 4分鐘

         ·

        2021-09-30 23:12



        -     前言    -


        限流的原則,是盡量在流量源頭限,并且是需要依據(jù)現(xiàn)有團隊所掌握的技能來。

         

         

        如上最左側便是主要流量的來源入口,首先就要限制的地方就是slb節(jié)點的income流量。


        slb節(jié)點的流量特點是啥?加限流怎么加?限流限的是啥?


        錯了,此處是攔截,不是限流...


        流量特點:

        • 幾乎來自外部的流量都從這個入口過來,無論是帶業(yè)務屬性的還是不帶業(yè)務屬性的、ddos的、正常流量、爬蟲等統(tǒng)統(tǒng)從這里來。


        需要攔截是啥(由于流量過了這個節(jié)點就是我們的應用系統(tǒng)了,因此最好是把非業(yè)務應用相關的流量擋住,限制住,讓它有序進來,不要沖垮系統(tǒng)):

        • ddos攻擊流量
        • 其他通用級的不安全流量:sql注入、xss注入等

        有些許限流的:

        • 連接并發(fā)限制
        • 每ip請求限流控制
        • 爬蟲流量


        上述是slb節(jié)點,但是也有團隊考慮到本身技能,以及代碼git化存儲的原則,會把某些配置往后面的nginx/kong移,因為slb的配置是UI界面化的,代碼化存儲比較不直接;但是nginx/kong這種就相對容易多了,而且恢復時只要腳本到位,分分鐘就恢復一套系統(tǒng),很方便。

         

        nginx節(jié)點的流量特點是啥?加限流怎么加?限流限的是啥?


        到了這里,ddos這種攻擊流量應該算是過濾掉了,常見的sql注入等攻擊也過濾掉了;但是還存在爬蟲流量(有時,這種流量是我們需要的,SEO推廣等);也會包含高級攻擊流量

        因此,nginx節(jié)點,需要做的限流是(通用級別的限流):

        • 爬蟲限流、并發(fā)控制、或者過濾、又或者重定向到蜜罐系統(tǒng)(專門給爬蟲做的系統(tǒng),和主業(yè)務系統(tǒng)隔離)

        • 每ip請求限流

         

        spring cloud gateway節(jié)點的流量特點是啥?加限流怎么加?限流限的是啥?


        到了這里,一般普通靜態(tài)H5資源的訪問已經(jīng)沒有了(已經(jīng)重定向到其他nginx節(jié)點分流處理掉了);gateway處理的都是動態(tài)編程語言需要處理的流量,這里指java。

        也就是說,到了這個節(jié)點,開始進入java系統(tǒng)領域,流量承受能力比nginx降了1個等級,需要做更多的限制。

        需要做的:

        • 普通場景下的限流

        • 突發(fā)流量下的限流,如:秒殺等

        • CC攻擊+驗簽的過濾(由于公私鑰證書一般加在java節(jié)點上,因此此處放java系統(tǒng)范疇,而不是slb之前,或者nginx之前)

        • 可以在gateway 動態(tài)路由中分別配置各自的限流配置,以及上述自定義的CC+驗簽配置

         隔離性:

        • 由于gateway流量會轉發(fā)給后端一大堆微服務,假設由于哪個java微服務處理不過來hang住了,又不想影響其他后端為服務的轉發(fā),因此需要做隔離性。

        • 可以:

        • hystrix

        • sentinel

        • guava


        此處的限流和nginx的限流有啥區(qū)別?

        • nginx的閾值要大,因為nginx覆蓋的范圍不光是java領域,還有H5等其他范圍

        • nginx的限流配置維度是通用的,但是spring cloud gateway就變化多了,可以通過自定義KeyResolver來決定所需要的維度來限流,如:用戶id維度、ip維度、租戶維度等,靈活度大了。

         

        java微服務節(jié)點的流量特點是啥?加限流怎么加?限流限的是啥?


        到了這里,就是具體的微服務應用了,單個微服務所能承受的流量,做得好的話是能用jmeter測量出來的,可以通過這個值來參考設置。


        再然后,到了具體服務中了,其實限流的維度就更多了,當然需要考量下是否需要加很多限流,脆弱敏感的服務就加些,比如計費等,或者用其他技術做限流,如:queue,然后固定住consumer數(shù)來消費,穩(wěn)住速率。


        所采用技術和gateway一樣,也可以自己實現(xiàn),實現(xiàn)難度都還好。


        流量大的系統(tǒng),最好是用特定技術把income請求根據(jù)不同的維度劃分好獨立的線程池,不要相互影響;由本服務發(fā)起的到其他服務的請求調(diào)用,也需要單獨的線程池來處理??傊繕司褪嵌吉毩ⅲ换ハ嘤绊?,即便其他服務慢了,自己也不慢。


        因此,熔斷又出現(xiàn)了:

        • 當其他服務很慢,超時了,我方作為服務調(diào)用方不能被拖垮啊,這時,就斷開吧,用個指定的協(xié)議響應暫且認定為服務不可用之類的,等后續(xù)再補償回查。

        • 當然關鍵服務是不能這么處理的,只能是輔助服務。關鍵服務就必須要jmeter壓測提升性能。

        • 依賴:

        • 核心服務的梳理

        • 輔助服務熔斷的返回值+應對方式

        • 核心服務的壓側

        源:

        https://www.cnblogs.com/aarond/p/ratelimiter.html

        瀏覽 79
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            啪网址| 蜜芽tv跳转接口点击进入 | 日韩精品无码系列视频 | 超级大乳bbwbbwbbw | 国产无遮挡呻吟娇喘视频 | 大香蕉国产精品 | 免费黄片AAA | 97人人爽人人 | 老鸭窝黄色 | 日本少妇无码精品12p顾欣怡 |