当前位置: 首页 > 知识库问答 >
问题:

AWS:在多个实例上运行的多个工作进程的广播通知

桑成荫
2023-03-14

我在Amazon EC2中有多个应用程序实例,每个实例都运行几个工作进程。我希望每个工作进程都订阅一些通知(例如配置更改)。这个通知基本上应该是广播消息,这样一旦发送,每个工作人员都会收到它。

我知道SQS不支持消息广播。通过查看类似的问题/线索,我看到了使用SNS而不是SQS的建议。由于以下原因,我不确定这是否适用于我:

  • 应用程序实例是自动缩放组的一部分,因此可以动态添加和删除它们。在这种情况下,一旦实例被终止,我看不到任何明确的方法来取消订阅每个worker(每个实例有多个worker),这意味着一段时间后,我将面临一堆死掉的订阅者

目前,我有一个基于第三方的解决方案——我使用的是0MQ发布/订阅服务器。但我正在寻找AWS提供的一些现成的解决方案。

谢谢Vovan

共有3个答案

羊舌旭尧
2023-03-14

我意识到这是一个古老的线程,但我想与大家分享我的经验。Kinesis的速度为每秒5次读取。因此,如果您有10个节点每秒轮询流中的事件,那么您将处于恒定的节流状态。Kinesis看起来主要用于只有几个读卡器的大规模写入,这不太适合广播到多个节点的用例。

慕容恩
2023-03-14

我想出的另一个解决方案是使用Amazon Kinesis。这意味着每个订阅者都必须维护自己的检查点,才能只接收最近的通知。

危阳
2023-03-14

想到的开箱即用的AWS解决方案是创建一个SNS主题,然后对于每个实例,当实例启动时,它将创建自己的SQS队列,并订阅SNS主题的队列,以便每个单独的队列获取发布到SNS的每个消息的广播副本。

您希望在实例终止时取消订阅并删除这些队列,这可以通过生命周期挂钩来完成。

如果不想使用服务器来管理生命周期钩子(将启动或终止事件发布到SNS或SQS)的处理,可以创建一个AWS API网关终结点来触发AWS Lambda函数,然后将API网关终结点订阅到SNS主题使用https,处理Lambda中的清理任务,不需要服务器。

这是多个服务协同工作,听起来可能有点复杂,但成本非常低廉,几乎不需要维护或注意。

 类似资料:
  • 问题内容: 我想在Centos 7上运行Redis的多个实例。有人可以指出我的正确链接或在此处发布步骤。 我在Google上搜索了该信息,但没有找到任何相关信息。 问题答案: 您可以在单台计算机上使用不同的端口运行Redis的多个实例。如果这与您有关,则可以按照以下步骤操作。 通过安装第一个Redis实例,默认情况下它会监听。 对于第二实例,创建一个新的工作目录 默认的Redis实例用作其工作目录

  • 我对亚马逊AWS服务非常陌生。我想知道是否有办法运行EC2的一个实例(比如Amazon Linux AMI ),然后将两个环境连接到这个实例。 特别是,我希望在单个EC2实例上运行PHP和Tomcat环境。 问题是,每次我在Elastic Beanstalk中创建新环境时,它似乎也会创建一个新的EC2实例。我是不是遗漏了什么? 我很感激任何关于此的提示。

  • 简单问题:我想在Amazon上运行一个autoscale组,它会启动多个实例来处理来自SQS队列的消息。但我怎么知道这些实例没有处理相同的消息呢? 我可以在处理消息时将其从队列中删除。但如果它还没有被删除,并且仍由一个实例处理,那么另一个实例可以下载相同的消息,并对其进行处理。

  • 自 1.5 后就过时了 在 Hangfire 1.5 之后,您不需要额外的配置来支持多个服务实例处理同一个后台任务,可以跳过本文了。现在使用 GUID 生成服务器标识符,因此所有实例名称都是唯一的。 可以同时在一个程序、机器或多台机器上运行多个服务器实例。每个服务实例使用分布式锁来执行协调逻辑。 在上述情况中,每个Hangfire服务器都有一个唯一的由两部分组成的供默认值标识符。最后一部分是一个程

  • 我正在考虑一个.NET对等应用程序的想法,其中一个对等方使用UDP数据包在子网上通告其存在。然后,任何侦听对等方都将从数据包中获得足够的信息,从而使用TCP建立与广告客户的直接通信通道。 广播数据包似乎需要定向到特定的端口号,并且,为了接收数据包,对等方需要绑定到ipaddress.any上的该端口。 采用这种设计,是否有可能运行绑定到同一NIC的多个对等体?我只得到一个SocketExcepti

  • 我有一个应用程序在各种OSGI捆绑包中分离,这些捆绑包在单个Apache Karaf实例上运行。但是,我想迁移到微服务框架,因为 Apache Karaf由于其依赖机制和 我希望以后能够将应用程序带到云端(AWS、GCloud等) 我做了一些研究,查看了各种框架,并得出结论,Quarkus可能是正确的选择,因为它基于容器的方法、性能和可能的云集成机会。 现在,我在某一点上苦苦挣扎,到目前为止我还没