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

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

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

  • CORBA 似乎有点过头了

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

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

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

【问题讨论】:

    标签: c++ ubuntu g++ debian rpc


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2012-02-03
        • 2012-02-15
        • 2011-07-09
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多