繁体   English   中英

从C传递到Erlang的高性能消息

[英]High-performance message passing from C to Erlang

我有一个C服务器(一个数据馈送处理程序),它有可能在几千个长寿的Erlang进程中每秒发送数百万条微小的消息。 在一天之内,其中一些流程将收到几千条消息,而另一些则会收到数千万条消息 我的兴趣有三方面:

  1. 最小化延迟 - 缩短从C服务器发送消息到Erlang进程接收消息的时间长度。 在发送消息之前或收到消息之后发生的事情可以做很多工作,但这个问题是关于C和Erlang之间的联系。

  2. 最大化吞吐量 - 越快越好; 如果C服务器可以在所有Erlang进程中每秒发送10%以上的消息,那将是一个巨大的胜利。

  3. 为了最大限度地提高可预测性 - 如果延迟或吞吐量由于网络拥塞等原因而突然降低几个数量级,这是一个很大的失败。

如何以高性能方式将消息从C程序发送到Erlang进程? 我可以做些什么来最大限度地减少延迟,最大化吞吐量,或者使Erland和C之间的通信更加可预测? 这有很多方面。 我们可以选择Erlang程序和其他程序之间的通信协议。 我们可以使用带有“C节点”的分布式Erlang进行Erlang和C之间的通信。我们可以使用端口或链接驱动程序。

使用RabbitMQ

您可能需要一个更轻量级的解决方案,但由于已经在Erlang中编写了一个消息传递中间件组件并实现了AMQP ,因此应该很容易尝试使用RabbitMQ并查看它是如何进行的...

我建议您反转系统,将C代码作为链接驱动程序嵌入到Erlang VM中。 恕我直言,这是如何以可管理的方式实现最快的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM