2012-01-03 89 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等,特别是在中途使用加密时。这影响了是否使用多个连接或仅连接一个连接的决定。