2012-01-03 35 views
1

在設計客戶機/服務器體系結構時,將多個連接從同一進程複用到遠程服務器(即共享一個連接)vs每個線程/會話(通常在連接到memcached或數據庫服務器時完成)。每個會話連接或通過一個連接多路複用多個會話

我知道每個連接都有一些開銷(例如,如果服務器有50,000個打開的連接會佔用大量內存)這是Facebook爲memcached製作UDP補丁的一個主要原因。但我不指望在這個數字附近有任何地方。最多可能有10,000個。在建立tcp/ip連接和進行授權方面也有所節省,但現在我寧可將授權保留爲防火牆軟件,就像memcached一樣。

是否有任何理由在少於10K連接的tcp/ip客戶端/服務器應用程序中實現多路複用連接?

編輯 - 詳細

這是一個數據庫服務器/客戶端我的工作。我認爲Informix和Oracle確實允許通過一個tcp/ip連接進行會話複用。在Informix文檔,他們說,你可能會得到不帶螺紋的客戶提供性能改進(沒有提及多線程客戶,也許它不是線程安全的實現。)

+0

需要更多的細節。你是否擁有客戶端和服務器代碼(假設是)?爲什麼客戶端進程需要不止一個到服務器的連接呢?連接是短暫的還是持續很長時間?無論如何,你建造什麼樣的系統? – selbie 2012-01-03 05:20:42

+0

@selbie在 – Eloff 2012-01-03 14:21:28

+0

上面增加了更多細節呃,兩年前我就是這樣一個關於Linux內核的noob。是的,它會產生很大的差異,主要原因是因爲您可以處理在一個套接字上進行多路複用的消息,並且系統調用的數量少於數千個套接字。系統調用非常昂貴,如果他們完全打破L1緩存,每個系統調用超過30K週期。出於同樣的原因,上下文切換具有相同的成本。 – Eloff 2013-12-22 16:07:46

回答

1

它有什麼優勢的複用多個連接VS開幕每個線程/會話一個連接

是的,儘管它取決於單工的實施。您可能知道有關防火牆的麻煩FTP,SIP等,特別是在中途使用加密時。這影響了是否使用多個連接或僅連接一個連接的決定。