迁移完成状态的订单这个逻辑是不是会存在一些隐患

来源:8-6 千亿级订单搜索业务难点分析

404_

2024-04-08

图片描述

当订单完成的时候,消费者处理这个消息,这时候有两个动作:1、删除ES写集群中的这个订单。2、将完成状态的这个订单写入ES全量集群。
那这个时候有两个问题:
第一问:是应该先删除ES写集群中的这个订单,还是应该先将完成状态的这个订单写入ES全量集群。
第二问:如果先删除了ES写集群中的这个订单,但是在写入ES全量集群的时候,程序挂了,数据一致性是不是就得不到保证了?

数据一致性是不是应该使用RocketMQ这一类组件 左分布式事务。可是ES又没有事务,没有办法做到:假如订单写入ES全量集群失败,但是ES写集群已经删除了这条数据,然后也没有办法回滚。

写回答

1回答

少林码僧

2024-04-08

这种场景通常都会进行错峰迁移,在业务低峰期将当天完成状态的订单进行迁移,实时迁移,写集群抗压的效果基本就不大了。建议多看几遍视频,多留意视频中提到的一些细节点。

第二问,对于一致性的问题,业界有比较通用的解决方案,比如先消费消息进行删除或者订单同步,一旦操作失败就将这条消息写到一个专门的队列中进行重试处理。或者想要严格确保最终一致性可以给每条订单消息记录一个状态,删除操作完成修改一次状态,全量同步完成再修改一次状态。定期扫描这些长时间没完成的消息记录进行补偿处理等等

0
0

海量数据高并发场景,构建Go+ES8企业级搜索微服务

全新 ES8 配合技术组件,实现高性能搜索

267 学习 · 54 问题

查看课程