云计算 频道

南志文:携程移动端架构演进与优化之路

  【IT168 技术专稿】2016年10月27日-29日,2016中国系统架构师大会(SACC 2016)在北京万达索菲特大饭店举行。作为中国规模最大的架构师豪门盛会,本届大会以“架构创新之路”为主题,站在创新的风口上,与大家共同打造一场通过架构创新及各种IT新技术来带动企业转型增效,助力架构师们腾飞的技术盛会。

  虽然是大会的最后一天,但是参会者的热度丝毫不减,因为精彩在继续。在分会场16中,携程网移动端研发经理南志文为大家带来了《携程移动端架构演进与优化之路》的主题演讲,激情演说爆燃全场。

  据悉从2013年开始,携程先后进行了不同路径的多样性架构探索,目前来看,携程移动端APP的用户已经从当时的百万级别累计增加到了现如今的8亿,活跃用户数量也已经超过了3亿,这是非常值得称赞的数字。那么在这一过程中,移动端服务端架构的演进发生过怎样的变化?过程中遭遇了哪些坑?携程又是如何解决的?南志文一一为你讲述。

  携程移动端服务端架构演进

  据南志文介绍携程移动端服务端架构演进主要包括三阶段,即移动端服务端架构V1.x、V2.x和V3.x。

  移动端服务端架构V1.x是一个典型的All-in-one体系架构,APP是直接通过服务接口REST API进行网络请求服务的,PC接口和移动接口是没有进行区分的,当时比较严重的问题是业务是强耦合在一起的,而且服务接口是没有隔离、限流、监控、熔断等机制的,重复造轮子,缺少埋点,预警也十分困难,总之并不理想。

南志文:携程移动端架构演进与优化之路

  基于此移动端服务端架构V2.x架构诞生。2.0是基于SOA 和GateWay分层分割的体系架构。

南志文:携程移动端架构演进与优化之路

  底层是SOA接口,上层是服务层,接着是API GateWay,最外层是应用层APP。2.0架构的典型特点首先就是业务解耦,并且可以通过Gateway直接进行隔离、限流、熔断、监控;为了优化服务端接口的性能,还使用了CDN动静分离,Redis缓存技术等,此外在移动端还采用了MobileDB解藕。总体来看,2.0架构能够满足随着业务发展的一些需要。

  移动端服务端架构V3.x架构,南志文向大家介绍了未来将要探索的架构——CQRS架构,它涉及到了DDD 和 ES架构的思想,据悉CQRS架构典型的功能是查询和写是分离的,这种架构对微服务架构也是很有帮助的。

南志文:携程移动端架构演进与优化之路

  “经过了3.0的演进,我们实现了PC端和移动端以及各BU之间彻底解藕,PC、H5、客户端可以做到独立发布和部署、并且实现了基于SOA、API Gateway架构、服务接口可以做到自动降级、限流、熔断、监控等等。”南志文总结道。

  携程移动端APP架构演进

  携程移动端APP架构演进也是经历了三个阶段:移动端APP架构V1.x、V2.x、V3.x。

   移动端APP架构V1.x1.0架构是一个典型的MVC架构,移动APP经历了从无到有的阶段,为了快速上线抢占市场,其移动APP开发的MVC架构成了“短平快”思路的首选。 但这种架构有一种典型的缺点:由于其超高耦合性,Control 层越来越臃肿。

南志文:携程移动端架构演进与优化之路

  移动端APP架构V2.x:随着业务的发展,业务量在不断的增大,代码也越来越复杂,在安卓平台上出现了一个系统问题——安卓2.3用户无法安卓使用携程,因此我们在原来的传统架构上又做了重新调整和优化,提出了移动端架构V2.0,2.0架构解决了Android 2.3用户不能安装的问题。

南志文:携程移动端架构演进与优化之路

  南志文向大家介绍了整个架构的情况,他告诉我们,首先进行的是纵向和横向的分离,进行业务的解耦,其重要思想就是实行轻重分离,并且在代码模块的组织架构上进行重要调整,保证主要的App功能快速迭代和性能稳定,将附属的使用频率不高的新功能,使用H5容器进行动态加载,所以在V2.0的架构上,携程App就是个典型的Hybrid App,可以看到刚开始就核心模块酒店和机票采用Native 进行开发,其他模块基本是采用H5去实现的。V2.0架构解耦之后,不同BU工程的依赖是解除了,良好的解决了以前各个不同BU相互依赖的问题,同时也可以支持多个团队进行并行开发。但是这个阶段的阶段架构存在以下两个明显严重的问题:完全源码依赖、全量编译速度慢。

  移动端APP架构V3.x:基于上述缺点,大神们在V2.0的架构基础上又进行了优化,提出了V3.0的架构。V3.0架构是在V2.0的工程解耦升级的基础上完成的,是基于Bundle的动态加载插件化架构。Android和IOS都支持子工程依赖管理的这种结构,3.0的最大特点是所有组件一切皆Bundle,支持可扩展性,可伸缩性,动态部署等,可以按需加载,启动速度也大幅提升。

南志文:携程移动端架构演进与优化之路

  V3.0在V2.0解耦的基础上,实现了动态加载插件化框架,并且在此基础上增加了动态热补丁功能,通过携程内部的Hotfix发布平台,实现了携程客户端补丁版本更新直接覆盖,用户无需安装新版本就可以将严重的Bug修复掉。

  “架构1.x 解决了业务快速迭代上线;架构2.x进行了业务解藕,从单个到多个工程结构,满足组织架构的调整, 同时解决了 Android Dex方法数超标的问题;而架构3.x ,解决了Android实现插件化的问题,实现了动态加载Hotfix以及多个Bundle 独立部署打包,支持静态库依赖等。”南志文对于携程移动端APP的架构演进做了上述总结。

  “APP架构的技术优化没有尽头,我们会继续以开发效率、性能、质量、新技术几个纬度不断推进,希望未来可以有更多内容分享给业内同行。”南志文最后表示。主题分享结束后,现场嘉宾们热烈提问,反应干货满满提出了很多有效的实践经验,南志文依次对同学们的热心问题耐心解答,并为嘉宾给出了很多优秀的建议。

南志文:携程移动端架构演进与优化之路

  ▲更多信息尽在IT168现场报道专题

  http://www.it168.com/redian/sacc2016/


4
相关文章