src*_*091 4 messaging distributed system
我想构建一个分布式系统,其中我有分布在许多服务器上的“线程”(具有自己 ID 的消息集合,而不是系统进程)。这些线程必须具有两个关键属性:
我想知道是否有任何已知的解决方案、库或算法可以帮助我实现第二个选项,因为现在我认为这是一个大问题,因为由于许多因素,不同的服务器可以在不同的时间收到相同的消息,这可能会影响它订单号。
只是为了概述我目前对一个问题的想法,说我有 3 个服务器,我的分布式线程已经包含 5 条消息,每个服务器向它自己的线程和其余两个发送一条新消息。
幼稚的订购。每个服务器都认为它自己的消息编号是 6,而来自其他服务器的其余两条消息将根据网络延迟和许多其他随机因素在到达时获得它们的编号,因此服务器之间的订单号不一致。这立即是不可接受的。
基于 UTC 时间戳的排序。当每个线程收到一条新消息时,我假设 10 条前面的消息已经具有正确的订单号,提取它们的时间戳并通过在最近 10 个时间戳的列表中找到它的时间戳位置来确定新消息的订单号。我猜这可能有效,但它确实需要可以分配某些消息的订单号,然后在某些时候进行更改,这是不可接受的。另外,当传入的消息数量很大时,我不确定这是否会正常工作。
感谢所有的帮助。