郝仁杰,高德地图无线开发专家。在7月13日落幕的2019年ArchSummit峰会上就高德地图近几年的App架构演化和实践进行了分享。
背景概述
高德是国内领先的数字地图内容、导航和位置服务解决方案提供商,端上分手机和车机两条主线。近年来,高德业务迅猛发展,人员规模急速扩张,代码量急剧膨胀,如何提高团队高效并行作战的能力,端架构在一致性和动态性方面做了很多尝试:从最初的双端原生单体架构,到地图引擎下沉C++,再到动态UI框架的建设,收到了一定的成效,但面对业务持续的高速发展,依然还有很多方面需要继续完善。
为了让业务开发有节奏的进行,项目上每年会制定一些公车计划。公车就是每个App版本,货物就是对应的产品功能,货物组装就是功能开发,公车计划即每年的发版计划,公车按照指定的时间来,把组装好的货物拉走。但由于双端代码差异较大、耦合严重、复用率低、职责不清晰、平台工具简陋等问题,公车并无法按照计划拉走货物,货物组装慢且质量差,迫使公车等待,导致整个版效周期长达3个月,崩溃率也高达万分之八,公车变成了伪公车。
执行方案
为了使伪公车变为真公车,需要解决双端差异问题、代码耦合问题和平台工具落后等问题,来提高稳定性、并行性和高效性。2018年端上通过双端融合、组件化和研发中台建设来达到目标。
双端融合采用下沉C++、上漂动态UI和双端拉齐的方式来实现。下沉C++,实现了跨端的同时提高了性能;上漂动态UI同样实现了跨平台,且降低了开发门槛,让开发更简单,效率更高,同时也为未来动态化做好铺垫;双端拉齐更多的是借鉴双端的优势做到融合,同时保留双端的差异作为扩展,做到尽量保持一致的同时,也很好地兼容了Android/iOS平台的特性。
组件化参考了手淘Atlas、BeeHive和网易LDBusMediator等成熟的容器方案并融合了高德自身的业务特点和设计思考,定义了容器、模块、微应用、微服务和页面路由。借鉴了Android组件化设计思想,让业务专注于自身需要的服务,而无需关注其它。
通过架构的分层、分组,让模块的归属、职责清晰化。
容器为模块提供了其内部的结构框架、架构分层、分组让模块找到自己的位置,二者结合实现了端上的组件化,解耦了代码、提高了功能的复用率,也为业务并行开发打下基础。
研发中台建设根据当前的公车流程,结合组件化方案进行细分,制定了新的产、研、测、项详细流程,并将流程中台化,降低了风险、提高了效率、实现了研发并行。
实践收益
双端融合,解决一致性问题,提高了App的稳定性;组件化,解决代码耦合、提高复用率;研发中台建设,将流程自动化、标准化,同时结合组件化,实现了开发阶段的并行,做到了真公车。发版周期缩短了一半。
通过针对性代码质量治理,加以平台管控,使得崩溃率从万分之八降低到十万分之八。
通过工具升级、组件化后基于产物的集成,打包时间从40mins+降低到8mins。
未来展望
2018年,高德客户端通过一系列架构治理,从伪公车变成了真公车,但这只是近几年架构演进的一个阶段性成果。未来,我们要发挥动态UI的优势,让业务真正动态化起来,从公车时代跨入到Feature Team时代,让公车变成一条条公路,每个Feature Team就是一个小汽车,按照自己的节奏装好货物后,就可以在修好的公路上自由的行驶,更好地做到灵活、并行和高效!
结语
欢迎大家扫描高德技术公众号关注更多高德技术及细节,也欢迎大家加入高德,与我们一同探索高德地图App架构的演化之路!