我有一些 Java 进程(Socket 程序)在不同的服务器上运行,一些在同一个网络上,一些在不同的网络上。这些进程共同负责维护一个全局计数器。客户端可以连接到这些进程中的任何一个并向 或计数器值发出increase
命令。全局计数器应该是最终一致的(可能发生网络分区,我们可以从中恢复)。decrease
get
到目前为止我想到的解决方案是在每个节点上为所有节点维护一个递增和递减计数。当在节点上发出递增命令时,它会递增其递增计数的本地副本,然后广播其递增和递减计数。接收此广播的节点获取接收计数的最大值及其发送者计数的本地副本,并将结果存储为最新计数。当get
在任何节点上发出命令时,它会给出所有增量和减量之和的差值。我认为这将处理广播接收无序和其他不可靠性的情况。我不想使用任何持久层。
有没有更好的方法来实现这一点?我应该使用什么协议来广播计数?UDP上的八卦会起作用吗?任何可能有帮助的 Java 库?