【问题标题】:Simple way for message passing in distributed system分布式系统中消息传递的简单方法
【发布时间】:2015-04-30 22:48:46
【问题描述】:

我正在实现一个小型分布式系统(在 Python 中),其节点位于防火墙后面。在以下限制下,在节点之间传递消息的最简单方法是什么:

  1. 我不想在防火墙上打开任何端口或打孔
  2. 另外,我不想在我的网络之外导出/转发任何内部端口
  3. 时间延迟少于 5 分钟是可以接受的,但如果可能的话,更接近实时会更好。
  4. 1+2 → 我需要使用第三方,我的所有节点都可以访问。由此可见,我可能也想使用加密

考虑的解决方案:

  • 电子邮件 - 通过设置每个客户端使用 IMAP/SMTP 连接的单独或共享的免费电子邮件帐户(例如 Gmail)
  • Google 文档 - 使用共享的在线电子表格(例如 Google 文档)和一些 Python 库,通过轮询机制访问/更改单元格
  • XMPP 使用与第三方服务器的连接
  • IRC
  • 租用便宜的 5 美元 VPS 并设置通过 SSH 转发的零 MQ 发布订阅节点(或任何其他协议)并让所有节点连接到它

是否有其他可用的公共(免费)可访问消息队列(或可能被误用作消息队列的平台)?

我知道设置我自己的消息代理(RabbitMQ、Mosquito)等的解决方案,并以某种方式让我的节点可以访问它(ssh 转发到第三台主机等)。但我的问题主要是关于任何不需要我这样做的解决方案,即任何利用已经可用/可访问的第三方基础设施的解决方案。 (即有没有我可以使用的公共消息代理?)

【问题讨论】:

    标签: python message-queue messaging distributed distributed-system


    【解决方案1】:

    Mosquitto 怎么样:实现 MQ 遥测传输协议版本 3.1 和 3.1.1 的消息代理。 MQTT 提供了一种使用发布/订阅模型执行消息传递的轻量级方法。这使其适用于“机器对机器”消息传递。它支持加密。设置时间:大约需要 15 分钟才能启动并运行。由于它是消息代理,您可以编写自己的代码以确保您可以与 3rd 方解决方案进行通信。此外,它实现了软实时,但根据您的设置,您可以实现硬实时。在查看 Mosquitto 后,请查看 Paho,它是 Mosquito 到 Eclipse Foundation 的一个端口。

    Paho 还提供了一个 Python 客户端,它支持 Python 2.7 或 3.x 上的 MQTT v3.1 和 v3.1.1。它还提供了一些帮助函数,可以非常简单地将一次性消息发布到 MQTT 服务器。大量文档和示例可帮助您启动和运行。

    【讨论】:

    • 我最终采用了这个解决方案,并在一个廉价 VPS 上运行的 docker 容器中设置了我自己的 Mosquitto 消息代理。工作出色。在我所有的项目中使用 paho。
    【解决方案2】:

    我会推荐 RabbitMQ 或 Redis(首选 RabbitMQ,因为它是一种非常成熟的技术并且非常可靠)。如果你想要一个单跳消息系统而不是像 RabbitMQ 这样的代理消息系统,ZMQ 是一个选项,但 ZMQ 比 RabbitMQ 更难使用。取决于您希望如何利用消息传递(是任务调度,在这种情况下您可以使用 Celery,或者如果您需要稍微低级的访问,在这种情况下使用 Kombu 和 librabbitmq 传输)

    【讨论】:

      【解决方案3】:

      找到https://www.cloudamqp.com/,它提供了基于云的 RabbitMQ 安装的免费计划。我会尝试一下,看看它是否满足我的需求。

      【讨论】:

        猜你喜欢
        • 2015-01-11
        • 1970-01-01
        • 2018-05-16
        • 2023-03-27
        • 1970-01-01
        • 2021-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多