查看原文
其他

干货 | 携程MTP和MCD平台,如何支撑一年10W+次无线集成和发布

陈浩然 携程技术中心 2019-05-02
作者简介
 

陈浩然 (Harry Chen),携程无线技术高级总监,负责无线委员会和无线基础工程团队。


2017年,携程无线基础技术的研发重心有所变化,原先围绕无线技术体系维度(图1),即性能、质量、开发框架、新技术、基础设施和工具这五个方面展开的,然而随着公司无线工程规模的扩大,原有的交付方式已不能满足工程需要。

1 无线技术体系维度


我们转变思路从研发生命周期维度(图2)出发,针对开发阶段、集成/测试/发布阶段、运营阶段来开发相应的平台化技术,以支持研发生命周期中的各类需求。2017年我们重点建设的是图3所示三个平台,今天我们先简要分享其中MTP (Mobile Tech Platform)无线技术平台和MCD (Mobile Continuous Delivery)无线持续交付平台的设计思路及其成果。


图2 无线研发生命周期维度

图3 平台化建设


MTP - 无线技术平台


MTP的设计思路是由携程集团内的无线研发现状(图4)决定的。虽然目前核心无线产品是携程旅行(针对国内市场)和Trip.com(针对国际市场)两款App,但是各类垂直业务和内部服务的众多App也都在快速发展。


图4 携程App群


这些App所需的基础无线组件和服务(例如网络通讯、推送、开发框架等)需求是类似的,如果各自再独立重复开发会浪费研发资源,质量也无法保证,因此我们梳理了现有的基础技术产品,并对原本不支持多App应用的服务进行改造升级,面向集团内无线研发人员推出了MTP平台(图5)。


图5 MTP技术平台


MTP提供以下三类技术产品和服务:


  1. 基础组件和服务:包括网络通讯、App推送、IM服务、定位、VoIP、设备信息、帐号登录、灰度配置、AB Testing、用户行为采集、增量更新、Hotfix等十几类组件或服务。

  2. 开发框架:React Native框架(CRN)和Hybrid框架。

  3. 研发支撑:以MCD平台为基础的打包集成、测试、发布和运营功能,以及以APM平台为基础的端到端性能监控功能。


MTP不是简单用于展示技术产品的Portal,其核心功能在于其控制台(图6),在控制台中可以申请、配置、管理和运维各类组件和服务。


图6 MTP平台控制台


以IM服务举例(图7-图9),在控制台中具备实时查询、实时回调、状态接口、业务类型、消息类型等各种配置管理和日志查询功能,业务使用方可以方便的自助式管理,大幅降低了无线基础团队的技术支持工作量。


图7-图9 MTP控制台IM服务


目前MTP平台已经在支撑携程集团内20+的App产品研发需求,对于统一公司无线技术标准和保证研发质量具有决定性的作用。


MCD - 无线持续交付平台


MCD平台在携程的研发已有三年历史,最初从淘宝的Bundle化技术获得启发,自研实现了自己的插件化技术,并逐步演化成支撑无线集成、测试、发布和运营阶段需求的平台产品(图10),我们曾分享过相关技术细节(文章)。


图10 MCD无线持续交付平台


MCD的用户包括Dev开发、QA测试、PM产品经理和PJM项目经理,研发生命周期中每种角色所需的功能是不同的,所以不同用户的权限各不相同。MCD中定义了一些基本概念来定义交付物:


  1. Bundle:所有模块的中间二进制产物。以携程旅行App举例,目前已包含100+ Native (iOS/Android) Bundle,70+ React Native Bundle,70+Hybrid (JS) Bundle,每个Bundle的开发和构建相互独立。

  2. L版本Bundle:在开发自测阶段Dev提交代码之后在MCD平台上Build所开发的Bundle,并会自动标记为L版本(表示Latest)。Bundle间如果有依赖关系,会自动触发相级联构建。

  3. RC版本Bundle:如果L模式Bundle在测试正常后,Dev或QA可将其标记为RC版本(表示Release Candidate)(图11)。

  4. 测试包:使用所有Bundle的L版本进行构建,作为日常测试使用(图12)。

  5. 集成包:使用所有Bundle的RC版本进行构建,作为上架应用商店的候选版本用于集成测试。


图11 MCD Bundle构建

图12 MCD测试包打包


测试包和集成包都可以配置为是否需要hourly build或daily build,并且可以和MCD测试阶段的的相关功能进行联动(代码扫描、白屏检测等),从而实现持续集成。


2017全年,MCD平台完成携程旅行中各种Bundle类型总计近10万次的构建,产出iOS和Android各2.5万个测试或集成包,平均每次打包构建都在2-3分钟内完成,稳定可靠地支撑了日常无线集成和测试工作。


MCD在发布阶段提供了Hotfix、Bundle (Android)、React Native和Hybrid包的发布功能,从而支撑紧急问题的修复和业务逻辑的动态更新。不同类型的发布包使用统一的下发通道和多环境发布工单流程,支持差分、7z压缩和灰度发布功能,Dev或QA在MCD可以在发布后查看最新版本的下发情况和使用情况(图13-14),从而做到想发就发,心中有数。


图13 MCD发布

图14 MCD发布结果

  

2017全年,MCD平台完成携程旅行近300次Hotfix和Bundle发布(解决多次PR事件紧急变更)、各5000次的React Native和Hybrid发布,12小时内用户更新率可达95%以上,从发布频率上超出预期,并且无重大发布事故发生。


结束语


平台化和系统化解决问题的思路,对于无线研发生命周期的管理和产出至关重要。


从目前携程内MTP和MCD平台的使用情况看,MTP技术成果的复用降低了研发成本,MCD流程的自动化减少了沟通成本,无线相关人员日常都在使用这些平台。


未来我们会继续沿着平台化思路来演进携程无线技术和基础设施。




《携程技术2017年度合辑》来啦

携程技术人一手实践

十余热门技术领域

八场携程技术沙龙干货

戳下方图片直接下载

↓↓↓


【推荐阅读】




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存