SentinelGo0.4.0發(fā)布,支持熱點(diǎn)流量防護(hù)能力-創(chuàng)新互聯(lián)

Sentinel 是阿里巴巴開源的,面向分布式服務(wù)架構(gòu)的流量控制組件,主要以流量為切入點(diǎn),從限流、流量整形、熔斷降級(jí)、系統(tǒng)自適應(yīng)保護(hù)等多個(gè)維度來(lái)幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場(chǎng)景,例如秒殺、冷啟動(dòng)、消息削峰填谷、集群流量控制、實(shí)時(shí)熔斷下游不可用服務(wù)等,是保障微服務(wù)高可用的利器,原生支持 Java/Go/C++ 等多種語(yǔ)言,并且提供 Istio/Envoy/SOFA MOSN 全局流控支持來(lái)為 Service Mesh 提供高可用防護(hù)的能力。

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比馬尾網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式馬尾網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋馬尾地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

近期, Sentinel Go 0.4.0 正式發(fā)布,帶來(lái)了 熱點(diǎn)參數(shù)流控特性,可以自動(dòng)識(shí)別統(tǒng)計(jì)傳入?yún)?shù)中的“熱點(diǎn)”參數(shù)值并分別進(jìn)行流控,對(duì)于防刷、熱點(diǎn)商品訪問(wèn)頻次控制等場(chǎng)景非常有用,是高可用流量防護(hù)中重要的一環(huán)。下面我們來(lái)了解一下熱點(diǎn)參數(shù)流控的場(chǎng)景和原理。

熱點(diǎn)流量防護(hù)介紹

流量是隨機(jī)的,不可預(yù)測(cè)的。為了防止被大流量打垮,我們通常會(huì)對(duì)核心接口配置限流規(guī)則,但有的場(chǎng)景下配置普通的流控規(guī)則是不夠的。我們來(lái)看這樣一種場(chǎng)景——大促峰值的時(shí)候,總是會(huì)有不少“熱點(diǎn)”商品,這些熱點(diǎn)商品的瞬時(shí)訪問(wèn)量非常高。一般情況下,我們可以事先預(yù)測(cè)一波熱點(diǎn)商品,并對(duì)這些商品信息進(jìn)行緩存“預(yù)熱”,以便在出現(xiàn)大量訪問(wèn)時(shí)可以快速返回而不會(huì)都打到 DB 上。但每次大促都會(huì)涌現(xiàn)出一些“黑馬”商品,這些“黑馬”商品是我們無(wú)法事先預(yù)測(cè)的,沒(méi)有被預(yù)熱。當(dāng)這些“黑馬”商品訪問(wèn)量激增時(shí),大量的請(qǐng)求會(huì)擊穿緩存,直接打到 DB 層,導(dǎo)致 DB 訪問(wèn)緩慢,擠占正常商品請(qǐng)求的資源池,最后可能會(huì)導(dǎo)致系統(tǒng)掛掉。這時(shí)候,利用 Sentinel 的熱點(diǎn)參數(shù)流量控制能力,自動(dòng)識(shí)別熱點(diǎn)參數(shù)并控制每個(gè)熱點(diǎn)值的訪問(wèn) QPS 或并發(fā)量,可以有效地防止過(guò)“熱”的參數(shù)訪問(wèn)擠占正常的調(diào)用資源。

Sentinel Go 0.4.0 發(fā)布,支持熱點(diǎn)流量防護(hù)能力

再比如有的場(chǎng)景下我們希望限制每個(gè)用戶調(diào)用某個(gè) API 的頻率,將 API 名稱+userId 作為埋點(diǎn)資源名顯然是不合適的。這時(shí)候我們可以在給 API 埋點(diǎn)的時(shí)候通過(guò) WithArgs(xxx) 將 userId 作為參數(shù)傳入到 API 埋點(diǎn)中,然后配置熱點(diǎn)規(guī)則即可針對(duì)每個(gè)用戶分別限制調(diào)用頻率;同時(shí),Sentinel 也支持針對(duì)某些具體值單獨(dú)配置限流值,進(jìn)行精細(xì)化流控。

熱點(diǎn)參數(shù)埋點(diǎn)/規(guī)則示例:

// 埋點(diǎn)示例
e, b := sentinel.Entry("my-api", sentinel.WithArgs(rand.Uint32()%3000, "sentinel", uuid.New().String()))
// 規(guī)則示例
_, err = hotspot.LoadRules([]*hotspot.Rule{
    {
        Resource:          "my-api",
        MetricType:        hotspot.QPS, // 請(qǐng)求量模式
        ControlBehavior:   hotspot.Reject,
        ParamIndex:        0, // 參數(shù)索引,0 即為第一個(gè)參數(shù)
        Threshold:         50, // 針對(duì)每個(gè)熱點(diǎn)參數(shù)值的閾值
        BurstCount:        0,
        DurationInSec:     1, // 統(tǒng)計(jì)窗口時(shí)長(zhǎng),這里為 1s
        SpecificItems: map[hotspot.SpecificValue]int64{
            // 支持針對(duì)某個(gè)具體值單獨(dú)配置限流值,比如這里針對(duì)數(shù)值 9 限制請(qǐng)求量=0(不允許通過(guò))
            {ValKind: hotspot.KindInt, ValStr: "9"}: 0,
        },
    },
})

像其他規(guī)則一樣,熱點(diǎn)流控規(guī)則同樣支持通過(guò)動(dòng)態(tài)數(shù)據(jù)源進(jìn)行動(dòng)態(tài)配置。

Sentinel Go 提供的 RPC 框架整合模塊(如 Dubbo、gRPC)均會(huì)自動(dòng)將 RPC 調(diào)用的參數(shù)列表附帶在埋點(diǎn)中,用戶可以直接針對(duì)相應(yīng)的參數(shù)位置配置熱點(diǎn)流控規(guī)則。目前熱點(diǎn)規(guī)則僅支持基本類型和字符串類型,后續(xù)社區(qū)會(huì)進(jìn)一步進(jìn)行完善,支持更多的類型。

Sentinel Go 的熱點(diǎn)流量控制基于緩存淘汰機(jī)制+令牌桶機(jī)制實(shí)現(xiàn)。Sentinel 通過(guò)淘汰機(jī)制(如 LRU、LFU、ARC 策略等)來(lái)識(shí)別熱點(diǎn)參數(shù),通過(guò)令牌桶機(jī)制來(lái)控制每個(gè)熱點(diǎn)參數(shù)的訪問(wèn)量。目前 0.4.0 版本采用 LRU 策略統(tǒng)計(jì)熱點(diǎn)參數(shù),在后續(xù)的版本中社區(qū)會(huì)引入更多的緩存淘汰機(jī)制來(lái)適配不同的場(chǎng)景。

高可用流量防護(hù)最佳實(shí)踐

在服務(wù)提供方(Service Provider)的場(chǎng)景下,我們需要保護(hù)服務(wù)提供方不被流量洪峰打垮。我們通常根據(jù)服務(wù)提供方的服務(wù)能力進(jìn)行流量控制,或針對(duì)特定的服務(wù)調(diào)用方進(jìn)行限制。為了保護(hù)服務(wù)提供方不被激增的流量拖垮影響穩(wěn)定性,我們可以結(jié)合前期的容量評(píng)估,通過(guò) Sentinel 配置 QPS 模式的流控規(guī)則,當(dāng)每秒的請(qǐng)求量超過(guò)設(shè)定的閾值時(shí),會(huì)自動(dòng)拒絕多余的請(qǐng)求。同時(shí)可以結(jié)合熱點(diǎn)參數(shù)流控進(jìn)行細(xì)粒度的流量防護(hù)。

在服務(wù)調(diào)用端(Service Consumer)的場(chǎng)景下,我們需要保護(hù)服務(wù)調(diào)用方不被不穩(wěn)定的依賴服務(wù)拖垮。借助 Sentinel 的信號(hào)量隔離策略(并發(fā)數(shù)流控規(guī)則),限制某個(gè)服務(wù)調(diào)用的并發(fā)量,防止大量慢調(diào)用擠占正常請(qǐng)求的資源;同時(shí),借助熔斷降級(jí)規(guī)則,當(dāng)異常比率或業(yè)務(wù)慢調(diào)用比例超過(guò)某個(gè)閾值后將調(diào)用自動(dòng)熔斷,直到一段時(shí)間過(guò)后再嘗試恢復(fù)。熔斷期間我們可以提供默認(rèn)的處理邏輯(fallback),熔斷期間的調(diào)用都會(huì)返回 fallback 的結(jié)果,而不會(huì)再去嘗試本已非常不穩(wěn)定的服務(wù)。需要注意的是,即使服務(wù)調(diào)用方引入了熔斷降級(jí)機(jī)制,我們還是需要在 HTTP 或 RPC 客戶端配置請(qǐng)求超時(shí)時(shí)間,來(lái)做一個(gè)兜底的保護(hù)。

Sentinel Go 0.4.0 發(fā)布,支持熱點(diǎn)流量防護(hù)能力

在一些請(qǐng)求突刺的場(chǎng)景中,比如 MQ 客戶端消費(fèi)消息的場(chǎng)景,我們可能不希望將多余的消息直接拒絕(重投),而是讓這些過(guò)量的消息排隊(duì)逐步處理。這就是“削峰填谷”的場(chǎng)景。我們可以利用 Sentinel 流控規(guī)則中的“勻速+排隊(duì)等待”控制效果來(lái)處理這種場(chǎng)景,以固定的間隔時(shí)間讓請(qǐng)求通過(guò),超出預(yù)設(shè)量的請(qǐng)求排隊(duì)等待。這種方式適合用于請(qǐng)求以突刺狀來(lái)到,這個(gè)時(shí)候我們不希望一下子把所有的請(qǐng)求都通過(guò),這樣可能會(huì)把系統(tǒng)壓垮;同時(shí)我們也期待系統(tǒng)以穩(wěn)定的速度,逐步處理這些請(qǐng)求,以起到“削峰填谷”的效果,而不是直接拒絕所有多余的請(qǐng)求。

Sentinel Go 0.4.0 發(fā)布,支持熱點(diǎn)流量防護(hù)能力

同時(shí) Sentinel Go 還提供 全局維度的系統(tǒng)自適應(yīng)保護(hù)能力,結(jié)合系統(tǒng)的 Load、CPU 使用率以及服務(wù)的入口 QPS、響應(yīng)時(shí)間和并發(fā)量等幾個(gè)維度的監(jiān)控指標(biāo),通過(guò)自適應(yīng)的流控策略,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個(gè)平衡,讓系統(tǒng)盡可能跑在大吞吐量的同時(shí)保證系統(tǒng)整體的穩(wěn)定性。系統(tǒng)規(guī)則可以作為整個(gè)服務(wù)的一個(gè)兜底防護(hù)策略,保障服務(wù)不掛。

Sentinel Go 0.4.0 發(fā)布,支持熱點(diǎn)流量防護(hù)能力

Let’s start hacking!

Sentinel Go 版本正在快速演進(jìn)中,我們非常歡迎感興趣的開發(fā)者參與貢獻(xiàn),一起來(lái)主導(dǎo)未來(lái)版本的演進(jìn)。Sentinel Go 版本的演進(jìn)離不開社區(qū)的貢獻(xiàn)。若您有意愿參與貢獻(xiàn),歡迎聯(lián)系我們加入 Sentinel 貢獻(xiàn)小組一起成長(zhǎng)(Sentinel 開源討論釘釘群:30150716)。我們會(huì)定期給活躍貢獻(xiàn)者寄送小禮品,核心貢獻(xiàn)者可以提名為 committer,一起主導(dǎo)社區(qū)的演進(jìn)。同時(shí),也歡迎大家通過(guò) AHAS Sentinel 控制臺(tái) 來(lái)快速體驗(yàn) Sentinel 的能力。Now let’s start hacking!

分享題目:SentinelGo0.4.0發(fā)布,支持熱點(diǎn)流量防護(hù)能力-創(chuàng)新互聯(lián)
地址分享:http://muchs.cn/article16/psjgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、企業(yè)建站、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站、網(wǎng)站營(yíng)銷動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管