【问题标题】:server-to-server multicast messaging with Google Cloud PubSub?使用 Google Cloud PubSub 的服务器到服务器多播消息传递?
【发布时间】:2018-03-26 01:48:39
【问题描述】:

我在 GCP 上有一个后端服务器集群,它们需要相互发送消息。所有服务器都需要接收每条消息,但我可以容忍低错误率。我可以处理在给定服务器上多次接收消息。数据包排序无关紧要。

我不需要太多的持久层。消息在发送后几秒钟内就会失效。

我连接了 Google Cloud PubSub 并很快意识到,对于给定的订阅,您可以拥有任意数量的订阅者,但只能保证其中一个订阅者会收到消息。我考虑过让所有订阅者都无法确认它,但这似乎是一种粗俗的黑客行为,可能不会很好地工作。

我的服务器集群由自动缩放器动态调整大小。它根据需要使用动态主机名和 IP 地址启动 VM 实例。没有方便的方法将动态主机映射到静态订阅,但感觉这是我唯一真正的选择:创建比我的最大服务器池大小更多的订阅,然后使用某种 paxos 系统(运行时配置、zookeeper 等)为订阅分配服务器。

我开始觉得,即使我的用例感觉非常简单(“每台服务器都可以向我组中的每台其他服务器多播一条消息”),但它可能并不适合 Cloud PubSub。

我应该使用 GCM/FCM 吗?还是其他一些技术?

【问题讨论】:

    标签: rabbitmq google-cloud-messaging message-queue multicast google-cloud-pubsub


    【解决方案1】:

    Cloud Pub/Sub 可能适合也可能不适合您,具体取决于您的服务器集群的大小。不确认消息肯定是行不通的,因为你不能确定每个实例都会收到消息;它可以一遍又一遍地重新交付给同一个实例。

    您可以使用多个订阅,并让每个实例在启动时创建一个新订阅。这仅在您不打算在集群中扩展超过 10,000 个实例时才有效,因为这是每个主题允许的最大订阅数。这里的困难在于清理那些出现故障的实例的订阅。那些彻底关闭的可能会删除他们自己的订阅,但总会有一些没有得到清理。您需要某种外部进程来确定每个订阅的实例是否仍在运行,如果没有,则删除订阅。大多数情况下,您可以使用GCE shutdown scripts 来捕捉这一点,尽管仍然存在必须手动完成删除的极端情况。

    【讨论】:

      猜你喜欢
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2019-01-21
      • 2015-10-08
      • 2017-06-10
      • 2023-03-25
      相关资源
      最近更新 更多