SlideShare a Scribd company logo
1 of 34
Download to read offline
微博在大规模、高负载系统中
的典型问题
新浪微博 平台及⼤大数据部
秦迪 @蛋疼的axb
• 有哪些问题
• 如何排查
• 如何预防
关于微博和微博平台
app后端 web后端 开放平台
微博平台
⼿手机客户端 weibo.com 第三⽅方应⽤用展现
适配
服务
关于大规模、高负载
• 一些数据
- 8亿注册用户
- 8000万+DAU
- 1.75亿MAU
• 典型场景
- 固定活动
• 吐槽春晚
• 让红包飞
- 突发事件
• #马航370#
• #周一见#
• 《我错了》
关于问题
功能问题
• 发不出微博
• 未读数不准
• 500/502/503
• ……
关于问题
性能问题
• 刷微博慢
• 提醒延迟
• 接⼝口响应时间⻓长
• ……
关于问题
功能问题 性能问题
面对极端流量时的问题
• 功能异常导致性能下降
• 性能问题影响功能可⽤用性
案例一:性能问题影响功能可用性
Proxy
Web
Resource
X10
Web
Web
Server
Web
Server
Proxy
Varnish Varnish
Resource
Storage
Server
Storage
Server
Storage
Server
响应时间下降
接⼝口⽆无响应
请求量⼤大幅下降
web后端app后端 第三⽅方
平台
业务⽅方
触发rebalance,集群性
能⼤大幅下降
接⼝口响应时间增加
线程数达到上限,卡死
案例二:功能异常导致性能下降
• 背景:
- docker@春晚红包
- 应对极端流量,应用docker进行快
速服务调度
• 现象:
- SocketTimeout
- Connection Refuse
• 原因:
- nat方式组网时,底层基于iptables
- iptables底层基于netfilter内核模块
- Netfilter模块保持65536个链接做
NAT转换
A B C
典型问题的特点
• 出现场景
- 访问量量级增加
- 引入新组件
• 问题表现
- 一般表现为应用崩溃、服务不可
用或系统雪崩等
• 原因排查
- 量变到质变,低负载经验不适用
- 问题往往牵扯多个领域
为什么我不知道?
• 有哪些问题
• 如何排查
• 如何预防
监控
• Dashboard
- 基于graphite
- 集中展示
- 定量分析
• Trace
- 追踪链路,显示请求调用链
- 分析节点异常:平均值、历史数据
日志
• 信息要完整
- 业务日志:包含关键路径与异常
- 性能日志:性能统计与分步耗时
- 容器日志、系统日志也很重要
• gc log、/var/log
• 分维度过滤
- 时间:出问题的时间点
- 请求:uid、requestid
- 级别:WARN/ERROR
• 集中检索
- ELK/agent(jpool)
- 平衡效率和成本
查看现场
查看现场
• 快照分析
- 功能:观察程序当前的状态
- 场景:程序当前处于整体异常状态
- 举例:gdb、Xmap、mat、jstack
• 调用分析
- 功能:观察调用和调用栈
- 场景:请求出错、请求慢、偶发错误
- 举例:btrace、Xtrace
• 聚合分析
- 功能:按某些维度采样、聚合和对比数据
- 场景:查找性能问题
- 举例:perf、Xstat、Xtop
分析原因
• 问题经常隐藏在:
- 应用:死锁、内存溢出、依赖资源
- 系统:jvm、kernel、tcp
- 硬件:硬件故障、网络
• 联合排查
- 开发 / 运维 / dba / 网络 / 系统 / 硬件
案例:春晚演练时服务出现异常
• 背景
- 演练方案:跨机房迁移用户请求
- 逐渐迁移流量的过程中,web服
务突然僵死,大量返回503
- 接口吞吐量低于理论值2-3倍
nginx(机房1)
web
rpc1
cache
mysql
rpc2
web
rpc1
cache
mysql
rpc2
nginx(机房2)
web
1:30% 1:35% 1:40% 1:45%
QPS$
定位问题
• 监控和日志
- 异常时的现象
• rpc1服务大量超时,处理队列堵塞
• rpc1服务器CPU idle普遍降低至10%
• 后端资源没有波动
rpc接⼝口响应时间
nginx(机房1)
rpc1
cache
mysql
rpc2
web
rpc1
cache
mysql
rpc2
重现问题
• 重现现场
- 直接压测没有重现问题
- 通过tcp copy引流线上流量,问题重现
瓶颈分析
• 瓶颈分析
- 通过perf发现close系统调用消耗了大量cpu
瓶颈分析
• 瓶颈分析
- 通过perf发现close系统调用消耗了大量cpu
- 通过jstack发现大量线程卡在nio的closeIntFD上
瓶颈分析
• 瓶颈分析
- 通过perf发现close系统调用消耗了大量cpu
- 通过jstack发现大量线程卡在nio的closeIntFD上
- 通过strace发现close系统调用的处理时间很长
瓶颈分析
• 瓶颈分析
- 通过perf发现close系统调用消耗了大量cpu
- 通过jstack发现大量线程卡在nio的closeIntFD上
- 通过strace发现close系统调用的处理时间很长
- 通过对比压测发现旧版内核频繁调用close时有性能问
题
解决问题
• 解决方式
- 升级内核
• 确保问题被修复
- 开发环境验证
- 测试环境验证
- 线上环境验证
• 确保没有引入新的问题
- 灰度上线,观察服务状态
• 功能无异常
• 性能未下降
解 决
tips:当心解决问题的陷阱!
• 案例:追查性能问题
- 现象:接口突然开始超时
- 原因:访问量突增,大量读取
静态内容缓存,mc出现带宽
瓶颈
- 解决:增加本地缓存
- 结果:压测时性能仍然有问题

web服务器CPU瓶颈 顺便加个统计
1:30% 1:35% 1:40% 1:45%
CPU
小结:在大高系统中排查问题
成本范围
• 有哪些问题
• 如何排查
• 如何预防
高可用架构设计
• 服务隔离
- 按部署隔离
• 分机房部署
• 核心服务独立部署
• 服务独立化部署
- 按调用隔离
• 异步队列
• 快速失败
可靠的系统实现
- 耦合方式:同步 / 异步 /丢弃
调⽤用⽅方 服务⽅方 thread
buffer
queue
thread
buffer
queue
服务⽅方
可靠的系统实现
- 耦合方式:同步 / 异步 /丢弃
- 异常处理的异常处理:不要让事情变得更糟
压测与演练
• 真实流量压测
- 模拟实际请求模型:TCPCopy
- 模拟后端资源异常:TouchStone(tc)
最后再说几句
- Q:如何判断一个系统在大规模、高负载下是否可靠?
- A:没有实际流量验证前一定不可靠,验证后也不一定是可靠的。
- Q:压测压出问题怎么办?
- A:压测压不出问题怎么办?
- Q:处理预案是越多越好吗?
- A:一个演练过的预案要好过十个没有演练过的预案。
- Q:我特别害怕自己做的系统在高负载时出故障,怎么办?
- A:微博平台欢迎你:)
Q&A
秦迪 @蛋疼的axb
@微博平台架构

More Related Content

Viewers also liked

Zero downtime-java-deployments-with-docker-and-kubernetes
Zero downtime-java-deployments-with-docker-and-kubernetesZero downtime-java-deployments-with-docker-and-kubernetes
Zero downtime-java-deployments-with-docker-and-kubernetesArjan Schaaf
 
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Weibo Corporation
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web frameworkBo-Yi Wu
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台liuts
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golangBo-Yi Wu
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会Joseph Chiang
 
How to successfully grow a code review culture
How to successfully grow a code review cultureHow to successfully grow a code review culture
How to successfully grow a code review cultureNina Zakharenko
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进Jun Liu
 
[系列活動] Machine Learning 機器學習課程
[系列活動] Machine Learning 機器學習課程[系列活動] Machine Learning 機器學習課程
[系列活動] Machine Learning 機器學習課程台灣資料科學年會
 
Sublime text 極速應用教學
Sublime text 極速應用教學Sublime text 極速應用教學
Sublime text 極速應用教學Amos Lee
 
[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習
[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習
[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習台灣資料科學年會
 

Viewers also liked (11)

Zero downtime-java-deployments-with-docker-and-kubernetes
Zero downtime-java-deployments-with-docker-and-kubernetesZero downtime-java-deployments-with-docker-and-kubernetes
Zero downtime-java-deployments-with-docker-and-kubernetes
 
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web framework
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
 
How to successfully grow a code review culture
How to successfully grow a code review cultureHow to successfully grow a code review culture
How to successfully grow a code review culture
 
大鱼架构演进
大鱼架构演进大鱼架构演进
大鱼架构演进
 
[系列活動] Machine Learning 機器學習課程
[系列活動] Machine Learning 機器學習課程[系列活動] Machine Learning 機器學習課程
[系列活動] Machine Learning 機器學習課程
 
Sublime text 極速應用教學
Sublime text 極速應用教學Sublime text 極速應用教學
Sublime text 極速應用教學
 
[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習
[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習
[DSC 2016] 系列活動:李宏毅 / 一天搞懂深度學習
 

Similar to 微博在大规模、高负载中的典型问题

NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享Leo Zhou
 
淘宝双11双12案例分享
淘宝双11双12案例分享淘宝双11双12案例分享
淘宝双11双12案例分享vanadies10
 
社交化电子商务 网易科技五道口沙龙第一期
社交化电子商务 网易科技五道口沙龙第一期社交化电子商务 网易科技五道口沙龙第一期
社交化电子商务 网易科技五道口沙龙第一期网易科技
 
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08drewz lin
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构n716
 
小米Hadoop&hbase微实践
小米Hadoop&hbase微实践小米Hadoop&hbase微实践
小米Hadoop&hbase微实践Liang Xie
 
Nginx深度開發與客制化
Nginx深度開發與客制化Nginx深度開發與客制化
Nginx深度開發與客制化Joshua Zhu
 
A brief introduction to Machine Learning
A brief introduction to Machine LearningA brief introduction to Machine Learning
A brief introduction to Machine LearningWen-Tien Chang
 
2014 Hpocon 姚仁捷 唯品会 - data driven ops
2014 Hpocon 姚仁捷   唯品会 - data driven ops2014 Hpocon 姚仁捷   唯品会 - data driven ops
2014 Hpocon 姚仁捷 唯品会 - data driven opsMichael Zhang
 
No sql@vip new
No sql@vip newNo sql@vip new
No sql@vip newChao Zhu
 
手游渠道杂谈
手游渠道杂谈手游渠道杂谈
手游渠道杂谈赵 强
 
刘昌钰:阿里大数据应用平台
刘昌钰:阿里大数据应用平台刘昌钰:阿里大数据应用平台
刘昌钰:阿里大数据应用平台hdhappy001
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011Yiwei Ma
 
透過網路連線 MySQL 進行查詢會比較快嗎?
透過網路連線 MySQL 進行查詢會比較快嗎?透過網路連線 MySQL 進行查詢會比較快嗎?
透過網路連線 MySQL 進行查詢會比較快嗎?Cheyin L
 
1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计RolfZhang
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseJack Gao
 
唯品会大数据实践 Sacc pub
唯品会大数据实践 Sacc pub唯品会大数据实践 Sacc pub
唯品会大数据实践 Sacc pubChao Zhu
 
瀏覽器與網頁原理 Principles of Browsers and Webpages
瀏覽器與網頁原理 Principles of Browsers and Webpages瀏覽器與網頁原理 Principles of Browsers and Webpages
瀏覽器與網頁原理 Principles of Browsers and Webpages安齊 劉
 

Similar to 微博在大规模、高负载中的典型问题 (20)

NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
NoSQL@VIP — 唯品会NoSQL平台⾃动化发展及运维经验分享
 
淘宝双11双12案例分享
淘宝双11双12案例分享淘宝双11双12案例分享
淘宝双11双12案例分享
 
社交化电子商务 网易科技五道口沙龙第一期
社交化电子商务 网易科技五道口沙龙第一期社交化电子商务 网易科技五道口沙龙第一期
社交化电子商务 网易科技五道口沙龙第一期
 
张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08张松国 腾讯微博架构介绍08
张松国 腾讯微博架构介绍08
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构
 
小米Hadoop&hbase微实践
小米Hadoop&hbase微实践小米Hadoop&hbase微实践
小米Hadoop&hbase微实践
 
Nginx深度開發與客制化
Nginx深度開發與客制化Nginx深度開發與客制化
Nginx深度開發與客制化
 
A brief introduction to Machine Learning
A brief introduction to Machine LearningA brief introduction to Machine Learning
A brief introduction to Machine Learning
 
2014 Hpocon 姚仁捷 唯品会 - data driven ops
2014 Hpocon 姚仁捷   唯品会 - data driven ops2014 Hpocon 姚仁捷   唯品会 - data driven ops
2014 Hpocon 姚仁捷 唯品会 - data driven ops
 
mercury
mercurymercury
mercury
 
No sql@vip new
No sql@vip newNo sql@vip new
No sql@vip new
 
手游渠道杂谈
手游渠道杂谈手游渠道杂谈
手游渠道杂谈
 
刘昌钰:阿里大数据应用平台
刘昌钰:阿里大数据应用平台刘昌钰:阿里大数据应用平台
刘昌钰:阿里大数据应用平台
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011
 
vmarket in action
vmarket in actionvmarket in action
vmarket in action
 
透過網路連線 MySQL 進行查詢會比較快嗎?
透過網路連線 MySQL 進行查詢會比較快嗎?透過網路連線 MySQL 進行查詢會比較快嗎?
透過網路連線 MySQL 進行查詢會比較快嗎?
 
1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouse
 
唯品会大数据实践 Sacc pub
唯品会大数据实践 Sacc pub唯品会大数据实践 Sacc pub
唯品会大数据实践 Sacc pub
 
瀏覽器與網頁原理 Principles of Browsers and Webpages
瀏覽器與網頁原理 Principles of Browsers and Webpages瀏覽器與網頁原理 Principles of Browsers and Webpages
瀏覽器與網頁原理 Principles of Browsers and Webpages
 

微博在大规模、高负载中的典型问题