RPC、套接字和性能注意事项

Posted

技术标签:

【中文标题】RPC、套接字和性能注意事项【英文标题】:RPC, sockets and performance considerations 【发布时间】:2011-05-10 18:46:21 【问题描述】:

我在同一个子网中有两台机器。我想尽快在两台机器之间交换对象。它使用 g++ 并且在 Debian/Ubuntu 上。机器负载在流量和 CPU 中。

一种方法是通过套接字作为二进制数据包发送对象的压缩序列化(使用 Google 协议缓冲区对 ex 进行编码)。

CORBA 似乎有点过头了

我看了一些关于 ONC-RPC 和 Sun RPC 的文章

Boost 是否为此提供了高效的库?

我相信您还有其他想法。您将如何保证 2011 年的最佳响应时间...我可以放弃一点点响应时间来获得标准解决方案。

【问题讨论】:

【参考方案1】:

您可以将用于序列化的 Google protobuf 与 Boost.ASIO 结合起来处理实际的 I/O。这应该在性能和实施时间之间提供良好的平衡。

【讨论】:

【参考方案2】:

Zeromq 人员已经尝试使用 Linux 实时内核来保证低延迟。正如你所看到的,为了这个保证,必须牺牲大量的平均延迟。根据应用程序,这可能是必要的权衡。

http://www.zeromq.org/results:rt-tests-v031

【讨论】:

+1 还没有准备好将我的内核更改为 LinuxRT。关于平均延迟与最差延迟的有趣观点。将研究 ZeroMQ【参考方案3】:

当你说你想“尽可能快地在两台机器之间交换对象”时,听起来你感兴趣的是尽可能地限制网络带宽。如果是这种情况,您可以考虑使用FAST protocol。

首字母缩写词 FAST 的正式意思是“FIX Adapted for Streaming”,这意味着它最适合 FIX 协议,但事实并非如此。 FAST 可以用于任何协议。

FAST 编码的数据包可以非常小,一个好的实现将在编码和解码中使用有限的 CPU 资源。权衡是 FAST 协议并不是世界上最容易被人类理解的东西,而且要正确编写代码可能非常棘手。有可用的开源产品实现可能适合也可能不适合您的需求。一种这样的 C++ 实现是 QuickFAST。

【讨论】:

以上是关于RPC、套接字和性能注意事项的主要内容,如果未能解决你的问题,请参考以下文章

大型网络中的 RPC 性能

gRPC 1.34.0 发布,高性能 RPC 框架

行业资讯gRPC 1.34.0 发布,高性能 RPC 框架

java系统库性能优化注意点

快速 java/python/C++ ipc

总结常见做得不好或者需要注意的地方