首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最高效的高性能服务器插槽/线程设计

最高效的高性能服务器插槽/线程设计
EN

Stack Overflow用户
提问于 2013-06-29 02:38:07
回答 2查看 15K关注 0票数 20

我正在构建一个性能极高的企业软件,它将每秒接收、处理和响应超过50,000个TCP请求。这将分布在许多亚马逊EC2服务器上,但我希望单个服务器能够处理尽可能多的每秒数千个请求(每秒5k)。我很可能会使用运行Amazon Linux的m1.xlarge实例。

我正在用Boost ASIO在C++中构建这个软件,并且我正在尝试找出设计套接字处理的最有效的方法。在示例(http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/examples.html)中,我倾向于模拟"HTTP Server2“,因为我们将拥有多个vCPU。

有没有人能描述一下每个HTTP服务器示例的优缺点,以及如何处理如此多的连接,如果有任何其他的见解(关于Boost套接字和/或高吞吐量EC2配置),我将不胜感激。

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2013-06-29 15:51:37

一些建议:

你没有提到你的服务器要做什么。它将接受和关闭每秒50K个新请求,还是仅服务于来自已建立的TCP连接的消息(请求)。所以我的建议可能会有点泛泛。

在使用epoll作为套接字通知解决方案而不是http://www.kegel.com/c10k.html

  • Invest中,
  1. 读到了C10K的问题。
  2. 考虑使用固定数量的线程(2-8)。或者跨这些线程对套接字连接进行负载平衡,或者仅使用线程工作池来为从套接字线程解析出来的请求消息提供服务。为多个线程设计,但从只使用一个线程开始。然后解决所有性能问题。一旦单线程解决方案运行良好,性能达到顶峰,那么可以考虑增加线程数量,以便可以处理多个操作,而其他线程的blocked.
  3. Chances非常高,从而使服务器的性能问题超出套接字设计的范围。持续对valgrind等工具进行基准测试并运行,以了解代码在何处花费了大部分时间。机会很高,这是你最不希望看到的。例如,在我的服务器上,我发现大部分时间都花在为少量临时缓冲区分配和释放内存上。我绝对不会想到这一点。然后我改变了服务器的设计,预先分配内存,使用堆栈内存,等等。使得处理请求永远不需要代码来分配存储器。当我做这样的更改时,性能很容易就翻了一番。
票数 8
EN

Stack Overflow用户

发布于 2013-06-29 14:20:25

您可能希望查看非阻塞套接字,并将输入/输出/处理分散到不同的线程中。可能每千个连接创建3个新的输入/输出/处理线程?

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17371462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档