商铺A、B、C的商品数据相互独立,物理上他们可能分布在不同数据库里。可能有下面几点: 1、采用消息队列,但消息队列也是按商铺分开的 2、分布式事务,必须保证购物车里的所有商品都成功扣减库存才返回成功,否则有一个失败就回滚报错或者重试(在这个场景重试不太好) 3、操作超时处理,这个批量下单操作是一个重量级操作,涉及消息队列操作、数据库操作和外部调用,所以必须设置操作超时时间以减轻系统拥堵 4、业务数据一致性:商品库存减了,那么买家的购买记录必须出现相应商品,并且用户支付的金钱必须成功进到淘宝平台(淘宝必须等买家确认收货后才会把钱从淘宝平台打到卖家账户里) 5、第三方系统调用出错和超时处理:买家确认下单,需要支付一定金钱,往往需要调用外部支付接口(比如招商银行的扣款接口),对外部系统调用可能也容易出错和超时 6、系统过载保护,网关层应该实时监控系统负载,如果负载超过设定的阀值就直接拒绝用户请求或者将用户请求放入一个等待队列
|