gpt4 book ai didi

c++ - 最高效的高性能服务器套接字/线程设计

转载 作者:IT老高 更新时间:2023-10-28 22:15:09 24 4
gpt4 key购买 nike

我正在构建一个性能极高的企业软件,它将每秒接收、处理和响应超过 50,000 个 TCP 请求。这将分布在许多 Amazon 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 Server 2”,因为我们将有多个 vCPU 供员工使用。

谁能真正描述每个 HTTP 服务器示例的优缺点,并处理这么多的连接,我真的很感激任何额外的见解(关于 Boost 套接字和/或高吞吐量 EC2 配置)。

非常感谢!

最佳答案

一些建议:

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

  1. 阅读 C10K 问题:http://www.kegel.com/c10k.html

  2. 投资使用 epoll 作为套接字通知解决方案,而不是 ASIO。 epoll 并不难。

  3. 考虑使用固定数量的线程 (2-8)。要么对这些线程之间的套接字连接进行负载平衡,要么只使用线程工作池来为从套接字线程解析的请求消息提供服务。为多线程设计,但从仅使用 1 个线程开始。然后解决所有性能问题。一旦您使单线程解决方案运行良好,并且性能达到峰值,然后考虑增加线程数,以便可以在其他线程被阻塞的同时处理多个操作。

  4. 您的服务器的性能问题很有可能超出了套接字设计的范围。持续进行基准测试并运行 valgrind 等工具,以了解代码大部分时间花在哪里。机会很高,这是您最不期望的地方。例如,在我的服务器上,我发现大部分时间都花在为小的临时缓冲区分配和释放内存上。我永远也猜不到。然后我更改了服务器设计以预先分配内存,使用堆栈内存等......这样处理请求就不需要代码来分配内存。当我做出改变时,性能轻松翻倍。

关于c++ - 最高效的高性能服务器套接字/线程设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17371462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com