我想创建一个超快速的消息处理C ++解决方案,该解决方案将受CPU限制并基于微服务。它会处理许多足够小的请求/响应消息(每条消息32字节到1kb)。
某些服务将放置在不同的主机中。有些将位于同一主机上,但进程不同。还有一些在同一进程中,但是在不同的线程中。
当前,我正在考虑用于此类服务拓扑的通信协议。我的第一个想法是使用基于TCP的通信,该通信允许将环回用于同一主机上的IPC通信,甚至用于线程通信。好处是只有一个通信代码,可以测试服务拓扑。在某些进程中托管服务或将其移至远程主机将很容易。
但是我了解到,如果我想要一个具有最大RPS和消息传递速度的低延迟解决方案,我必须根据通信类型来拆分传输:
线程通信-使用循环缓冲区或LMAX Disruptor pattern可获得最佳结果。
IPC通信-我认为共享内存中的管道或循环缓冲区是很好的解决方案。有没有更好的IPC方法?
远程通信-异步TCP服务器/客户端用于顺序消息传递,而UDP用于多播。
我也在考虑Linux解决方案,但是拥有跨平台将是很棒的!
我相信Asio C++ Library是远程通信的一个很好的起点。
我的问题如下:
提前感谢您的回答和建议!
我刚刚在Linux(Linux ubuntu 4.4.0 x86_64 i7-6700K 4.00GHz)下发现并执行了低级IPC benchmarks。邮件大小为128字节,邮件数为1000000。我得到以下结果:
管道基准:
Message size: 128
Message count: 1000000
Total duration: 27367.454 ms
Average duration: 27.319 us
Minimum duration: 5.888 us
Maximum duration: 15763.712 us
Standard deviation: 26.664 us
Message rate: 36539 msg/s
FIFO(命名管道)基准:
Message size: 128
Message count: 1000000
Total duration: 38100.093 ms
Average duration: 38.025 us
Minimum duration: 6.656 us
Maximum duration: 27415.040 us
Standard deviation: 91.614 us
Message rate: 26246 msg/s
消息队列基准:
Message size: 128
Message count: 1000000
Total duration: 14723.159 ms
Average duration: 14.675 us
Minimum duration: 3.840 us
Maximum duration: 17437.184 us
Standard deviation: 53.615 us
Message rate: 67920 msg/s
共享内存基准测试:
Message size: 128
Message count: 1000000
Total duration: 261.650 ms
Average duration: 0.238 us
Minimum duration: 0.000 us
Maximum duration: 10092.032 us
Standard deviation: 22.095 us
Message rate: 3821893 msg/s
TCP套接字基准:
Message size: 128
Message count: 1000000
Total duration: 44477.257 ms
Average duration: 44.391 us
Minimum duration: 11.520 us
Maximum duration: 15863.296 us
Standard deviation: 44.905 us
Message rate: 22483 msg/s
Unix域套接字基准测试:
Message size: 128
Message count: 1000000
Total duration: 24579.846 ms
Average duration: 24.531 us
Minimum duration: 2.560 us
Maximum duration: 15932.928 us
Standard deviation: 37.854 us
Message rate: 40683 msg/s
ZeroMQ基准:
Message size: 128
Message count: 1000000
Total duration: 64872.327 ms
Average duration: 64.808 us
Minimum duration: 23.552 us
Maximum duration: 16443.392 us
Standard deviation: 133.483 us
Message rate: 15414 msg/s
答案 0 :(得分:1)
也许我错过了一些我应该研究的良好的低延迟IPC / RPC技术或库?
Continental发布了一个IPC库,该库专注于单个主机(使用共享内存)或不同主机之间(使用udp组播)的低延迟和高带宽数据传输。它在Windows和Linux OS上运行。在这里https://github.com/continental/ecal
答案 1 :(得分:0)
您写道:
超快速消息处理C ++解决方案
这通常意味着需要掌握一切。最终,听起来好像是一个有趣的库。
总体来说,您的问题太过广泛了-尽管如此,这是我的想法:
很难在这里给出任何建议...
比较将针对特定平台/系统。例如。 TCP可能更快或更慢,具体取决于系统。
OpenMP
和boost interprocess
。
您可能不希望研究或开始使用apache thrift
库(尽管它也是跨语言的-我相信它最初是为Facebook后端服务器开发的),您可能会做一些早期实验并考虑一些需要考虑的问题。