知识卡片
消息队列同步只适合无时序要求的数据
内容
用消息队列做跨机房数据同步时,必须先确认数据是否有事务性或时序性要求。新注册的账号数据之间互不依赖,即使异地机房乱序同步也不影响正确性,适合走消息队列;但密码这类数据存在先后修改关系,如果同步顺序错乱(后改的先到),最终生效的就是错误密码,这类数据不能简单走消息队列同步。发散:技术选型不能只看”消息队列能异步解耦”这个优点,还要反过来问数据本身对顺序、事务的要求,否则解耦反而引入了正确性风险。
参考来源
- 位置:《从0开始学架构》第35章《30|异地多活设计4步走》(源文件:_epub-src/OEBPS/Text/part0034_split_003.html)
- 结论依据:原文明确"消息队列同步适合无事务性或者无时序性要求的数据。例如,用户账号,两个用户先后注册了账号A和B,如果同步时先把B同步到异地机房,再同步A到异地机房,业务上是没有问题的。而如果是用户密码,用户先改了密码为m,然后改了密码为n,同步时必须先保证同步m到异地机房,再同步n到异地机房;如果反过来,同步后用户的密码就不对了"。
- 原始内容:消息队列同步适合无事务性或者无时序性要求的数据。例如,用户账号……业务上是没有问题的。而如果是用户密码……同步时必须先保证同步m到异地机房,再同步n到异地机房;如果反过来,同步后用户的密码就不对了。