美团外卖持续交付的前世今生

然而,Native应用的发布依赖于应用市场的更新,周期非常长,非常不利于产品的快速迭代、快速试错。同时,作为平台方,我们需要考虑到各个业务团队的诉求,统筹考虑如何建立怎么样的模型、配套什么样的技术手段,才能实现最佳的状态,满足各业务更短周期、高质量的交付业务的诉求。本文会首先回顾美团外卖从早期的月交付,逐渐演变成双周交付,再从双周交付演变成双周版本交付配合周动态交付的过程。然后从外卖的历史实践中,浅谈一个好的持续交付需要综合考虑哪些关键因素,希望对大家有所帮助或启发。

一个需求从产生到交付再到用户的手上,要经历需求调研、需求分析、程序设计、代码开发、测试、部署上线等多个环节。在整个过程中,由于涉及到不同角色的人员,而不同角色人员的认知存在差异,不同的程序语言存在差异,不同的开发方式也存在差异。在整个交付需求的过程中,还面临着需求可能会被变更、交付周期可能会被变更等各种情况。这些情况使得需求的交付变得非常复杂、不可预期。而软件开发的首要任务就是持续、尽早地交付有价值的软件。怎么解决这一问题,是软件工程一直在研究的话题。早在20世纪50年代,软件领域就在积极地探索设计什么样的模型可以解决这些问题。常见的包括瀑布流模型、迭代模型、螺旋模型、敏捷模型等等。由于篇幅原因,本文不再做详细的介绍。

从美团外卖业务的角度,我们可以将持续交付定位为“外卖用户”和“外卖团队”之间的紧密反馈流。而外卖团队涉及到PM、UI/UE、RD和QA角色。如下图所示,产品同学从市场或用户的需求和反馈中收集到需求,转换为需求PRD文档,交由设计交互同学设计成期望用户所见的界面和行为,然后交给研发团队进行调研实现。研发团队实现后,再交给测试团队进行测试。等测试团队完成测试后,提交到应用市场,最终交付到用户手上,这个过程是本文所考虑的交付。“持续”指的是,外卖团队将外卖的业务拆分成不同维度的子业务,每个子业务持续通过这个迭代流程不断地优化各个子业务达到最优,从而使整个外卖业务达到最优。

早期外卖的交付模式为“串行交付”,一个版本完成后,开启下一个版本。整个交付过程包括需求评审、需求开发、迭代提测、一轮提测、二轮提测、三轮提测、灰度提测和全量发布8个环节:

由于美团的外卖业务是一个双平台业务,需要同时开发外卖App和美团App,在人力安排上,我们会分成两个组,App组和频道组并行开发。App组开发当前的版本业务,频道组同步上个版本的业务到当前的美团平台版本。整个版本周期耗时六周半左右,遇到节假日会顺延,全年能发版11~12个,版本交付周期如下图所示:

交付模型中关键点

单月发版优缺点

优点:

缺点:

为了满足日益增长的业务诉求,我们提出了双周发版的交付模式,从而实现业务的快速迭代。贯彻的总体原则为:评审、开发、测试完全并行,以两周为固定周期,以需求维度持续交付。

版本各个角色分工详情示意图如下所示:

双周模型中关键点:

双周迭代模式的变化也推动我们在人力分配方面的改进,人力安排演变经历了三个过程:

在双周迭代的过程中,客户端的交付是连贯的,理想状态是每个RD可以隔版进行需求开发。但是大家都知道,写完需求是不可能没有Bug的,需求的估时也不可能都是5的倍数,这样就会造成很多RD既要开发当前版本,又要解决上个版本的Bug。这间接引入了2个问题:

后来我们经过内部研究,提出了AB分组的方案,保证AB组是隔版本进行开发,当组内需求拆分有冲突时,需要在内部协调消化,避免RD出现每个版本都会参与开发的情况发生。

双周迭代的优点

双周迭代的不足

相比之前的当月发版,虽然双周迭代带来一定收益,但还是存在一些客观的问题:

外卖在历经了双周迭代后,一定程度的缩短了版本交付周期,提高了业务迭代效率,优化了人力安排,但是仍然存在一些问题。对于一些简单的需求来说,像外卖中“我的页面”模块的点击热区扩大(“我的页面”已经是RN页面),实际上开发只需要2天,却仍然要跟随版本迭代的节奏,5.5周后才能上线,需求交付周期仍需进一步缩短。另外,外卖自研动态化框架Mach在大量业务的应用落地,多种开发流程及交付需要,使得双周交付越来越难满足外卖业务版本迭代及交付的节奏。

目前外卖低PV的MRN页面数量已达:56/67,已经覆盖了外卖所有的低PV页面,除核心流量页面均为MRN页面,从页面数量维度,MRN页面占比已达83.58%。

Mach区域动态化覆盖了首页核心流量区、二级金刚页、订单页、点菜页及搜索页,目前上线的模板数已达43个。

在完成了外卖动态化能力的建设后,外卖业务逐渐演进出了两类需求:

面对上述两类需求,现有双周迭代及分组交付流程,对于部分特定需求及小需求不太友好,无法做到需求最快速上线,如上述“我的页面”点击热区扩大。

因此,我们在双周迭代的基础上,演进出了现在的双周迭代结合周迭代的交付模型,交付模型图如下:

目前,外卖的周迭代需求分为两类:

纯动态化需求由于不依赖Native发版,无需依赖Native的全回归,开发完成可随时提测,提测后功能测试完成即可上线,可以做到需求的最快速上线。敏捷迭代内容,不依赖主版本的评审,采用自主评审,自主决策跟版的策略。

而多种动态化方案的开发模式,需要统一的动态化发版及上线能力的支撑。外卖周迭代发版及上线具体可以分为两步:

具体流程如下图所示:

截止目前,外卖周迭代发版经过了15个上线窗口,共计发版50+次。

双周迭代结合周迭代的交付方式进一步缩短了版本的交付周期,从需求收集评审到需求上线对于敏捷需求可以缩短到3.5周。对于纯动态化需求可缩短到1周,最终做到了需求评审做到了需求的快速上线、快速验证、快速修复,敏捷迭代。

在施行了双周迭代结合周迭代后,大大缩短了需求的上线周期,但是同时也提升了版本流程管理的复杂度。怎么样保证版本流程的正常运作呢?外卖C端涉及开发人员分为A、B组及敏捷开发人力;同时涉及美团频道及外卖App双平台,需要考虑双平台的版本迭代周期;涉及阶段多,各阶段都需要人工操作,执行事件多,双端执行事件总计40+;涉及双版本并行开发,仓库代码管理复杂。

原有版本迭代流程,版本各阶段的所有事件都由相应负责人执行。

在版本迭代流程上会耗费了大量的人力。如何解放这部分人力,让整个版本迭代流程自动化,做到无人值守,减少人工操作的失误,是此前外卖前端技术团队面临的非常头疼的问题。

但是通过这种方式,存在一些弊端:

为了解决上述问题,我们和Tide版本管理系统(美团内部组件)共建,实现了现在的外卖C端自动化流程管理。以Gulfstream的版本排期为基准,通过Tide版本管理系统进行事件触发,通过脚本将CI、Stash仓库管理系统、HyperloopX发版打包系统、大象整合,做到代码/分支管理自动化、打包集成自动化、周知提醒自动化、版本流程可视化。

在版本开始前配置好当前版本,后续则会在版本的每个关键节点自动执行需要执行的事件。

各类事件提醒及执行通知如下:

各类提醒确认结果即时展示:

在CI建设方面,我们工作主要集中在以下5个阶段:准备阶段、PR检测、开发阶段、提测阶段和发版阶段。

下面介绍三个CI工作中,外卖场景下的特定检查:

总结

部署和发布,对于移动App来说,已经到了最后的环节。我们认为的部署行为主要指将一个还处在测试的版本提交到测试环境,然后让QA进行测试,发布行为主要指将测试完成的稳定版本提交到线上环境交付给用户。当然对于部署和发布,每个团队都可以思考自己的定义。例如我们进一步的细化部署和发布的行为,可以划分为部署测试环境、部署线上环境、部署回滚、发布灰度、发布灰度监控、发布全量、发布回滚、发布监控等等。下面主要介绍外卖业务在部署发布中,建设的业务事务流和无人灰度监控。

发布在整个交付过程中是最重要的一环,而这个环节涉及的角色主要是RD和QA。我们需要明确的定义这个环节RD和QA的事务,避免角色间沟通不畅,跨角色的任务不清的问题。外卖通过持续的优化流程,明确流程的操作行为,来监督流程的正常运行,形成当前的事务流,如下图所示:

这里需要重点讲解图中的关键点:

其中几个关键点:

首先我们认为持续交付需要遵循以下的原则:

持续自动化

在我们整个交付的过程中,有大量的工作是会重复进行的,如果我们不能将这些重复的操作逐渐变成自动化,我们就需要频繁、反复地去做一些看不到收益,但是又不得不去进行的事情。随着交付的内容变得越来越多,交付的速度要越来越快,团队的疲劳感会越来越重,最终疲于奔命。在实际的工作中,由于发布的形态流程的不标准、生成环境和数据的不一致,我们无法一次性做到所有环节自动化,但这不影响我们先站在全局去思考,去持续地拆解子问题,将子问题逐渐地变成自动化。随着整个交付过程的自动化程度不断提升,整个流程会变得简单容易,这样开发人员可以更加聚焦在完成功能本身的工作上。

前置解决

大部分人心理上对于比较麻烦、比较痛苦的事项,都倾向不做或者拖到最后去做。由于存在这样的心理,如果在交付流程中遇到问题,我们的方案很容易掉到一个陷阱中,倾向保持现状或延后再处理。但是,对于一个多人协作交付的业务来说,这是非常不可取的,越往后处理,对整个交付的影响越大,处理效率越低下。举个例子来说,一个PR可能导致一个历史功能不可用,如果我们在这个同学提这个PR的时候就拦截到,那么只会影响这个同学,也不需要回溯问题;如果延到代码集成环节,那么就需要想办法去找到是谁,然后因为什么原因提这段代码,本次集成就可能直接导致失败,影响其他正在集成的代码。如果拖到测试环境,那么就会涉及至少RD和QA等两个角色去追寻这个问题。所以在持续交付的过程中,我们尽可能尽早地将问题在刚出现时就解决掉,保障整个交付流水线的通畅。

版本化

在我们持续交付的过程中,要将每个环节尽可能的版本化。不仅仅从代码方面版本化,针对数据、配置、环境都可以进一步的版本化。版本化的好处是不言而喻的,首先在实现版本化的过程中,尽可能地将各个环节解耦开,让环节和环节之间没有强依赖。当某一个环节出现异常的时候,我们可以很快地降级到无问题的版本,从而保障整个流水线的持续运转。版本化的另一个好处,就是可回溯,当出现异常的时候,我们可以很快地对比历史版本和当前版本的差异,缩小范围,快速的定位问题。

持续反馈

持续分解改进

针对上述原则,我们可以进一步地来指导外卖持续交付中的关键过程。通过前文所讲,我们认为持续交付就是从产品同学收集到需求,提交到研发团队,最终形成稳定的产品交给用户手上的过程,针对这个过程主要细化包括:

提需求

持续交付启动的第一环对应的就是PM提需求。俗话说“万事开头难”,“提需求”看似是一件容易的事情,其实背后是一个非常复杂的问题,涉及到策略选择、动态规划、排队论等一系列的理论。往往在大部分的团队中,“提需求”被认为是最简单的事情,这使得整个交付流程后续的工作,无法高效开展。

提代码

当单个RD同学认为已经基本完成了功能开发后,就会进入到提代码的环节,也可以叫做代码集成环节。这个环节是个人行为和整体交付产生对接的环节。在这个环节我们要确保个人的行为不影响整体的流水线的进行。

部署测试

当完成代码集成后,就需要进入到测试环节了。那首先我们需要将代码部署到测试环境,因为外卖主要提供App供测试包,所以我们的部署,主要就是打出App包来,周知QA测试。目前外卖的测试,分位一轮新功能测试、二轮全回归测试、三轮主流程回归测试。新功能因为新引入,可能存在前置条件,而在本次测试的过程中,存在需要编写自动化用例和人工测试的用例。但对于老功能,我们希望未来能够尽可能地采用自动化为主的方式。

而在实践的过程中,我们发现自动化测试的一个很重要的前置条件是,数据和环境的可配置性、稳定性。试想下,数据不稳定,一会返回是空,一会返回不为空,是没办法自动化测试校验的。对于这个问题,目前我们的思路是通过建立各环节下根据标准协议定义的Mock数据,将复杂的全链条,拆分成不同节点,在通过配置去控制数据的环境。通过保障每个环节下的质量,来确保整体的质量。

线上监控

保障外卖业务正常线上运行,会需要监控多项的指标。对于如何做好线上监控,我们的思路是设立好各项基线的标准基线,通过脚本获取线上的版本,当检测到新版本,就会自动的创建当前版本的监控。当监控发现线上指标的值和设定的指标基线出现降低时,发生报警行为。而自动化监控最需要考虑的是误报率的问题。版本的发布正常通常又会分为2个阶段,灰度阶段和全量阶段。全量阶段量大,比较稳定,误报率较低;而灰度阶段,量小,不稳定,容易出现误报。而解决这个问题,最好的办法是,本次灰度对比上一次灰度的指标,而非对比上一次全量的指标,维度一样,可以有效地减少误报率。

当前,美团外卖业务仍然处于快速增长阶段,建立怎么样的流程、配套什么的技术手段,才能满足在更短的周期内,高质量地交付业务,进而满足各个业务的发展呢?毫无疑问,持续交付是解决这个问题的重要一环。但针对持续交付这个主题,美团外卖也算是刚刚起步。

未来我们的建设主要集中在2个方向,精细化运营持续集成和建设自动化测试。如上文所述,随着业务越来越复杂,涉及的角色越来越多,代码集成的管控需更加严格,而严格的代码集成管控将增加团队成员每次提代码的痛苦。如何做到差异化的检查和准入,将是未来持续集成的建设方向。

THE END
1.线上教学的优缺点及建议有哪些2线上教学缺点 1. 自主性加大,易忽视学科逻辑:学生在网络背景下学习,自主性加大,容易只关注心理顺序而忽视学科逻辑。 2. 教师不放心,干预过多:教师不习惯学生自主学习,担心学生无法抓住重点,不敢放手让学生获取知识、交流讨论、探求答案,导致过多干预。 http://m.chusan.com/zhongkao/366870.html
2.线上学习优缺点.pdf多的时间去思考学习的动机,养成自主学习的好习惯。 目前已经开展了一段时间的线上学习,从这过程中我也发现了线上学习的一 些优缺点。优点主要有三:一是反馈及时。线上教学的最大优点是反馈及时。通 过钉钉家校本布置作业,当天可以收作业,可以完成批改,可以及时反馈给学生。 https://max.book118.com/html/2024/1021/7060151101006163.shtm
3.线上教学的优缺点是什么?如今,线下教学回归正常,那么线上教学是否还有存在的必要,这要从线上教学是是否还有需求及线上教学的优缺点进行全面分析,本文将结合博思白板boardmix来为大家分析线上教学的优缺点及发展趋势。 1.线上教学的优点 线上教学有很多好处,比如学生和教师可以在舒适的家中建立联系、学生在上课时也节省了通勤时间、支持异地https://boardmix.cn/article/onlineteachinganalysis/
4.线上教学的优缺点线上教学经过不断的发展,已经成为了一种非常重要的教学模式,中小学在受疫情影响的情况下,通过线上教学来维持教学进度,企业内训为了提高员工的工作能力,也是利用网络平台进行线上培训的,今天我们来介绍一下线上教学的优缺点。 一、线上教学的优点都有哪些 1、时间安排更加灵活 线上教学主要有两种方式,一种是直播,https://www.yunduoketang.com/article/ljr1574.html
5.少儿编程的作用及优点少儿编程线上还是线下学?只需回答三个问题优点: l 学习时间和地点相对随意 l 教学针对性更好 l 学习费用免费 缺点: l 教学情况不稳定 l 对父母要求较高 适用人群:通常适合具备充足时间及精力的父母,以体验接触为主,培养编程兴趣的孩子。 代表品牌:- B线上录播课 上课模式:老师提前录制好课程内容。上课时,孩子通过看视频方式理解学习内容,完成任务操作。https://blog.csdn.net/weixin_39942474/article/details/110899077
6.线上教学平台运行总结(通用15篇)总结就是对一个时期的学习、工作或其完成情况进行一次全面系统的回顾和分析的书面材料,写总结有利于我们学习和工作能力的提高,我想我们需要写一份总结了吧。我们该怎么去写总结呢?下面是小编帮大家整理的线上教学平台运行总结(通用15篇),欢迎大家借鉴与参考,希望对大家有所帮助。 https://m.oh100.com/kaoshi/jiaoxuezongjie/646722.html
7.线上线下混合式教学模式优缺点是什么?深入分析虽然现在大多数企业都在使用线上的模式进行培训学习,不过线下也有线下的一些优势,不能完全摒弃掉线下培训这种模式,所以就有了线上线下混合式教学模式,下面将着重为各位讲解一下线上线下混合式教学模式优缺点是什么。 一、线上线下混合式教学形式优点 它会让学习者的学习自主性提高,打破学习年龄的限制。不像传统课堂https://www.edusoho.com/info/4783/show
8.DiDiFood中的智能补贴实战漫谈架构滴滴技术选择 LightGBM 的原因是我们对于这个模型的精度并没有太高的要求,相反我们希望它能够比较快速地在训练流程中对新加入特征的给出反馈。LightGBM 高效地训练速度和不需要过多特征工程的优点比较契合我们的需求。 另外,在样本构建方面, 从流程图中可以看到,在构建训练样本和离线评估测试样本时,我们剔除了那些被线上模型https://www.infoq.cn/article/mpkjAbSW9mwmy5AdArhM
9.人事工作总结(精选17篇)(三)结合我个人在总公司专员及下属公司人事负责人的角色转换,这样的管理模式从根本上说优点大于缺点,并且优点是先天的,缺点是后天,具体是 一、优点: 1、总公司能适时地推进整个人事体系的改革与创新,能不断促进下属企业前进,防止管理体制的僵化; 2、总公司能充分考虑到下属公司在专业理论上的不足,而给予大力支持,https://www.fwsir.com/Article/html/Article_20210901222837_1300925.html
10.线上英语哪家好?猿辅导作业帮学而思网校优缺点一文详解猿辅导、作业帮、学而思网校优缺点一文详解 “学习有兴趣,上学而思;养成好习惯,上学而思;找对好方法,上学而思!” “上课没听懂,假期有难题?打开作业帮,拍照搜题!” “上网课,用猿辅导;做试题,用猿题库!” 在线教育赛道这一年发展迅猛,相信大家对上述这些在线教育直播课的广告已经耳濡目染了,不仅各大综艺冠名https://weibo.com/ttarticle/p/show?id=2309404605700121690393
11.网课和线下课哪个效果好网课的优点和缺点→十大品牌网摘要:网课具有时间与地点灵活、资源丰富、成本较低且能根据个人需求进行个性化学习的优点和优势,使得学习更加便捷高效,尤其适合现代快节奏生活中的学习者。那么网课的优点和缺点是什么?网课和线下课哪个效果好?下面为大家介绍。 网课的优点和缺点 一、网课的优点 https://www.cnpp.cn/focus/3512212.html
12.在线学习和线下学习机器人课程有哪些区别和优缺点?线上学习和线下学习机器人课程在许多方面存在区别,各自也有优缺点。以下是一些关键的差异及其优缺点。 1. 时间与地点灵活性:在线学习允许学生随时随地学习,只要具备网络连接,就可以学习机器人课程。这种灵活性使得那些时间安排紧张或距离远离学习中心的学生也可以轻松参与。然而,线下学习需要参加者在特定时间到达指定地点进https://www.xdf.cn/730/202305/13200204.html
13.个人工作总结优点缺点(通用15篇)虽然是三年的函授学习,但实际上面授只有三个月左右。虽然函授老师备课认真负责,但是我们真的从老师身上学不到多少东西。大部分知识都是靠自己在教学实践中的积累和领悟。在以后的学习中,我会在这个基础上继续学习,提高自己。 个人工作总结优点缺点 篇6 时间过得真快。一眨眼就一年了。在xxx公司工程部,我也学到了https://www.yuwenmi.com/fanwen/gongzuo/502650.html
14.线上线下融合教学的优势不足与发展策略内容这种全新的学习模式不仅可以实现教师的学习目标,而且可以满足学生的学习需求,激发学生的学习兴趣,在良好的学习氛围中提高学习效果。然而,线上与线下这两种教学方式各有优点和缺点,这两种方式是不能完全替代的,有一定的互补性。笔者在分析两种教学方式优缺点的基础上,从不同的层面对深化两种教学方式的融合进行了思考。https://tpd.xhedu.sh.cn/cms/app/info/doc/index.php/92024
15.大家风“泛”论坛暨精神分裂症新视点线上学术交流会圆满收官为进一步开阔国际视野,助力精神领域医生临床及科研,由Current Opinion in Psychiatry(简称COP)中文版编译部主办的新一期“精神医学研究进展与科研学术探讨”主题线上学习交流会于9月29日圆满收官。本次会议继续邀请了国内精神医学领域知名专家,分享和解读COP期刊上的热点文章及研究方法,交流国内外热点、融通学术思想,旨在推https://www.medsci.cn/article/show_article.do?id=a0d2e41994d6
16.线上与线下教学的优势和劣势有哪些?线上教学资源丰富,可以调动孩子的积极性。缺点是,线上教学有的同学有没有认真听课,老师不会及时的发现,甚至学生到底在没在学习,他都看不出来的。可能把屏幕最小化,然后在玩游戏、听音乐。家长也不能一直在孩子旁边看着。有的还会搞些小动作,分心溜号。甚至早上也不能早起去学校上课了,有很多同学连早饭都不吃。http://studio.nxeduyun.com/index.php?r=studio/topic/show&sid=1034&id=222538
17.自我鉴定优缺点(必备七篇)自我评价优缺点4 【自我评价优点】 1.学习 喜欢学习新的知识,拥有快速学习能力每周至少读一本书籍,内容涵盖天文、地理、政治、商业等各个领域 通过自我学习,成功破解ipod touch os 系统,使之具备更多功能及显示效果,并为周围朋友同事的apple 产品提供系统破解服务。 https://www.liuxue86.com/a/5068029.html
18.传统教学与在线教学的优缺点对比!传统教学需要学校场地、设备、教师等多方面的投入,这些都需要较高的成本。对于家庭经济条件不好的学生来说,接受优质教育可能会面临经济上的压力。 三、在线教学的优点 1.灵活性高 在线教学最大的优势是灵活性。学生可以根据自己的时间安排进行学习,不受时间和地点的限制。这对于在职人员、全职父母和其他有特殊时间需求https://m.grazy.cn/article/21599.htm
19.个人优缺点自我评价(精选66篇)个人优缺点自我评价 2 在这一年多的学习和工作中收获了很多,但我知道自己还是存在很多的不足。在今后的学习生活中我会继续努力,将我的缺点改进,并且升华我的优点。再此我将自己的优缺点进行了分析如下: 优点:在学习上,严格要求自己,端正工作态度,作到了理论联理实际;从而提高了自身的一专多能的长处及思想文化素http://mip.3g.yjbys.com/ziwopingjia/1049068.html
20.深度学习中数据降维方法总结:将原高维空间中的数据点映射到低维度优点: 1. 最小误差 2. 提取了主要信息 缺点:PCA将所有的样本(特征向量集合)作为一个整体对待,去寻找一个均方误差最小意义下的最优线性映射投影,而忽略了类别属性,而它所忽略的投影方向有可能刚好包含了重要的可分性信息。 1.2 线性判别分析(LDA) 判别分析(Discriminant Analysis) 所追求的目标与PCA不同,不是希望https://imgtec.eetrend.com/blog/2021/100114204.html