2016-08-31 14 views
1

我已經看到了這樣的建議,在多個地方,如:什麼時候單個TCP通道未在Azure的服務總線,Redis的緩存足夠了,排隊等

多工廠:所有客戶端(發送者除到接收器)由同一個工廠共享一個TCP連接。最大消息吞吐量受可通過此TCP連接的操作數量的限制。單個工廠可以獲得的吞吐量隨着TCP往返時間和消息大小而變化很大。要獲得更高的吞吐率,您應該使用多個消息傳遞工廠。

你可以找到對Redis,RabbitMQ等的類似推薦。我的問題是,如何一個TCP通道可以用盡?我相信單個TCP通道沒有帶寬限制。

那麼,爲什麼人們建議擁有多個高通量通道?是因爲:

  1. 在情況下,客戶端應用程序發送許多小的消息到單個TCP信道,每一個操作將在TCP套接字的鎖,然後發送該消息。它可能導致鎖爭用。而如果我們使用多個tcp通道,這個爭用可以在一定程度上得到解決。

  2. 如果在tcp通道上發送大消息,可能需要一段時間才能序列化/反序列化並將其推送到通道。它可以阻止其他小消息。

這些是真正的原因(或者這些假設是錯誤的,真正的原因是什麼)?

回答

1

基本上,你是對的。 客戶端1 - > TCP/IP --->服務器(做一些處理) 現在,客戶端2想要發送請求到服務器?客戶端2需要等待客戶端1完成(我假設這裏的上下文是關於阻止I/O的)。因此,如果您有多個TPC連接,則客戶端2可以與客戶端1同時發送請求==>增加吞吐量。 但它與維護更多的活動連接成本。你應該確保你有足夠的連接來滿足你的請求,並且儘量減少「空閒」連接的數量。