taobao 客户端架构
前言:
WindVane
衔接 Android/iOS 的导航交互及动画
URL总线(对接Native UI总线)
JS Bridge:JS <-> Native(+ 性能及安全性增强)
缓存 & 预缓存(兼容Cache-Control + AppCache)
数据采集、本地/网络性能监控
安全加固、审核、隔离,人机识别
增强的网络层(SPDY、DNS旁路解析等)
核心概念: 归一、轻量、透明、延展、敏捷
1. 归一
一切皆组件:告别插件,拥抱组件(bundle)
2. 轻量
微内核:只负责最基础的管理职能(~150K)
1 启动流程
- 容器初始化
- 类加载(首次启动还需dexopt)
- 核心中间件初始化(可异步)
- 启动入口Bundle
2 组件管理:只负责『添加』、『删除』、『替换』(支持批量事务化)
- 与上层的动态部署组件配合完成组件的在线升级
3. 透明
透明的容器(Android):Bundle 即 App,容器亦 OS 生命周期管理:Bundle 开发与 App 开发的无差异化
总线
UI总线:以跨平台统一的URL作为寻址方式(Web、Android、iOS)
- item.taobao.com/… → DetailActivity / TBTradeDetailViewController
- 自动降级:没有 Bundle 承载的 URL,将自动以 Web 容器加载
- Android:去中心化 + URL Hook / iOS:中心分发(支持Hook)
服务总线:基于接口的服务调用(Android:兼容原生AIDL)
- [Android] 轻量化的服务启动(向下兼容原生的Service Binding)
- [Android] 支持跨进程、跨App的服务部署
消息总线:基于OS原生消息机制(Broadcast / NSNotification)
- [Android] 进程内使用轻量级消息通道
4. 延展
标准化(Android)
- Bundle的交付产物:AAR,构建产物:AWB(相当于APK剔除了共享依赖)
- Bundle间可跨进程,甚至跨App对接
灵活性
- Bundle的自由组装(手机淘宝、淘宝生活、码上淘)
- Bundle对容器无依赖
适应性:从微型App到巨型App,按需采用的容器能力
- 容器完全独立的三大职能:启动加载、生命周期管理、组件管理
- [Android] 三大总线均为OS能力的封装,具有极佳的互操作性
从巨型App时代的臃肿,回归田园App时代的轻盈
- 开发:像微型App一样便捷的开发调试(不依赖容器)
- 开发环境的Bundle构建速度:3~10秒
- 集成:极简的集成模型(直接集成Bundle的构建产物AWB)
- 测试:『重』bundle测试,『轻』集成测试
- 部署:自动化的 Bundle 在线部署
5. 敏捷
『Move fast and break things』
- via Hot Patch
- 线上严重问题的快速修复(小时级的响应时间)
- 可对 Android Framework 代码打补丁
- AOP 编码形式
- Before / After / Replace 某个方法
- 支撑了『Project Nish』(目前尚未公开的神秘项目)
- 暂时只支持 Dalvik,即将适配 ART 和 阿里云OS
回顾2010年-2014年
痛点:
- 协同方式
- 迭代依赖
- 分支管理
- 合并依赖关系过于复杂!
- 调试自测效率
- 模块依赖下的不稳定因素
- 业务多,回归成本大
- 测试资源严重不足!其他模块引起的不稳定性因素
- 发布的灵活性
- 版本发布无法快速响应
- 线上已发布版本稳定性
- 灰度以及线上版本crash难以修复
解决思路:围绕着开发效率和性能稳定性等一系列问题
工程拆分
- 支持多团队并行开发
- 并行开发(业务解耦)
- 独立调试(集成之前,在稳定环境下测试)
- 易于集成(修改配置完成集成)
- 支持多团队并行开发
架构重构
- 重新梳理容器和总线规则
- 迭代开发,并行开发能力差
- 耦合严重,核心功能(URL导航)复杂
- 试错成本过高,增加减少业务带来的成本
- 快速迭代下的稳定性问题
- 重新梳理容器和总线规则
配套工具
使用有力工具增加开发效率
- 工程拆分遇到的问题
- 频繁的更换spec
- 源码引入造成的pod update缓慢等原因
- 开发阶段集成阶段等问题
- 工具解决
- 摩天轮自动打包平台(自动生成spec,framework引入)
- 开发-集成-灰度,多阶段管理
- 其他工具解决的问题
- 核心链路性能监控平台
- Crash分析平台
- 工程拆分遇到的问题
分而治之 一切皆组件
未来
Bundle重组,互通有无
- 业务复用,减少人力
- 基础复用,做深做精
- 敏捷开发,快速试错
开发透明,实时发版
- 动静结合,开发透明
- 动态部署,渠道推送