一、订单系统用户重复点击提交订单幂等性问题
一般订单服务在提交订单之前都会有订单的确认信息,在订单确认信息页面提前生成订单id,当用户点击提交时将id传给服务端,服务端通过此订单id 校验唯一性;
二、订单ABA问题
使用version防止ABA问题出现
三、读写分离提升数据库订单读的能力
读写分离会有数据一致性问题,主库已经写入从库还未更新,例如业务层面支付成功,用户查看订单详情,此时可能是未支付状态(从库),淘宝京东支付完成后展示的是支付成功页面用户手动点击才会进入详情;业务层面解决此问题;
四、海量数据查询缓慢-分库分表
一张表达到2000w数据读数据缓慢;预估数据量进行分库分表;
分表健的选择:以订单表为例,用户可能根据订单id 查询也可能根据用户id 查询也可能根据商家id查询 采用基因法取各个id的一部分组成分片健;或者冗余存储其它相关字段;
五、归档历史数据
将历史数据存储到别的数据库或者是es等进行存储,新启一个服务,查询历史数据去历史服务查找;
六、订单支付回滚以及延时查看订单状态
订单创建调用支付宝支付以后等待用户支付,此过程中支付宝回调无法保证网络以及其它相关问题没有通知到服务;可以使用定时任务查询超超时支付的订单支付状态;为了保证及时性,可以对超时时间内等间距定时任务执行查询状态;
此过程可以使用事务消息优化,调用支付宝后发送事务消息,未提交状态;让事务消息自己进行重试检测,重试的过程中判断支付宝是否支付成功,成功提交消息,消费端根据此消息可以做其他相关业务异步处理,未成功继续提交事务消息未知状态,继续重试;(此方案可以增加一个定时任务进行兜底)