美团外卖订单系统
性能优化
- 系统拆分
划分为三个系统,分别为交易系统、查询系统、异步处理系统。独立拆分后,可以避免业务间的相互影响。快速支持业务迭代需求的同时,保障系统稳定性。 - 异步化
有两种方案:
- 线程或线程池:将异步操作放在单独线程中处理,避免阻塞服务线程。但是重启时,需要通过JVM优雅关闭来保证异步操作进行完成后,JVM再关闭。
- 消息异步:异步操作通过接收消息完成。
- 并行化
并行化将原本串行的工作并行执行,降低整体处理时间,比如下单后需要获取门店、菜品、用户信息,这些信息可以并行获取,节省时间。 - 缓存
一致性优化
- 幂等重试
通过重试+幂等,保证退款等操作最终一定会完成。 - 两阶段提交
通过2PC来保证多个系统的数据一致性。比如下单过程中,涉及库存、优惠资格等多个资源,下单时会首先预占资源(对应2PC的第一阶段),下单失败后会释放资源(对应2PC的回滚阶段),成功后会使用资源(对应2PC的提交阶段)。
高可用
- 依赖容灾
依赖容灾主要有如下几个思路:
- 依赖超时设置;
- 依赖灾备;
- 依赖降级;
- 限制依赖使用资源;
当前订单系统通过同时采用上述四种方法,来避免底层服务出现问题时,影响整体服务。具体实现上,我们采用Hystrix框架来完成依赖容灾功能。Hystrix框架采用上述四种方法,有效实现依赖容灾。
参考
《从订单业务模块到分布式高可用:美团外卖订单中心的演进之路》