SlideShare a Scribd company logo
移动时代
端到端的稳定性保障
@唐福林 雪球首席架构师
 关于雪球,关于我
 “稳定”的定义
 明确数据指标项
 收集数据
 使用数据
 总结,及一些个人的想法
大纲
 大而不同的投资工具
 web 1.0:新闻信息
 web 2.0:SNS 订阅,分享,聊天
 web 3.0:移动 APP,交易闭环
 风来了,风口还缺“会飞的🐷”
 知乎体:在全员都在投身「投资事业」的
公司里工作 是一种怎样的体验
关于雪球
 前新浪微博架构师,微博ID @唐福林
 微博短链 t.cn
 微博计数器 redis,rediscounter
 微博用户关系服务
 微博稳定性、性能改进
关于我
 雪球首席架构师,雪球ID @唐福林
 性能,稳定性改进
 业务无关的底层服务,基础组件建设
 团队建设
关于我
 关于雪球,关于我
 “稳定”的定义
 明确数据指标项
 收集数据
 使用数据
 总结,及一些个人的想法
大纲
 业务方/用户期待的“稳定”
 可访问到
 耗时在可接受访问内
 想用的功能正常
 Now, or never
定义“稳定”
 不可抗力
 地震,海啸
 Great Cannon DDoS
 机房停电,挖掘机挖断出口光纤
 AWS/Azure/阿里云 out of service
 运营商 DNS/Http 劫持
为什么“不稳定”
 技术内部因素
 架构或代码缺陷
 代码或基础设施变更
 新老版本兼容
 访问模式变化
为什么“不稳定”
 系统可用时间多
 核心功能正常
 性能在可接受的范围内
 不可用的时间少
 n 个 9 的可用性
技术定义
 关于雪球,关于我
 “稳定”的定义
 明确数据指标项
 收集数据
 使用数据
 总结,及一些个人的想法
大纲
 数字说话
 凡是不给出明确数字的指标要求都是耍流氓
 SLA Service Level Agreement
 http://en.wikipedia.org/wiki/Service-
level_agreement
 简单版:99%的正常请求1秒内正常完成
明确数据指标项
 对数据指标项的要求
 区分度高:Key Performance Indicator
 可收集,易收集
 可处理,易处理
 可使用,易使用
 项数量越少越好
用数据说话
典型的访问流程
DNS
互联网 接入层 交换层
应用层 缓存层 存储层
CDN
 APP
 操作成功率:用户操作正常完成次数 / 用户
操作总次数
 非正常包括
 crash
 超时
 server 端报错
用数据说话
 APP
 困难
 怎么记录
 怎么传输
 怎么使用
用数据说话
 公网传输
 传输成功率:传输成功的次数 / 发起传输的
次数
 失败包括
 超时
 被劫持
用数据说话
 公网传输
 困难:无法准确收集
 解决:
 以客户端发起网络操作次数为准
 封装自己的客户端网络操作底层库
用数据说话
 接入层
 成功率:服务端成功接入的次数 / 客户端发
起请求次数
 失败包括
 机房、IDC、云服务故障
 DoS
 配置错误
用数据说话
 交换层
 成功率:成功返回的次数 / 接收到的总请求
数
 失败包括
 配置变更
 容量峰值
用数据说话
 应用层
 成功率:成功返回的次数 / 接收到的总请求
数
 失败包括
 代码或配置变更,重启,bug
 容量峰值,性能瓶颈
 依赖资源或服务超时或失败
用数据说话
 缓存层
 成功率?命中率!
 影响命中率的原因
 业务 key value 模式设计
 容量:MEM,CPU,带宽,QPS
 缓存组件自身设计因素导致的剔除率
用数据说话
 存储层
 成功率:成功存储的次数 / 接收到的总请求
数
 失败包括
 数据丢失
 服务不可用
用数据说话
 内网传输
 传输成功率:传输成功的次数 / 发起传输的
次数
 失败包括
 超时:毛刺,QoS,瞬断
 配置变更
 容量峰值
用数据说话
 内网传输
 困难
 无法收集,或无法处理数据
 发现问题后,无法定位根源,无法解决
用数据说话
 关于雪球,关于我
 “稳定”的定义
 明确数据指标项
 收集数据
 使用数据
 总结,及一些个人的想法
大纲
 数据收集框架
 没有银弹,也没有哪个现成的开源框架能
帮助你搞定你的所有问题
 Do it yourself,with help of opensource
 Apache Flume 看起来不错,如果你问我有
没有推荐的框架的话
收集数据
 数据收集原则
 收集原始数据 VS 收集统计数据
 实时收集 VS 异步收集
 在能达到目的的前提下,数据量越少越好,
方式越简单越好
收集数据
 关于雪球,关于我
 “稳定”的定义
 明确数据指标项
 收集数据
 使用数据
 总结,及一些个人的想法
大纲
 Dashboard
 目标:远远的看一眼,就知道系统现在是
好的/是有问题的
 实现:http://status.aws.amazon.com/
使用数据
使用数据
 监控
 目标:各种指标项的当前状态,历史变化
趋势
 实现:Zabbix,Nagios,Zenoss,Cacti
 http://en.wikipedia.org/wiki/Comparison_of
_network_monitoring_systems
使用数据
 报警
 目标:故障发生时,实时告知技术人员
 实现:电话(IVR),短信,Email,微信
/QQ 或其它任何通知手段
 原则:
 漏报很危险
 经常误报,比漏报更危险
使用数据
 应用层使用
 旁路使用
 容灾测试
 紧急预案
 后台工具,管理系统
使用数据
 应用层使用
 直接使用
 动态开关配置系统 config service
 Smart client
使用数据
 确认正常
 每次故障恢复后确认
 每次报警后确认
 每次变更后确认
 每次数据发生较大变化后确认
使用数据
 问题跟进
 记录每次故障或问题
 记录解决过程,经验教训
 解决方案工具化,自动化
 解决方案体系化:彻底解决系统内全部类
似问题,保证以后不再出现同类问题
使用数据
 “稳定”的定义
 明确数据指标项
 收集数据
 使用数据
总结
 稳定性保障的难点
 用数据说话的意识:没有数据就没有发言权
 公司层面重视程度:B轮以后再说稳定性
 技术实现难度:APP端的数据收集,网络/云服
务的不可控性
 过犹不及:收集的数据过多、报警过多
一些个人的想法
 技术人员的自我修炼
 态度第一:知道什么样子是“好的结果”,并有意
愿,主动的去追求好的结果。能力可以有差距,
但意识一定要到位。
 个人的好:更快,更炫,更漂亮,更体系化
 具体到稳定性工作上:平常工作中面向失败编
程,体系化的收集并使用数据,尽量降低对正
常业务的影响,持续关注数据指标项的变化,
解决一个问题的时候,会想着解决一类问题
一些个人的想法
 技术团队的自我修炼
 支持鼓励每个人追求更好,并在整体上追求好
的结果。
 团队的好:稳定可靠(简单直白),hold 住,
成本低(开发成本,交流沟通成本,维护成本,
废弃成本),行为一致,无人员单点
 具体到稳定性工作上:用最简单可靠的技术实
现功能,提前准备好各种失败预案,团队整体
技术栈统一化,工作透明化,降低沟通成本,
消除系统单点,消除人员单点
一些个人的想法
 个人与团队追求的统一
 差异部分的处理:控制在小范围内,不溢出到团
队范围
一些个人的想法
 稳定性工作没有终点,我们也正在通往稳定
的路上
 收简历 fulin@xueqiu.com
结束语
聪明的投资者都在这里
Keep Calm
And
Ask Me Anything

More Related Content

Similar to 移动时代端到端的稳定性保障经验谈

Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
Zoom Quiet
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
vanadies10
 
中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac
Chao Zhu
 
Solution apc 4.0
Solution apc 4.0Solution apc 4.0
Solution apc 4.0ahnlabchina
 
Sybase Analytic Appliance
Sybase Analytic ApplianceSybase Analytic Appliance
Sybase Analytic Appliance
focusbi
 
Mocha Bsm
Mocha BsmMocha Bsm
Mocha Bsm
王 莆中
 
昆腾技术白皮书- 重新设计备份和恢复,适应未来虚拟化和整合的需求
昆腾技术白皮书- 重新设计备份和恢复,适应未来虚拟化和整合的需求昆腾技术白皮书- 重新设计备份和恢复,适应未来虚拟化和整合的需求
昆腾技术白皮书- 重新设计备份和恢复,适应未来虚拟化和整合的需求samanthaleee
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境drewz lin
 
客服管理中心之系統規劃與建構 大葉大學-詹翔霖
客服管理中心之系統規劃與建構 大葉大學-詹翔霖客服管理中心之系統規劃與建構 大葉大學-詹翔霖
客服管理中心之系統規劃與建構 大葉大學-詹翔霖
文化大學
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
05 朱近之 ibm云计算解决方案概览 0611
05 朱近之 ibm云计算解决方案概览 061105 朱近之 ibm云计算解决方案概览 0611
05 朱近之 ibm云计算解决方案概览 0611ikewu83
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructurekyhpudding
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理Kay Yan
 
数据采集中间件技术交流
数据采集中间件技术交流数据采集中间件技术交流
数据采集中间件技术交流
jerry tom
 
C A W D A J O P
C A W D A J O PC A W D A J O P
C A W D A J O P51 lecture
 
IDC大会:新浪SAE架构与设计
IDC大会:新浪SAE架构与设计IDC大会:新浪SAE架构与设计
IDC大会:新浪SAE架构与设计Xi Zeng
 
04 陈良忠ibm cloud forum ibm experience 0611
04 陈良忠ibm cloud forum  ibm experience 061104 陈良忠ibm cloud forum  ibm experience 0611
04 陈良忠ibm cloud forum ibm experience 0611ikewu83
 
ForumSentry客戶解決
ForumSentry客戶解決ForumSentry客戶解決
ForumSentry客戶解決Kevin Kao
 
Modernising Data Architecture for Data Driven Insights (Chinese)
Modernising Data Architecture for Data Driven Insights (Chinese)Modernising Data Architecture for Data Driven Insights (Chinese)
Modernising Data Architecture for Data Driven Insights (Chinese)
Denodo
 

Similar to 移动时代端到端的稳定性保障经验谈 (20)

Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
 
Emc keynote 1130 1200
Emc keynote 1130 1200Emc keynote 1130 1200
Emc keynote 1130 1200
 
中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac
 
Solution apc 4.0
Solution apc 4.0Solution apc 4.0
Solution apc 4.0
 
Sybase Analytic Appliance
Sybase Analytic ApplianceSybase Analytic Appliance
Sybase Analytic Appliance
 
Mocha Bsm
Mocha BsmMocha Bsm
Mocha Bsm
 
昆腾技术白皮书- 重新设计备份和恢复,适应未来虚拟化和整合的需求
昆腾技术白皮书- 重新设计备份和恢复,适应未来虚拟化和整合的需求昆腾技术白皮书- 重新设计备份和恢复,适应未来虚拟化和整合的需求
昆腾技术白皮书- 重新设计备份和恢复,适应未来虚拟化和整合的需求
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
 
客服管理中心之系統規劃與建構 大葉大學-詹翔霖
客服管理中心之系統規劃與建構 大葉大學-詹翔霖客服管理中心之系統規劃與建構 大葉大學-詹翔霖
客服管理中心之系統規劃與建構 大葉大學-詹翔霖
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
05 朱近之 ibm云计算解决方案概览 0611
05 朱近之 ibm云计算解决方案概览 061105 朱近之 ibm云计算解决方案概览 0611
05 朱近之 ibm云计算解决方案概览 0611
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructure
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
数据采集中间件技术交流
数据采集中间件技术交流数据采集中间件技术交流
数据采集中间件技术交流
 
C A W D A J O P
C A W D A J O PC A W D A J O P
C A W D A J O P
 
IDC大会:新浪SAE架构与设计
IDC大会:新浪SAE架构与设计IDC大会:新浪SAE架构与设计
IDC大会:新浪SAE架构与设计
 
04 陈良忠ibm cloud forum ibm experience 0611
04 陈良忠ibm cloud forum  ibm experience 061104 陈良忠ibm cloud forum  ibm experience 0611
04 陈良忠ibm cloud forum ibm experience 0611
 
ForumSentry客戶解決
ForumSentry客戶解決ForumSentry客戶解決
ForumSentry客戶解決
 
Modernising Data Architecture for Data Driven Insights (Chinese)
Modernising Data Architecture for Data Driven Insights (Chinese)Modernising Data Architecture for Data Driven Insights (Chinese)
Modernising Data Architecture for Data Driven Insights (Chinese)
 

移动时代端到端的稳定性保障经验谈

Editor's Notes

  1. 大家好,我是来自雪球的唐福林。今天在这里跟大家一起分享一下关于“移动时代的稳定性保障”这个话题以及我自己的一些理解和经验,作为抛砖引玉,欢迎大家一起讨论,也请大家多提意见和建议
  2. 我今天分享的话题大概包括以下这些段落:首先,我会简单介绍一下雪球公司,以及我自己的经历背景;然后,就“稳定”这个词在本次分享中的具体含义做一下定义;再接下来就是重点介绍的三个部分,分别是明确数据指标项,收集数据和使用数据;最后,做一个简短的总结。
  3. 关于雪球,因为我个人并不是资深股民,加入雪球的时间也不是很长,所以我只能从纯技术的角度做一下简单介绍。首先我想问一下,在座的有炒股的吗?去年的收益有超过 30% 的吗。雪球员工去年炒股平均收益 36%。雪球的业务包括: 招聘热烈进行中,欢迎投递简历。更多信息,请参考链接。
  4. 关于我。我从2010年开始进入新浪微博平台研发部门,直到2015年初。在微博的五年里,负责开发及维护了多个底层的基础组件和服务,后来开始带团队,做架构师,并在微博技术委员会中,负责全微博Java相关技术方案评审的负责人
  5. 2015年初加入雪球,担任首席架构师
  6. 对于用户来说,如果你的业务不是类似qq微信微博这种刚需,那么用户只要碰到一次不可用,以后可能就再也不用你了
  7. 稳定性本身从技术上来说是无法衡量的,必须转换成可以衡量的数据指标项才能进行后续的测量,监控,评价及改进。所谓数据指标项,最重要的就是“数字”了。举个例子,“好好学习,天天向上”就不是一个可以衡量的指标要求。
  8. 区分度:false positive , false negative 可收集:app 安装次数,无法收集。请求路过的每一个 tcp hop。关闭次数 可处理:response body 可使用:画图,阈值,报警,解决问题之后对比变化,确认问题是否解决
  9. 用户打开app,或被其它app唤起 用户点击 网络访问:dns,https,http CDN 流量清洗 四层交换 七层交换 应用 缓存 存储
  10. 根据个人的经验,我为 app 端定义了一个指标项: 超时:因为用户端网络问题的超时究竟算正常还是算异常:如果程序处理了,弹出提示“没有网络”,则算正常;如果程序没有处理,底层socket超时,则算异常
  11. 记录:界面层父类封装,本地一个 buffer 。app 端编程我不是专家,可能存在比我们现在使用的方案更好的方式,我们也还在持续摸索改进中。 传输:每次请求带一点 使用:每次发版解决 1 个(或有限的几个)最大的问题
  12. 超时:移动 2g 网络,优化思路:减少包大小,长连接 被劫持:dns:http dns,http:https,http 2,tcp socket over 80 端口
  13. 机房故障:接入层 HA,多机房冗余部署 配置错误:CDN 回源配置错误导致静态资源访问失败,GFW 导致国外访问出错,西藏地区访问超时等 最大的困难:成功次数不好收集。这个项我们当前也还没有正式启用。
  14. 后端服务返回的 http 4**,5** 在这里并不计算为失败
  15. 优雅重启,线上 bug 应对 优雅应对峰值或访问模式突变 服务依赖管理:弱依赖快速失败:依赖 10 个外部资源的一个服务,如果所有外部资源都是 99.9% 的成功率,则这个服务本身对外的成功率是?
  16. 业务在设计实现时一定要对缓存命中率进行评估和测试,得出合适的报警阈值
  17. 数据丢失:对服务反馈说已经存储,最终结果数据没有存下来 服务不可用:存储服务因各种原因不可用
  18. tcpdump 抓包数据量太大 传输底层的问题不好定位根源 smokeping
  19. 没有特殊要求的时候:异步收集,客户端延迟保证90%在秒级,服务端延迟保证99%在秒级,收集正常时的统计数据 + 异常时的原始数据
  20. 所以报警不能一味的求全,必须是先求全,加数量,能加的都加上,然后再每次收到误报后,必须设法解决这一类的误报问题,确保报警的准确性不随报警数量的增加而下降。
  21. 我们现在做的容灾测试更多的还是业务层的容灾,比如依赖的资源不可用,依赖的服务慢等。四七层交换的容灾没有做线上测试,只做了一些预案
  22. 我们自己封装的 http client 正在做一些 smart 方面的尝试
  23. 每次变更后确认数据指标项是否正常,这么基础的功能,我所了解的很多团队居然都没有做,不能不说是一种悲哀 指标项突然变的更好了,为什么?