高德地图崩溃率从万分之8降到十万分之8的

作者丨赵钰莹

嘉宾丨郝仁杰

近几年来,高德地图业务发展迅猛,团队规模迅速扩张,代码体量急剧增加,为了提高团队的高效并行作战的能力,端上做了一系列的架构升级。年通过双端融合、组件化、研发平台搭建等技术实践,使得发版效率提升50%,App崩溃率从万分之八降到十万分之八。本文整理自ArchSummit全球架构师峰会(深圳站)峰会演讲,主要分享在一系列架构升级改进中,高德地图的具体做法、经验和思考。  

大家好,我是来自高德地图的郝仁杰,本次分享的主题是“高德地图App架构演化与实践”。年,我们通过架构的演进将发版周期缩短至一半,整个App的崩溃率从万分之八降低至十万分之八。在正式开始介绍之前,我先来简单介绍下高德。

    背景介绍  

高德是国内领先的数字地图内容、导航和位置服务解决方案提供商。目前在端上,分为手机和车机两条主线。近年来,高德业务迅猛发展,人员规模迅速扩张,代码体量急剧增加,为了提高团队高效并行作战的能力,端上做了C++多端融合和动态化能力建设。

回顾近几来高德地图App架构的演进历程:年,手机端上只有几十个研发,Android和iOS端由原生单体架构实现;年,地图引擎下沉C++,实现了手机和车机的多端融合;年,端上启动了动态UI框架的开发,为未来业务的动态化铺路;年,动态UI框架建设完成,具备了运行静态页面的能力;到了年,手机端已经成长为拥有数百研发规模的团队,双端代码量也已经达到了数百万行,架构要如何继续演化来提高团队高效并行作战的能力,来支撑并赋能业务快速发展呢?

    问题现状  

为了让业务开发有节奏的进行,项目上每年会制定一些公车计划。公车就是每个App版本,版本里带的产品功能就是公车上的货物,公车计划即每年的发版计划。按照计划,公车会在指定的时间把组装好的货物拉走。

年初,由于双端代码差异较大、耦合严重、复用率低、职责不清晰、平台工具简陋等问题,公车无法按照计划将拉走货物。工具落后,货物组装慢且质量差,无法如期交货,迫使公车等待,导致整个发版周期长达3个月,崩溃率高达万分之八,公车变成了伪公车。

为了解决这些问题,使伪公车变为真公车,需要做到稳定、并行和高效。端上通过以下三种方式达到该目的,一是双端融合,如上图,蓝色部分上漂动态UI,下沉C++,以及Android、iOS双端拉齐,减少差异,提高可维护性;二是选择组件化方案,分而治之,解除耦合,提高复用率,做到并行、高效;三是搭建研发中台,工具升级,流程自动化以及风险质量管控,提升效率和稳定性。

    执行方案      双端融合  

年,我们通过地图引擎下沉C++,实现了手机、车机的多端融合,同理,可将部分功能下沉C++;通过年建成的动态UI框架,可将部分业务上漂到动态UI;对于既不能上漂也不能下沉的,通过双端拉齐做到融合。

那么,什么样的场景适合下沉到C++呢?一,需要有稳定的逻辑,不经常变化;二是不强依赖原生;三,对性能要求较高。举例来说,导航逻辑,地图从开始建立到现在已经打磨出一套非常核心稳固的逻辑,这部分逻辑可以下沉到C++。

哪些场景又适合上漂到动态UI呢?一,对性能要求不高;二,经常易变的业务代码,比如产品的UI需求;三,不强依赖于原生能力。

对于既不能下沉,也不能上漂的功能,选择双端拉齐:对性能有一定要求;强依赖原生的能力;需要支撑一些原生业务。例如,高德地图的页面框架,虽然Android和iOS端有原生的页面框架,但地图类应用和普通应用不太一样,地图类应用的主要功能都是围绕着一张地图进行,这张地图上面的元素非常丰富,数据量非常庞大,内存占用较大,如果采用原生页面框架进行开发,就意味着每切换一个页面就得创建一张新地图,这对手机端这种资源紧缺的环境来说是非常浪费的,对于低端机型来说是不可接受的。

另外,地图应用从一个页面切换到另一个页面,或者从一个场景切换到另一个场景,并不是完全不同的两张图切换,而仅仅是一张地图的不同状态转换,此时,如果额外创建一张新的地图,显然是极大的浪费,所以,对于地图类应用,我们建设了自己的页面框架:以单系统页面控制器多视图切换的方式实现。由于原来都是单体开发,Android和iOS只







































白癜风诚信医院
白癜风诚信医院



转载请注明:http://www.nydjfy.com/pxxx/11187.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了