我需要实现一个序列生成服务,以便它在 n 个数据中心(虚拟机或裸机机器)中运行该服务的多个实例。以下是服务的规则,无论调用哪个服务实例(来自任何数据中心):
- 所有序列必须是唯一的
- 不能跳过序列号(即不能在 1 之前生成 2,等等)
- 如果服务实例(或整个数据中心)出现故障,其他实例必须能够处理请求并遵守前 2 条规则。
- 必须能够每天提供至少 200,000 个序列。
我考虑过很多不同的解决方案,但基本上归结为某种分布式服务锁定。 Spring Cloud 声称有某种“全局锁”,但是,我没有看到任何真实的描述或实现示例。我愿意接受任何其他解决方案(Apache Zookeeper 除外)。
我考虑过在 RabbitMQ 后面运行每个服务并让每个服务在运行时通知其他服务的想法,但这似乎不是很有效。
最佳答案
看看Consul它是一种轻量级分布式锁定机制,可用于像您描述的那样通过网络公开服务。您仍然需要实现一种增加序列的方法,但 Consul 可用于保存值并实现锁定。
关于java - 使用Spring Cloud实现一个全局锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31481017/