领导者选举是否用于 active/partial 微服务副本的备用用例?

Is leader election used for active/partial standby use cases for microservice replicas?

对于微服务HA,我知道有“Active/Active”配置和“Active/Standby”配置。

我想知道您是否可以在中间使用领导者选举。例如,假设有 3 个微服务,它们都分担处理总线消息并将它们存储在数据库中的负载。但是只需要其中一个来进行日常数据库清除。您可以使用领导者选举来确定应该由哪个人来执行该任务吗?

或者这总是一个糟糕的设计,您应该为此使用单独的应用程序吗?

群龙无首

在多个节点 运行 相同的分布式系统中,我们称这种环境为无领导者。顾名思义,没有领导者可以跟随。每个节点可以执行相同的一组操作。

Leader-Follower

如果有 is/are 个需要在单个节点上 运行 的特殊操作,那么有多个选项:

  • 介绍leader-follower
  • 将此操作放入单独的服务中
  • 使操作幂等(重新运行不会导致任何不需要的side-effect)
  • 等等

让我们来看看第一个选项。如何保证只有一个节点可以执行操作?

  • 使用排队系统
    • 其中每条消息都可以由单个消费者获取
  • 获取独占锁
  • 有共识协议*
    • 商定谁将成为领导者
  • 等等

*领导人选举是一种专门的共识协议

Leader 选举是一个复杂的问题,因为你必须解决很多问题,例如:

  • 如何检测领导者失败?
  • 如何保证集群中只有一个leader?
    • 如果可以有多个,那么我们称这种状态为:脑裂
  • 你如何处理网络分区?
  • 如何保证系统在一定时间内达成共识?
  • 等等

这些问题在Paxos、Raft、ZAB协议中或多或少都得到了解决

回到您的用例

我并不是说领导人选举在这里是个坏主意,但它肯定会使您的系统更加复杂。而且是 hard to implement it in a correct way.

我还想强调,LE 在那些需要协调器(如数据复制)的复杂 flow/logic 用例中大放异彩。