程序的高可用性

今天 montor 提了一个问题,当任务分发后负责该任务的实例宕机怎么办。(我这么蠢当然不知道该怎么办)

忽然想起前段时间一直在学习 kafka, 发现这里的任务分发可以改为 producer-consumer 模式。

由 producer 向 kafka 发送要消费的消息,在这里是要比对的 key. 然后由多个消费者从 kafka 拉取 key 进行消费。这样一个实例宕机就只会影响一个 key 的消费状态,并且一个消费者宕机其负责的 partition 会自动被另一个消费者接管。

之前这里的问题在于一个实例是有状态的,并且其任务完全无法保证原子性。一个实例要完成的任务粒度很大,所以中间的状态无法保证。