订单系统设计 --- 订单中心存储方案

目标

  为某垂直领域的电商平台设计一个订单中心,用户、商家和运营可以对订单中心进行不同的操作;

需求分析

订单系统设计 --- 订单中心存储方案

  • C端:访问量大,数据的实时性和一致性要求高,主要是订单列表和订单详情的查询;
  • B端:访问量适中,对数据的实时性和一致性有一定容忍度,主要是B端展示的几个维度的分页查询;
  • M端:访问量低,查询条件复杂多变,查询的数据量大,对系统可用性、数据的实时性和一致性等容忍度最高;

存储方案设计

订单系统设计 --- 订单中心存储方案

MySQL写入ES注意事项

  • 数据幂等性:相同数据插入ES时需要保持幂等性,更新或者忽略;
  • 数据一致性:数据的最终一致性要有时间上限,即最多容忍多长时间的数据不一致;
  • JSON数据同步:数据库中的JSON数据同步到ES后会变成JSON字符串,无法精确查询,只能模糊查询,影响查询性能,同步过程中需要数据清洗;

数据一致性方案

数据比对法

  启动一个任务(存量数据一次性,增量数据周期性),逐条比对,不一致时进行修复;

延时检测法

  方案思路:数据同步链路中加入延时检测(计算消息接受的时间与消息发出时间差值),当单位时间内数据延时比例超过高水位,则开启数据补偿链路,直接从数据库中获取数据写入ES;当单位时间内数据延时比例低于低水位,则关闭数据补偿链路;
订单系统设计 --- 订单中心存储方案

参考:

  1. 多key业务,数据库水平切分架构一次搞定
  2. 多对多业务,数据库水平切分架构一次搞定