W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
限流是一種保護 server 的措施,防止上游某個 client 流量突增導(dǎo)致 server 端過載。
目前 Kitex 支持限制最大連接數(shù)和最大 QPS,在初始化 server 的時候,增加一個 Option,舉例:
import "github.com/cloudwego/kitex/pkg/limit"
func main() {
svr := xxxservice.NewServer(handler, server.WithLimit(&limit.Option{MaxConnections: 10000, MaxQPS: 1000}))
svr.Run()
}
參數(shù)說明:
import "github.com/cloudwego/kitex/pkg/limit"
// define your limiter updater to update limit threshold
type MyLimiterUpdater struct {
updater limit.Updater
}
func (lu *MyLimiterUpdater) YourChange() {
// your logic: set new option as needed
newOpt := &limit.Option{
MaxConnections: 20000,
MaxQPS: 2000,
}
// update limit config
isUpdated := lu.updater.UpdateLimit(newOpt)
// your logic
}
func (lu *MyLimiterUpdater) UpdateControl(u limit.Updater) {
lu.updater = u
}
//--- init server ---
var lu = MyLimiterUpdater{}
svr := xxxservice.NewServer(handler, server.WithLimit(&limit.Option{MaxConnections: 10000, MaxQPS: 1000, UpdateControl: lu.UpdateControl}))
分別使用 ConcurrencyLimiter 和 RateLimiter 對最大連接數(shù)和最大 QPS 進行限流。
限流定義了 ?LimitReporter
?接口,用于限流狀態(tài)監(jiān)控,例如當前連接數(shù)過多、QPS 過大等。
如有需求,用戶需要自行實現(xiàn)該接口,并通過 ?WithLimitReporter
?注入。
// LimitReporter is the interface define to report(metric or print log) when limit happen
type LimitReporter interface {
ConnOverloadReport()
QPSOverloadReport()
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: