消息队列的投递语义为何如此复杂:从「精确一次」的不可能到「有效一次」的工程实践
2019年,某支付平台因消息重复处理导致同一笔订单被扣款两次。工程师排查后发现,消费者在处理完消息后、发送确认前崩溃,消息队列在超时后重新投递,而业务代码没有实现幂等性。这不是个例——在分布式系统中,消息的重复投递几乎是不可避免的。 ...
2019年,某支付平台因消息重复处理导致同一笔订单被扣款两次。工程师排查后发现,消费者在处理完消息后、发送确认前崩溃,消息队列在超时后重新投递,而业务代码没有实现幂等性。这不是个例——在分布式系统中,消息的重复投递几乎是不可避免的。 ...
1985年,三位研究者Fischer、Lynch和Paterson发表了一篇论文,证明了一个令人沮丧的结论:在异步分布式系统中,即使只有一个进程可能崩溃,也不存在确定性的共识算法。这个被称为FLP不可能性定理的结果,并没有让分布式系统的发展停滞——相反,它催生了一系列优雅的工程解决方案。 ...