Kitex 支持短連接、長連接池、連接多路復(fù)用,用戶可以根據(jù)自己的業(yè)務(wù)場景來選擇。>= v0.0.2 默認(rèn)配置了連接池,但建議用戶還是根據(jù)實際情況調(diào)整連接池的大小。
每次請求都會創(chuàng)建一次連接,性能不佳,通常不建議使用。但部分場景必須使用短連接,如上游實例數(shù)過多時,會增加下游服務(wù)的負(fù)擔(dān),請根據(jù)情況來選擇。
配置短連接:
xxxCli := xxxservice.NewClient("destServiceName", client.WithShortConnection())
Kitex >= v0.0.2 默認(rèn)配置了連接池,配置參數(shù)如下:
connpool2.IdleConfig{
MaxIdlePerAddress: 10,
MaxIdleGlobal: 100,
MaxIdleTimeout: time.Minute,
}
建議用戶根據(jù)實際情況調(diào)整連接池大小,配置方式如下:
xxxCli := xxxservice.NewClient("destServiceName", client.WithLongConnection(connpool.IdleConfig{10, 1000, time.Minute}))
其中:
MaxIdlePerAddress
?表示每個后端實例可允許的最大閑置連接數(shù)MaxIdleGlobal
?表示全局最大閑置連接數(shù)MaxIdleTimeout
?表示連接的閑置時長,超過這個時長的連接會被關(guān)閉(最小值 3s,默認(rèn)值 30s )長連接池的實現(xiàn)方案是每個 address 對應(yīng)一個連接池,這個連接池是一個由連接構(gòu)成的 ring,ring 的大小為 MaxIdlePerAddress。
當(dāng)選擇好目標(biāo)地址并需要獲取一個連接時,按以下步驟處理 :
在連接使用完畢準(zhǔn)備歸還時,按以下步驟依次處理:
下面是參數(shù)設(shè)置的一些建議:
開啟連接多路復(fù)用,Client 訪問 Server 常規(guī)只需要1個連接即可,相比連接池極限測試吞吐表現(xiàn)更好(目前的極限測試配置了2個連接),且能大大減少連接數(shù)量。
特別說明:
option: ?WithMuxTransport
?
svr := xxxservice.NewServer(handler, server.WithMuxTransport())
WithMuxConnection
?建議配置1-2 個連接
xxxCli := NewClient("destServiceName", client.WithMuxConnection(1))
連接池定義了 ?Reporter
?接口,用于連接池狀態(tài)監(jiān)控,例如長連接的復(fù)用率。
如有需求,用戶需要自行實現(xiàn)該接口,并通過 ?SetReporter
?注入。
// Reporter report status of connection pool.
type Reporter interface {
ConnSucceed(poolType ConnectionPoolType, serviceName string, addr net.Addr)
ConnFailed(poolType ConnectionPoolType, serviceName string, addr net.Addr)
ReuseSucceed(poolType ConnectionPoolType, serviceName string, addr net.Addr)
}
// SetReporter set the common reporter of connection pool, that can only be set once.
func SetReporter(r Reporter)
更多建議: