Transcript 稳定性

个人介绍
 真名:王金生
 花名:文壁
 微博:@文壁
 微信:wenbitm
 2005年毕业,2010年加入支付宝,专
注于移动应用开发。
 目前主要负责支付宝客户端框架的技
术规划和相关的开发工作。
支付宝iOS客户端框架概要
支付宝 文壁
大纲
1
挑战和目标
2
基于框架的开发模式
3
RPC
4
稳定性
挑战和目标
支付宝钱包产品架构
基础技术
框架
基础服务
工具
应用中心
TODO
个人应用中
心
商户应用
账单
资产
安全
账单列表
银行卡
安全等级
交易详情
卡券
鉴权产品
对账单
手机
账户管理
基金
设备管理
航旅
现阶段面临的挑战
• 多团队并行开发
团队规模
快速上线
产品稳定
高效
• 每月发布一个新版本
• 变化频繁的业务能快速、及
时上线
• 保证快速上线的
同时需要保证产
品的稳定性
技术目标
• 各个业务高度独立
• 客户端状态及性能监测
• 第三方业务快速接入
• 客户端异常恢复
• 动态推送
• 异常上报
稳定
扩展
质量
效率
• 业务并行开发
• Athrun(淘宝)
• 自动化测试框架
• 提供必要的基础服务
基于框架的开发模式
Contex & App & Service
接口层
Context
AppManager
ServiceManager
Native
App
Service
实现层
Web App
Lua App
Service
Service
Webapp(HTML5)
WEB
Native
HTML
快捷支付
CSS
语音识别
JavaScript
通讯录
扫码
基于框架的开发模式
组内开发/
测试
客户端团队Ta
(业务A)
获取
框架/SDK
B (编译和开发)
B..framework(连调)
基础技术
组
源代码
SVN
trunk
框架/SDK
framework
s
MVN 库
Frameworks
A(编译开发)
A.framework
客户端团队Tb
(业务B)
源代码
SVN
A-trunk
提交A.framework
Frameworks
+配置
获取
框架/SDK
打包平台
动态推包平
台
钱包
App的开发步骤
• 自动化测试框架
• 代码生成
• 框架/SDK
• App配置
• Service配置
• Xcode模板插件
RPC
RPC – 自动代码生成
Eclipse插件
RPC – 示例代码
Account *account = [self currentAccount];
AccountService *service = [context findServiceById:@”account”];
[service queryBalance:account];
[AsyncCaller callBlock: ^{
Account *account = [self currentAccount];
AccountService *service = [context findServiceById:@”account”];
[service queryBalance:account];
}
completion: ^{
[self updateUI];
}
PRC
收到
请求
未登录?
登录
已超
时?
前置
拦截
执行
请求
后置
拦截
返回
结果
RPC – 优化
 Keep-Alive
 Gzip压缩
 压缩率:50%+
 ETag缓存
 ETag / If-None-Match / 304
 命中率:31.02% / 节省流量:6096.47MB
 批量请求
 发送时多请求合并
 接收时分次多次返回
稳定性
稳定性 – 运行状态监控
Monitor
• PV
• 闪退率
• 请求追踪
Storage
Servers
稳定性 – 异常恢复
NSProxy
• [UIButton addTarget:action:forControlEvents]
Replace Method
•_originMethod = class_replaceMethod([NSArray
class], @selector(objectAtIndex:),
(IMP)$$APArrayGetObjectAtIndex, "v@:");
自动埋点
控制台
线上环境:发送点击事件
[UIApplication sendEvent:]
测试环境:
发送界面截图
界面截图
界面还原
自动埋点
总体架构
Thanks