订单系统设计 --- 订单中心存储方案
目标
为某垂直领域的电商平台设计一个订单中心,用户、商家和运营可以对订单中心进行不同的操作;
需求分析
- C端:访问量大,数据的实时性和一致性要求高,主要是订单列表和订单详情的查询;
- B端:访问量适中,对数据的实时性和一致性有一定容忍度,主要是B端展示的几个维度的分页查询;
- M端:访问量低,查询条件复杂多变,查询的数据量大,对系统可用性、数据的实时性和一致性等容忍度最高;
存储方案设计
MySQL写入ES注意事项
- 数据幂等性:相同数据插入ES时需要保持幂等性,更新或者忽略;
- 数据一致性:数据的最终一致性要有时间上限,即最多容忍多长时间的数据不一致;
- JSON数据同步:数据库中的JSON数据同步到ES后会变成JSON字符串,无法精确查询,只能模糊查询,影响查询性能,同步过程中需要数据清洗;
数据一致性方案
数据比对法
启动一个任务(存量数据一次性,增量数据周期性),逐条比对,不一致时进行修复;
延时检测法
方案思路:数据同步链路中加入延时检测(计算消息接受的时间与消息发出时间差值),当单位时间内数据延时比例超过高水位,则开启数据补偿链路,直接从数据库中获取数据写入ES;当单位时间内数据延时比例低于低水位,则关闭数据补偿链路;
参考: