概述
在分布式系统中,很多业务场景都需要考虑消息投递的时序 ,举个例子 电商中的订单状态流转、数据库的 binlog 分发等都会对业务的有序性有要求。
难点
在分布式场景下,消息的有序性是很难保证的,为什么这么说呢? 我们来拆解一下其中的点
有序性可以分为
- 业务上的有序
- 时间上的有序
- 分布式的时钟问题
在分布式环境下,消息的生产者、消费者和队列存储,可能分布在不同的机器上,不同的机器使用各自的本地时钟,由于服务器存在时钟偏斜等问题,本地时间会出现不一致,所以不能用消息发送和到达的时间戳作为时序判断标准。另一方面,分布式系统下缺乏全局时钟,这就使得绝对的时间顺序实现起来更加困难。
- 消息发送端和消费端的集群