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