我知道的适用技术:
如果其他人更适合我的问题,请提出建议。
对于此用例,我只有两台机器,即发送方和接收方,请注意,它们彼此相邻,固定在一起,因为它们将位于AWS的同一可用区中。可能与跨大范围互联网传递消息有关的答案不一定适用。还要注意,接收方服务器不会将它们作为任务排队,它只是通过WebSocket将选择的消息源转发给网站访问者。发送服务器会进行大量预处理并整理邮件。
解决方案需要:
吞吐量非常高。目前,发送服务器每秒处理大约10,000条消息(用Rust编写),不费吹灰之力。突发流量可能会将其增加到20,000或更多。我知道zeromq可以处理这个问题。
稳健。通讯管道每年365/24/7每天开放。在将计算机群集设置为故障转移方面,我的预算非常有限,因此我必须尽力做到两台计算机的最佳状态。
不需要消息持久性,也不必担心,接收服务器不需要存储任何东西,它只需要所有数据。发送方服务器异步将5秒钟的持久数据摘要写入数据库和缓存。
消息必须保留它们的发送顺序。
低延迟。这[,因为数据需要尽可能地实时。
我在这种问题上的经验为零,但是我有一个很好的websocket库,可以轻松使用。我排除了Apache Kafka,因为获得高吞吐量似乎很昂贵,使用dev ops(zookeeper)进行管理比较棘手,并且由于我不需要持久性并且仅是两台机器之间的通信而显得过于刻板。所以我希望有一个简单的解决方案。
cluster展示位置组提供了什么:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html编辑:您应该能够使用2台机器创建展示位置组,以支付您有限的预算。根据您的预算,使用更大的实例还将支持更高的网络吞吐量。
尽管第4点看起来像SQS FIFO将支持它,尽管事实是SQS FIFO队列每秒最多只能支持3,000条消息。像Kinesis Data Streams这样的托管流解决方案肯定会在规模上涵盖您的用例,比原始Web套接字要好得多。使用Kinesis Client Libraries,您可以编写您的使用者以从流中读取。
AWS还具有Managed Kafka服务,以排除开销和对必要组件的管理,例如Apache ZK:https://aws.amazon.com/msk/