【问题标题】:Connection per session or multiplexing multiple sessions through one connection每个会话连接或通过一个连接多路复用多个会话
【发布时间】:2012-01-03 04:08:19
【问题描述】:

在设计客户端/服务器架构时,多路复用从同一进程到远程服务器的多个连接(即共享一个连接)与在客户端中为每个线程/会话打开一个连接(通常在连接到 memcached 或数据库服务器。)

我知道每个连接都会产生一些开销(例如,如果服务器有 50,000 个打开的连接会占用大量 RAM),这是 facebook 为 memcached 制作 UDP 补丁的主要原因之一。但我不希望有任何接近这个数字的地方。最多可能10,000个。建立 tcp/ip 连接和进行授权也可以节省很多钱,但现在我宁愿像 memcached 那样将授权留给防火墙软件。

是否有任何理由在连接数少于 10K 的 tcp/ip 客户端/服务器应用程序中实现多路连接?

编辑 - 详细信息

这是针对我正在处理的数据库服务器/客户端的。我认为 Informix 和 Oracle 实际上允许通过一个 tcp/ip 连接进行会话多路复用。在 Informix 文档中,他们说您可能会获得非线程客户端的性能改进(没有提到多线程客户端,也许它不是线程安全的实现。)

【问题讨论】:

  • 需要更多细节。您是否同时拥有客户端和服务器代码(大概是)?为什么客户端进程需要多个与服务器的连接?连接是短暂的还是会持续很长时间?你到底在构建什么样的系统?
  • @selbie 在上面添加了更多详细信息
  • 嘿,两年前我对 Linux 内核还是个菜鸟。是的,它有很大的不同,主要原因是因为您可以处理在一个套接字上多路复用的消息,而系统调用比跨数千个套接字少得多。系统调用非常昂贵,如果它们完全破坏 L1 缓存,则每个调用超过 30K 周期。出于相同的原因,上下文切换具有相同的成本。

标签: c++ c sockets


【解决方案1】:

多路复用多个连接与每个线程/会话打开一个连接相比有什么优势

是的,尽管这取决于单纯形的实现。您可能知道防火墙的麻烦,例如FTP、SIP 等,尤其是在中途使用加密时。这会影响决定是使用多个连接还是只使用一个连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多