国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Kitex 連接類型

2022-04-26 15:09 更新

連接類型

Kitex 支持短連接、長連接池、連接多路復用,用戶可以根據(jù)自己的業(yè)務場景來選擇。>= v0.0.2 默認配置了連接池,但建議用戶還是根據(jù)實際情況調(diào)整連接池的大小。

短連接

每次請求都會創(chuàng)建一次連接,性能不佳,通常不建議使用。但部分場景必須使用短連接,如上游實例數(shù)過多時,會增加下游服務的負擔,請根據(jù)情況來選擇。

配置短連接:

xxxCli := xxxservice.NewClient("destServiceName", client.WithShortConnection())

長連接池 

Kitex >= v0.0.2 默認配置了連接池,配置參數(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 ?表示連接的閑置時長,超過這個時長的連接會被關閉(最小值 3s,默認值 30s )

實現(xiàn)

長連接池的實現(xiàn)方案是每個 address 對應一個連接池,這個連接池是一個由連接構成的 ring,ring 的大小為 MaxIdlePerAddress。

當選擇好目標地址并需要獲取一個連接時,按以下步驟處理 :

  1. 首先嘗試從這個 ring 中獲取,如果獲取失敗(沒有空閑連接),則發(fā)起新的連接建立請求,即連接數(shù)量可能會超過 MaxIdlePerAddress
  2. 如果從 ring 中獲取成功,則檢查該連接的空閑時間(自上次放入連接池后)是否超過了 MaxIdleTimeout,如果超過則關閉該連接并新建
  3. 全部成功后返回給上層使用

在連接使用完畢準備歸還時,按以下步驟依次處理:

  1. 檢查連接是否正常,如果不正常則直接關閉
  2. 查看空閑連接是否超過全局的 MaxIdleGlobal,如果超過則直接關閉
  3. 待歸還到的連接池的 ring 中是否還有空閑空間,如果有則直接放入,否則直接關閉

參數(shù)設置建議

下面是參數(shù)設置的一些建議:

  • MaxIdlePerAddress 表示池化的連接數(shù)量,最小為 1,否則長連接會退化為短連接
    • 具體的值與每個目標地址的吞吐量有關,近似的估算公式為:MaxIdlePerAddress = qps_per_dest_host*avg_response_time_sec
    • 舉例如下,假設每個請求的響應時間為 100ms,平攤到每個下游地址的請求為 100QPS,該值建議設置為10,因為每條連接每秒可以處理 10 個請求, 100QPS 則需要 10 個連接進行處理
    • 在實際場景中,也需要考慮到流量的波動。需要特別注意的是,即 MaxIdleTimeout 內(nèi)該連接沒有被使用則會被回收
    • 總而言之,該值設置過大或者過小,都會導致連接復用率低,長連接退化為短連接
  • MaxIdleGlobal 表示總的空閑連接數(shù)應大于 下游目標總數(shù)*MaxIdlePerAddress,超出部分是為了限制未能從連接池中獲取連接而主動新建連接的總數(shù)量
    • 注意:該值存在的價值不大,建議設置為一個較大的值,在后續(xù)版本中考慮廢棄該參數(shù)并提供新的接口
  • MaxIdleTimeout 表示連接空閑時間,由于 server 在 10min 內(nèi)會清理不活躍的連接,因此 client 端也需要及時清理空閑較久的連接,避免使用無效的連接,該值在下游也為 Kitex 時不可超過 10min

連接多路復用

開啟連接多路復用,Client 訪問 Server 常規(guī)只需要1個連接即可,相比連接池極限測試吞吐表現(xiàn)更好(目前的極限測試配置了2個連接),且能大大減少連接數(shù)量。

特別說明:

  1. 這里的連接多路復用是針對于 Thrift 和 Kitex Protobuf,如果配置 gRPC 協(xié)議,默認是連接多路復用。
  2. Client 開啟連接多路復用,Server 必須也開啟,否則會導致請求超時;Server 開啟連接多路復用對 Client 沒有限制,可以接受短連接、長連接池、連接多路復用的請求。

  • Server 配置

option: ?WithMuxTransport ?

svr := xxxservice.NewServer(handler, server.WithMuxTransport())

  • Client 配置 option: ?WithMuxConnection ?

建議配置1-2 個連接

xxxCli := NewClient("destServiceName", client.WithMuxConnection(1))

狀態(tài)監(jiān)控

連接池定義了 ?Reporter ?接口,用于連接池狀態(tài)監(jiān)控,例如長連接的復用率。

如有需求,用戶需要自行實現(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)


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號