美团配送自成立以来,业务经历了屡次跨越式的发展。业务的飞速增加,对系统的总体架构和基础设施提出了愈来愈高的要求,同时也不断驱动着技术团队深入理解业务、准肯定位领域模型、高效支撑系统扩展。如何在业务高速增加、可用性愈来愈高的背景下实现系统架构的快速有效升级?如何保证复杂业务下的研发效率与质量?本文将为你们介绍美团配送的一些思考与实践。算法
物流行业的发展离不开商业的发展,近些年,商业的变革为物流发展创造了新的机会。电商的兴起有效带动了快递行业的飞速发展,直接造就了顺丰、四通一达这样的快递公司。而近年来O2O商业模式的兴起,尤为是外卖、生鲜等到家场景的发展促进了同城即时配送的快速发展。安全
与物流领域下的其余分支不一样,同城即时配送具备以下特色:网络
行业的流程再造通常离不开两个因素:架构
技术方面,AI与大数据的应用逐步普及,基于人工智能能够对配送难度、ETA、骑手能力精确评估。GPS的快速发展与GIS厂商能力的不断开放,使得基于LBS的应用大大下降了开发成本。基础设施方面,得益于国家的持续投入,移动网络的质量不断提高,成本逐年降低,也间接促使智能手机几乎实现了全民覆盖。框架
市场方面,因为中国人口具备超大规模性的特色,人群汇集度高,外卖等到家场景在各大城市尤为是一线城市的需求持续加强。用户对于外卖的安全、时效、配送员的服装、礼貌用语等都有更高的要求。机器学习
在这两个因素的共同做用下,促成了同城即时配送行业的发展。而对于同城即时配送业务而言,履约能力与运营效率是研发团队要重点解决的两个问题:工具
美团配送系统的本质——机器与海量骑手协做,服务于全国用户和商家的大规模协做系统。技术的挑战本质上源于业务的痛点,具体体现为线上的强履约能力要求与线下的强运营能力要求。技术上的挑战也一样来源于线上和线下两个方面:学习
美团配送系统架构的演进过程能够分为三个阶段:大数据
试错阶段,须要快速探索业务模式究竟是不是一个方向,这个阶段不要指望不少事情都想得很清楚,用户和市场会快速反馈结果。因此,对于技术团队而言,这个阶段最主要的能力是快。抢夺市场,惟快不破。优化
从系统架构角度,MVP阶段只须要作粗粒拆解,咱们按照人、财、物三大领域将系统作了初步服务划分,以保证后续的业务领域均可以从这三个主领域中分离、继承。
顺便提一下当时团队的组织形式,研发团队按项目制组织,你们共同维护一套系统。当时团队中无QA岗位,由PM、RD共同保证开发质量,一天发布二十几回是常态。
进入这个阶段,业务和产品已经获得了市场的初步验证,的确找到了正确的方向。同时,业务发展增速也对研发团队的能力提出了更高的要求,由于这个阶段会有大量紧急且重要的事情涌现,且系统可用性、扩展性方面的问题会逐步凸显,若是处理不当,就会致使系统故障频发、研发效率低下等问题,使研发疲于奔命。
这个阶段从架构层面咱们重点在思考三个方面的问题:
解决以上问题的总体思路为化繁为简(理清逻辑关系)、分而治之(专业的人作专业的事)、逐步演进(考虑ROI)。
在总体架构上,咱们将配送系统拆解为履约系统、运营系统和主数据平台。
履约系统(图右上侧)的设计上,首先按照用户侧与骑手侧作了初步划分,这样拆分兼顾了双端角色和调度流程的统一。例如:用户侧更关注发单的成功率与订单状态的一致性,骑手侧则更关注派单效果、推单成功率等,总体上解耦了发单、支付、调度等模块。
运营系统(图左上侧)方面,需求长期多而杂,架构设计上须要先想清楚配送的运营系统应该管什么、不该该管什么。在长期的项目开发中,咱们从业务战略与组织架构出发,在明确业务战略目标和阶段策略下,梳理每一个业务团队/岗位的核心职责、考核目标、组织之间的协做流程,最终整理出现阶段配送运营管理的中心为四个领域:
除了履约、运营两个系统的架构设计外,架构设计层面还有一个很是关键的问题,即履约、运营系统的边界与职责如何划分的问题。我的理解这个问题多是O2O类业务在规模化阶段最关键的架构设计问题,若是不能有效解决将为系统的可用性、扩展性埋下巨大隐患。履约、运营两个方向的业务需求和技术职责有较大差别,且多数数据的生产都在运营系统,最核心最关键的应用在履约系统。虽然各自的领域职责是清晰的,但对于具体的需求边界上不见得简单明了。对此,咱们借鉴了MDM思路,提出了主数据平台(图下侧)的概念,重点解决履约系统与运营系统的合做与边界问题。
主数据是企业信息系统中最基础的业务单位数据,对于配送而言是组织、岗位、人员、商家、用户、城市等数据。与之对应的是业务数据,例如:订单、考勤、薪资等。主数据有两个最关键的特征:
主数据管理并不是一蹴而就,是伴随业务发展逐步迭代的。早期系统较简单,上游系统直接从DB中读取数据并应用。这种方案在系统逐步复杂以后,容易出现多个团队开发互相影响,不利于系统扩展,而且在可用性上有很大风险。为此咱们专门成立的主数据的团队,独立拆分了主数据服务,并把全部对于数据的访问收回到服务上。在此基础上,通过不断的迭代和演进,最终咱们吸取了CQRS(Command Query Responsibility Segregation)和MDM(Master Data Management)的思想,将整个主数据平台逐步划分红四个部分:
业务的快速增加对系统的可用性提出愈来愈高的要求,在方法论层面,咱们按照事故发生的时间序列(事前、事中、过后)提出了四大能力建设,即:预防能力、诊断能力、解决能力、规避能力。同时,在具体工做上,咱们划分为流程和系统两个方面。
可用性建设是一个长期项目。考虑到ROI,起步阶段重点完成事前的流程建设,即上线规范等一系列线上操做流程,这个工做在早期可以规避80%的线上故障。在流程规范跑通并证明有效以后,再逐步经过系统建设提高人效。
容灾能力建设上,首先思考的问题是系统最大的风险点是什么。从管理的角度来看,职责的“灰色地带”一般是系统质量容易出现风险的地方。所以,早期最早作的容灾处理是核心依赖、第三方依赖的降级,优先保证一旦依赖的服务、中间件出现问题,系统自身具有最基本的降级能力。
第二阶段咱们提出了端到端的容灾能力。首先,咱们建设了业务大盘,定义了实时监控核心业务指标(单量、在线骑手数等),经过这些指标可以快速判断系统是否是出了问题。其次,咱们在核心指标上扩展了关键维度(城市、App版本、运营商等),以快速评估问题有多大影响。最后,咱们经过Trace系统,将服务间的调用关系与链路级成功率可视化展示,具有了快速定位问题的根因在哪的能力。
第三阶段,咱们指望将容灾预案集成到系统中,基于各种事故场景打造定制化、一体化的容灾工具,这样能够进一步缩短故障的响应、处理时间以及研发学习成本。例如,为了进一步提高配送系统的SLA,咱们在端到端的容灾能力上深度优化,重点解决了骑手弱网、无网的状况下的端到端交互问题。中国某些地区人群很是密集但移动运营商网络质量较差,会致使骑手到了这个区域后操做App延迟较大甚至没法操做,这对骑手的正常工做有很是大的影响。所以,咱们在移动网络链路层面不断增强长链接、多路互备的能力,并将网络的诊断、处理、验证工具一体化,使骑手App的端到端到达率有了进一步的提高。
对于一个规模快速增加的业务,系统的容量规划是一个长期命题。容量规划的关键点是评估与扩容。
评估方面,在业务发展早期咱们一个架构师就可以彻底掌控整个系统,采用静态评估的方式基本能够衡量系统容量。随着系统复杂度逐渐提高,咱们逐步引入了Trace、中间件容量监控等工具辅助评估容量,由架构师团队定义容量评估主框架,由各团队细化评估每一个子系统的容量。当业务已经变得很是复杂时,没有任何一我的或团队可以保证精确完成容量评估,这时咱们启动了场景压测、引流压测、全链路压测等项目,经过 流量标记 + 影子表 + 流量偏移 + 场景回放 等手段,实现了经过线上流量按比例回放压测的能力,经过系统报告精确评估容量与瓶颈点。
扩容方面,咱们分阶段依次实施了冗余备份(主从分离)、垂直拆分(拆分核心属性与非核心属性)、水平拆分(分库分表)、自动归档。
运营系统涉及一个业务运营管理的方方面面,咱们在业务领域上除了明确目标、过程、运力、资金四个领域外,打造了一套运营系统集成解决方案集合。研发经过持续投入精力在平台化服务或组件的长期建设上,使每一个垂直的运营系统扩展性获得保证,从而不断提高研发效率。以工做流场景为例,经过动态表单 + 流程平台的方式,统一各种业务流、审批流的工程实现,各种管理动做的效率与质量可量化,找到流程阻塞节点,自动化部分流程环节,经过技术手段不断下降人工成本。
业务发展不断成熟以后,业务的各种运营管理动做会趋于精细化。这个阶段,业务对于产品技术有更高要求,指望经过产品技术创新不断打造技术壁垒,保持领先优点。配送的业务特色自然对AI应用有很强的需求,大到供给调整,小到资源配置,都是AI发挥效力的主战场。对于工程层面,须要持续思考的问题是如何更好地实现AI的业务应用。为此咱们重点提高了几方面的能力:
仿真平台的核心是打造“沙箱环境”,配送的服务业属性要求用户、商家、骑手深度参与服务过程,所以算法的线上试错成本极高。对于仿真平台的建设上,咱们删减掉调度系统的细枝末节,粗粒度的构建了一套微型调度系统,并经过发单回放、用户、商家、骑手实体建模、骑手行为模拟等方法模拟线上场景。每次仿真会产出算法的KPI报告,实现算法效果的离线预估。
算法策略的效果,主要依赖于算法模型和特征数据的质量。为此咱们围绕模型和特征,打造了一站式算法数据平台,提供从数据清洗、特征提取,模型训练、线上预测到算法效果评估的全方位数据闭环解决方案,为机器学习和深度学习算法模型在配送各个业务线落地提供支撑。
LBS平台早在配送业务的起步阶段就开始实施,随着算法场景的不断发展,LBS不断深化点线面空间能力,为配送调度、时间预估、订价等业务场景提供支撑,打造了任务地图、路径规划、语音导航、热力图等产品。
美团配送系统架构的演进过程,架构师团队长期关注技术驱动业务、明确领域职责与边界等关键问题,同时架构的演进过程也是不断考虑ROI的权衡取舍过程。技术的持续发展不断提高体验、规模,下降运营成本,而架构在里面解决的问题是化繁为简,将复杂问题拆解为简单的问题并经过领域专家逐级各个击破。随着规模的持续增加,业务的持续创新会给系统架构提出愈来愈高的挑战,系统架构设计将是咱们长期研究的一个课题。
永俊,美团资深技术专家,配送业务系统团队负责人。长期从事配送系统质量保证、运营体系建设、系统架构升级等方向。
本文为美团配送技术团队的集体智慧结晶,感谢团队每一名成员的努力付出。若是你对业务分析、领域模型感兴趣,欢迎联系yinyongjun@meituan.com。