【问题标题】:Choosing a communication library for a distributed application为分布式应用程序选择通信库
【发布时间】:2012-02-01 12:56:39
【问题描述】:

我开始开发一个分布式应用程序,我们遇到了一个大难题!我们需要一个易于使用并具有以下功能的通信库:

  • 可靠的通信
  • 群组/频道
  • 单播
  • 多播
  • 自动发现
  • 安全
  • 支持多种编程语言
  • 支持多种操作系统
  • 支持地理分布是一个优势

关于这个应用程序的几句话

这个分布式项目背后的主要思想是拥有一个前端、一个后端(处理应用程序)和数百个代理,这些代理将从一些数据中心收集数据。代理和后端之间的通信应该尽可能简单,我们应该有可能推送配置或从代理中提取实时数据。代理和后端之间的传输需要最低限度的安全性。此外,我们应该有可能在后端集群中实时添加/删除新节点。如果后端集群的节点数量发生变化,代理应该重新分配它们的负载(可能这应该由后端通过过滤来完成)。通常消息(代理和后端之间)不会超过 1500 字节,但有时我们应该能够发送大数据包(必须进行良好的分片管理)。

到目前为止我们发现了什么:

  • jGroups
  • 传播
  • openpgm
  • zeromq
  • 榛树

如果您有开发集群应用的经验,请告诉我以上哪些框架适合我的项目?另外,如果您知道其他适合我的项目且未在上面列出的免费库,请告诉我!

【问题讨论】:

  • 更多详情请看我的博文randombugs.com/cluster/…,但请在此处对stackoverflow发表评论。
  • 看看 Akka akka.io,它具有您正在寻找的大部分功能。
  • Akka 没有 C++ 绑定。
  • 回到 2012 年,只有少数解决方案可供选择。现在有Kafka、RocketMQ、RabbitMQ等。

标签: tcp cluster-computing distributed-computing multicast


【解决方案1】:

我强烈推荐 ZeroMQ。还可以看看 Heartbeat,Linux-HA 中的集群消息传递层。 http://linux-ha.org/wiki/Heartbeat

【讨论】:

  • 你有使用zmq的经验吗?请解释您“强烈推荐”的原因。
  • 我针对我们正在构建的集群应用程序对其进行了评估,它看起来非常有前途:易于使用,性能出色......最后我们采用了一个使用 PostgreSQL 数据库发布消息的骇人听闻的解决方案,主要是因为我们已经知道 pg 是可以信任的,并且为了消除复杂性(它已经用于数据存储,不需要点对点通信)。使用 sql 数据库进行消息传递感觉不对,我希望我们改用 zmq。
  • 不是我所期望的,但到目前为止是最好的答案。
【解决方案2】:

这个post是我看到的关于这个话题的最新和最全面的评价。另请查看hurricane

【讨论】:

  • 对于消息队列来说非常全面,但我需要一个支持 C++/Java/Python 的通信库。直到现在只有 0mq 知道,即使不是真正的“消息队列”。
【解决方案3】:

我没有在这方面工作的直接经验,所以如果我的建议有些愚蠢,请原谅我。

我遇到了一个似乎对您有用的免费库,它由 Google 制作,名为 Protocol Buffers。它专门设计用于语言中立、平台中立的环境和通信协议的生产。

还有许多 third party RPC implementations 使用 Protocol Buffers 格式。

我希望这会有所帮助。

【讨论】:

  • 当您想编写自己的网络协议时,Protocol Buffers 非常棒,但在这种情况下并非如此。我想要一个免费的库来不编写我自己的协议:)。感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 2012-03-25
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
相关资源
最近更新 更多