宗心:淘宝无线事业部资深开发工程师,手机淘宝iOS架构组开发工程师,2012年底参与开发手机淘宝iOS3.0版本,经历大小几十个版本的变迁,针对手机淘宝总体设计架构,hybrid框架解决方案,插件化解决方案以及手机淘宝核心业务组件均有参与和贡献。(阿里巴巴无线事业部:负责手机淘宝并为阿里巴巴各条无线产品线提供基础技术和设施)。

2014年手机淘宝经历了自诞生以来最大规模的一次重构。经历了去年业务的爆炸性增长,以及性能稳定性等多方面挑战后,手机淘宝在开发模式,客户端架构上面都必须做到轻量,透明,延展,敏捷。本内容会重点介绍手机淘宝iOS基础架构的第三代架构如何演进落地,实现多条业务线间独立并行、研发效率提升的目标,以及如何应对未来可能变化。以下是关于手机淘宝客户端架构探索实践的精彩内容:

图1

如图1所示,手机淘宝从1.0用单工程编写开始,东西非常简陋;到2.0为索引许多三方库的庞大的单工程;再到3.0打破了单工程开发模式实现业务复用,包括承载充值,聚划算,航旅等业务,由于业务越来越多,我们想到了插件化的方案,就是制定一套业务的规则和标准,让这些插件按照我们的标准,我们提供的库进行开发。

我们遇到了产品和技术上的挑战和开发的痛点,协同方式上的迭代依赖和分支管理困难,合并依赖关系过于复杂!调试自测效率低——模块依赖下的不稳定因素,业务多,回归成本大,测试资源严重不足!其他模块引起的不稳定性因素。发布的灵活性不足——版本发布无法快速响应,线上已发布版本稳定性,灰度以及线上版本crash难以修复!由于很多APP集成到客户端,各个业务的对接有一定的难度,自己的业务开发完全不够支持这些功能,十余个团队的代码整合也不易,业务持续增长的量变将会导致质变。

2014年是手机淘宝自诞生以来最大规模的底层重构,改变了开发方式、工程结构、结构模型、打包方式。我们将围绕开发效率和性能稳定性等一系列问题探索新的路线,主要有:

工程拆分——支持多团队并行开发

多个业务团队更改一个或多个文件,交叉管理时,底层的东西不稳定就没有办法进行上层开发,所以首先进行业务解耦;其次要进行独立调试;最后修改配置完成集成。拆分的结果如图所示,实践证明,工程拆分以后,整体业务的盆跑速度有了明显提升。

工程拆分分为三个阶段:

开发阶段:提供稳定的开发环境(底层库,接口),各个业务方独立开发;

测试阶段:单独业务独立打包,针对该业务的测试回归;

集成阶段:修改podfile进行集成测试,针对整体流程做回归。

架构重构——重新梳理容器和总线规则。

架构重构需要解决几个问题:迭代开发,并行开发能力差;

耦合严重,核心功能(URL导航)复杂;试错成本过高,增加减少业务带来的成本;快速迭代下的稳定性问题。架构重构的指导思想如图所示,我们制定规范,让各个业务方自己运行,依照规范直接集成进来或出去。核心的架构在容器层,初始化在容器层统一管理,总线是一个核心的解耦方案,通过图2中三种方式进行解耦。容器之上下全部为bundles,每一个业务全部做成bundle以后,当耦合度解的很好的时候,任何的bundles都可以拼成一个APP。

图2

用总线的方式解除耦合,制定标准。

URL总线(跨平台统一URL寻址方式):三平台统一URL,自动降级,中心分发(支持hook)。

服务总线 :根据服务接口提供稳定服务。

消息总线 :中心分发,按需加载。

总线也是为了分而治之的原则,各个业务方对其他业务方都是透明的,减少了以前全在一起的中心总线的复杂度问题。只需要遵守规则,不关心底层/其他业务实现。图3是一个总线图,

图3

减少新业务接入/移除成本:

标准化:统一的通信调用标准,bundle间互通的基础;无法回避的瘦身问题。

灵活性:Bundle自由组装(淘宝生活,码上淘),中间件基础库自由引入。

图4为一个bundlapp,将手机淘宝等的部分bundles拿出来作一个配置 ,将业务bundles,底层bundles作一个重组,组出一个app手机窗口,目的是做一个bundle的复用。

图4

及时响应线上问题图5所示

图5

配套工具——使用有力工具增加开发效率。

工程拆分遇到的问题:频繁的更换spec;源码引入造成的pod update缓慢等原因;开发阶段集成阶段等问题。

工具解决:摩天轮自动打包平台(自动生成spec,framework引入);开发-集成-灰度,多阶段管理。

其他工具解决的问题:核心链路性能监控平台;Crash分析平台。

6月初上线以来,重构结果为:集成 Bundle:30+;改造为服务:10+(登录、缓存、搜索组件);Hot Patch 修复线上严重故障 10+ 起;Patch 最大6KB,大部分不到1KB(iOS)。最大的阵痛是底层依赖迁移引起的编译失败,主要是由于底层库的pod依赖规则不同步造成问题。

 关于重构之后的未来探讨如图6所示

图6

PPT下载地址:http://club.alibabatech.org/resource_detail.htm?topicId=153

手机淘宝客户端架构探索实践相关推荐

  1. Qcon演讲实录|手机淘宝客户端的攻防演练实践

    混沌工程是一个业界比较流行的防范系统性风险的方法论, 其核心思想是通过不断地失败来避免失败,以主动制造故障的方法来宏观地验证业务的容灾和恢复能力.这一概念在服务端存在大量的实践和落地, 在客户端还是属 ...

  2. 重新定义“人货场”:淘宝情景计算探索实践

    过去二十年,由于互联网的发展,零售由线下往线上迁移.近些年,伴随着智能手机的普及,越来越多的线上零售在移动终端上完成. 随着这些移动设备计算力和存储力的日益强大,智能手机也正在成为强大的计算平台,为复 ...

  3. 模仿手机淘宝客户端新增地址中的地区选择

    最近在做一个地区选择的项目,找了很多都不是很理想,昨天发现淘宝手机客户端新增地址地区选择很不错,我就简单的模仿了一下,效果自己可以下载个看看,好了不多说了,下面说代码,这里面用到的关键就是startA ...

  4. 手机淘宝的客户端架构探索之路

    本文转自:http://blog.csdn.net/licaomengrice/article/details/49253255 主讲人:冯森林(无锋/ Oasis Feng) 产品挑战 淘宝手机客户 ...

  5. 手机淘宝构架演化实践及优化,天猫,淘宝服务

    > 天猫App 安全模式:天猫App启动保护实践- https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=2247488429&am ...

  6. 明星讲师心石闪耀ArchSummit大会 | 手机淘宝构架演化实践

    该文章来自阿里巴巴技术协会(ATA)精选集 2014年12月19日~20日,ArchSummit北京2014大会上"移动互联网,随时随地"专题火爆非凡.阿里无线事业部技术负责人庄卓 ...

  7. 手机淘宝构架演化实践

    文章转载自 infoq 从2009年开始,DAU从100万增长到超过1亿,面临的问题.包括研发支撑所需要解决的事情各不相同.在用户量和业务复杂度的线性递增下,架构也进行了相应的演进.如下图所示,具体可 ...

  8. 手机淘宝的高质量持续交付探索

    转自: 前言 随着移动互联网的迅速普及,手机淘宝业务在迅速的成长,目前已经发展成为拥有40多个bundle(业务模块)的超大APP产品,在这后面有着数百名的研发人员的努力工作.业务的成长和人员的倍增给 ...

  9. 冯森林:手机淘宝中的那些Web技术

    2019独角兽企业重金招聘Python工程师标准>>> Native APP与Web APP的技术融合已经逐渐成为一种趋势,使用标准的Web技术来开发应用中的某些功能,不仅可以降低开 ...

最新文章

  1. php 不可以连接远程mysql数据库
  2. 本来调试无误的程序在真机运行时报标题错误解决方案
  3. jeasyui控件事件和方法的使用方法
  4. 一篇不一样的docker原理解析 提高篇
  5. VTK:网格之SplitPolyData
  6. 大型网站的负载均衡器、db proxy和db
  7. ambari集成mysql_Ambari 安装配置 MySql
  8. java zip解压_Java语言入门第一课
  9. SharePoint无代码工作流设计开发实例——交通费报销流程(二)
  10. Chapter 15 配置服务器存储和群集 第1课
  11. 通过一个模拟程序让你明白ASP.NET MVC是如何运行的
  12. C++_结构体中const使用场景_结构体_毕业设计案例_使用结构体数组_随机数种子---C++语言工作笔记027
  13. [ZJOI2010]排列计数
  14. 小明系列问题——小明序列
  15. 灰色系统理论概论(个人总结)
  16. 华为手机信息不弹屏了为什么_华为手机顶部消息弹窗怎么关闭?
  17. dtm源码编译安装-运行客户端demo
  18. 2020中国自主研发游戏海外市场销售收入保持稳定增加:今年收入同增33%
  19. 全屏滚动,微场景,H5全屏切换滚动页面制作的方法介绍
  20. 外存及虚拟存储器管理

热门文章

  1. 局域网被限速,爱快IP聚合突破限速,网管直呼内行
  2. 美团店铺评价语言处理以及分类(tfidf,SVM,决策树,随机森林,Knn,ensemble)...
  3. 茶文化网页代码(详细解释)
  4. TOP 5大数据工具,掌握1个你就是专家
  5. 醉林疯的PTA 7-2 换硬币 (20分)
  6. c语言getch 的用法,c语言getch()的用法是什么?
  7. 夯实基础,踏步云升 | 云原生 DevOps 入门必读
  8. 微信公众号聊天底部菜单动画
  9. 储物点的距离【前缀和】
  10. Grafana可视化工具-之数字映射字符串