迁移完成状态的订单这个逻辑是不是会存在一些隐患
来源:8-6 千亿级订单搜索业务难点分析

404_
2024-04-08
当订单完成的时候,消费者处理这个消息,这时候有两个动作:1、删除ES写集群中的这个订单。2、将完成状态的这个订单写入ES全量集群。
那这个时候有两个问题:
第一问:是应该先删除ES写集群中的这个订单,还是应该先将完成状态的这个订单写入ES全量集群。
第二问:如果先删除了ES写集群中的这个订单,但是在写入ES全量集群的时候,程序挂了,数据一致性是不是就得不到保证了?
数据一致性是不是应该使用RocketMQ这一类组件 左分布式事务。可是ES又没有事务,没有办法做到:假如订单写入ES全量集群失败,但是ES写集群已经删除了这条数据,然后也没有办法回滚。
写回答
1回答
-
少林码僧
2024-04-08
这种场景通常都会进行错峰迁移,在业务低峰期将当天完成状态的订单进行迁移,实时迁移,写集群抗压的效果基本就不大了。建议多看几遍视频,多留意视频中提到的一些细节点。
第二问,对于一致性的问题,业界有比较通用的解决方案,比如先消费消息进行删除或者订单同步,一旦操作失败就将这条消息写到一个专门的队列中进行重试处理。或者想要严格确保最终一致性可以给每条订单消息记录一个状态,删除操作完成修改一次状态,全量同步完成再修改一次状态。定期扫描这些长时间没完成的消息记录进行补偿处理等等
00
相似问题