订阅程序员杂志RSS CSDN首页> 程序员杂志

履单流程的弹性架构——麦包包峰值架构实践

发表于2014-11-11 11:14| 次阅读| 来源《程序员》| 0 条评论| 作者周海冰,杨鹏

摘要:履单流程也是电商系统中直接面对销售高峰带来的短时间内剧增的数据量的子系统之一,如何在流量骤增10倍甚至更多的情况下保证OMS的正常服务,是每一家电商密切关注和不断改进的重点,也是本文分享的核心经验。

OMS(订单管理系统)是电商ERP系统中的核心模块,其中的订单履行流程(履单流程)是消费者购物过程中有直接感知的最后一段,关系到用户体验,其正确性和时效性必须得到保证。同时履单流程也是电商系统中直接面对销售高峰带来的短时间内剧增的数据量的子系统之一,如何在流量骤增10倍甚至更多的情况下保证OMS的正常服务,是每一家电商密切关注和不断改进的重点。

与前端接单流程不同,履单流程无需提供秒级实时响应,但它要执行的工作不单是生成订单保存入库,而要协调ERP中诸多子系统、外部系统及人工处理,共同完成一个订单的出库发货,因此面临的问题和需要的解决方案都有所区别。

在麦包包,我们经历了一小时接单峰值从千级到万级再到十万级的高速增长,虽然OMS中有中间表、分页批处理等抗冲击设计,但在一年比一年高的流量峰值冲击下,仍不时出现阻塞甚至崩溃的迹象,让人胆战心惊。为解决这个问题,需要对整个履单流程所有环节进行分析,找出瓶颈和浪涌威胁,制定有针对性的解决方案,进行评估和测试,明确系统的峰值处理能力,保证在各种情况下的正确处理。

履单流程的流量治理同洪水治理道理相似,要找出高水位或者决堤的位置进行加固。加固的方法可以分为两个方向:

  • 疏通和拓宽河道——优化算法、合理并行;
  • 蓄水限流——异步、缓冲、限量。

本文将结合麦包包的履单流程面对流量暴增问题时,需要研究的流程节点分析、执行效率优化、入口隔离和异步化、固定流控和弹性架构等方面进行讨论。

关注点:一致性、可用性和峰值处理能力。

最低目标:流量不高于每小时10万单情况下,能够保证每个无须人工确认订单30分钟内提交拣货;流量不高于每小时100万单情况下,能保证每个订单最慢在6小时内提交拣货。

高级目标:流量高于每小时10万单时能动态提升吞吐能力,在流量不高于15万单情况下保持每个订单30分钟内提交拣货。

在讨论治理方案之前,我们需要将流程抽象和分解,进行深入分析。

流程节点分析

要保证系统在流量暴增的情况下正常提供服务,整个流程不能有任意一点产生阻塞。所谓阻塞点是直接或间接造成某个共享计算资源超负荷的点。电商OMS中,CPU和内存的密集计算一般不多,这个超负荷的计算资源多为DB Server。到底是哪一种类型的计算资源并不是最重要的,我们需要先找到引发或可能引发超负荷的原因,再找到其所在程序位置去解决。

履单流程从业务逻辑上一般分为前后衔接的多个步骤,我们将其称为处理节点,我们要做的就是分析流程中各个处理节点,特别是以往产生过阻塞的节点。分析时除了一般性的代码、数据结构的静态分析和单元测试,对产生过阻塞的节点还可以从现场日志入手去分析。例如,对于DB Server超负荷的情况,要分析阻塞现场的SQL队列,找到引起DB Server资源超载的主要几条SQL,再顺藤摸瓜找出触发这些SQL的代码位置和其所属的处理节点。

麦包包的履单主流程包括订单审核、支付确认、出库单生成、快递匹配等节点,简化的流程如图1所示。