Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
百度贴吧服务端性能优化实践
Search
Reeze Xia
August 13, 2014
Technology
5
1.6k
百度贴吧服务端性能优化实践
Reeze Xia
August 13, 2014
Tweet
Share
More Decks by Reeze Xia
See All by Reeze Xia
HHVM: A High Performance PHP Engine
reeze
3
110
百度贴吧HHVM应用实践
reeze
6
1.3k
百度贴吧LAMP架构
reeze
1
1.2k
Other Decks in Technology
See All in Technology
技術広報経験0のEMがエンジニアブランディングをはじめてみた
coconala_engineer
1
130
既存プロセスからの脱却と変化に適応するために必要なこと
cybozuinsideout
PRO
2
170
KubeCon EU 2024 : Knative Maintainers Session
salaboy
0
370
サービスメッシュ環境における OpenTelemetry 活用 / OpenTelemetry in Service Mesh
k6s4i53rx
2
830
なんで私に登壇依頼が?! ~頼られるエンジニアになるためには~ /
mixi_engineers
PRO
2
200
検証からプロダクトへ: シームレスなLLM開発の ためのしくみ作り
nunukim
1
150
大規模なアジャイル開発の現場と技術負債 / Technical Debt
yoshiitaka
20
4k
統計的学習理論読み Chapter 1
kmatsui
3
740
中央集権体制からDataOpsへの転換 / centralized-to-dataops-transformation
pei0804
7
1.4k
BDD(Cucumber)コミュニティが無料提供しているコンテンツの紹介と現在起きている危機
nihonbuson
4
730
XRミーティング 2024-03-20
1ftseabass
PRO
0
100
業務で使えるかもしれない…!?GitHub Actions の Tips 集 / CI/CD Test Night #7
ponkio_o
PRO
24
6.9k
Featured
See All Featured
Design by the Numbers
sachag
274
18k
JazzCon 2018 Closing Keynote - Leadership for the Reluctant Leader
reverentgeek
178
11k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
19
1.9k
How GitHub (no longer) Works
holman
301
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
355
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
24
2.2k
Atom: Resistance is Futile
akmur
258
25k
Navigating Team Friction
lara
177
13k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
67
38k
The Illustrated Children's Guide to Kubernetes
chrisshort
28
46k
Adopting Sorbet at Scale
ufuk
66
8.5k
Documentation Writing (for coders)
carmenintech
59
3.8k
Transcript
百度贴吧服务端性能优化实践 夏绪宏
[email protected]
Web性能⼤大会 2014
About Me • 夏绪宏 • 百度贴吧:LAMP技术负责⼈人 • Weibo: @reeze •
http://github.com/reeze • Email:
[email protected]
Agenda 1. 性能优化简介 2. 贴吧服务端性能优化实践 3. 总结展望
Web Performance Matters TM
Performance is a Feature ” “ — Jeff Atwood
optimize to make sth as good as it can be.
['ɑptɪ.maɪz] v.
Web performance optimization Achieve better performance with limited resources by
doing less, do it faster, correctly. Better: faster, less resource consumption.
Web performance optimization All about Trade off. ! Most of
the time, you can’t get them all.
运⾏行效率 开发效率 运维效率 理想:Get them all. 现实:很难全局最优,Make your choice. 其他变量:资源成本,技术选型等
全局视⾓角,并⾮非只有运⾏行效率
Photo credit: 《High Performance Browser Networking》 Latency and Bandwidth 我们的优化重点
Server Lantency
优化⺫⽬目标 • ⽤用户体验:降低响应时间 • 节省资源:提⾼高吞吐,充分利⽤用资源
系统化视⾓角 • 性能问题从哪⾥里来? • 性能问题怎么定位? • 怎么发现性能衰减?事前、事后
系统化视⾓角 • 性能问题哪⾥里来? • 设计阶段:架构问题 • 开发阶段:实现问题 • 在线运⾏行:⼦子模块故障,流量上涨等 !
• 动态问题:随时间变化
层次化视⾓角 • 业务层 • 代码逻辑 • 算法层次 • 基础层 •
运⾏行层、交互层 • 系统层次 Nginx接⼊入 业务层 运⾏行层: PHP、Nginx MySQL/Cache/等 RPC交互层 操作系统/⺴⽹网络
怎么定位性能问题 • PIaaB: Performance Issue as a Bug :) !
! !
怎么定位性能问题 • Toolbox • xhprof、valgrind-callgrind、gperftools • jemalloc、HHVM AdminServer • systemtap…
etc… • 业务性能监控平台
百度贴吧 • 最⼤大的中⽂文社区 ! • 百亿级流量 • 业务增⻓长⻜飞速,规模⼤大:100+⼦子模块 • 业务120+
上线/天
贴吧层次架构 # %$! " # Nginx
%$! %$! %$! %$! %$! %$! %$! %$! " %$! %$! %$! %$! %$! %$! %$!
Nginx优化 • Nginx Cache • 内部数据接⼝口缓存 • 及早返回,提升响应速度 • 线上Cache命中率:
60% • 在适⽤用的场景使⽤用cache Cache DB
Nginx优化 • 内部调⽤用使⽤用⻓长连接 • 跨机房请求 ~ 2ms左右,同机房1ms以内 • 使⽤用⻓长连接避免连接性能损失 •
级联效应 Nginx接⼊入 RPC
业务优化 • 并⾏行化 • 后端调⽤用串⾏行变并⾏行 • 最理想情况下: 185ms -> 63ms
Nginx 业务层 RPC
业务优化 • 并⾏行的⽭矛盾:开发效率与效率的⽭矛盾 • 业务依赖关系,⽆无法全并⾏行 • 模块化设计:可并⾏行的难以并⾏行 • ⾃自动化并⾏行:开发效率⽆无法满⾜足 Nginx
业务层 RPC
业务优化-代码及逻辑优化 • 代码优化: • 使⽤用本地apc cache缓存配置 • 批量获取数据 • 业务逻辑优化
• ⽇日志打印优化 • etc… Nginx 业务层 RPC
业务优化-代码及逻辑优化 • 前端模板性能优化 • CPU密集型 • ⻚页⾯面性能瓶颈 Nginx 业务层 RPC
业务优化-代码及逻辑优化 • 热点函数函数扩展实现 • 性能提升17% • 响应时间降低 32.5%
业务优化-代码及逻辑优化 • Spider优化: • 帖⼦子⻚页 21%来⾃自爬⾍虫 • 针对Spider提供简版⻚页⾯面:平均响应时间下降11% • 带宽优化
• 使⽤用CDN,缩⼩小⻚页⾯面体积 • 节省 35% Nginx 业务层 RPC
RPC优化 • 700+后端配置 • 配置⽂文件⼤大⼩小:~ 5M • 变动频繁 ! •
实时加载配置不可⾏行,热加载 Nginx RPC交互层
RPC优化 • 避免重复加载 • PHP⽆无状态怎么办? • 扩展实现 • 独⽴立进程更新配置 RPC中间件V1
RPC优化 • 使⽤用共享内存 • 使⽤用更快的序列化格式 RPC中间件V2
RPC优化 ! ! ! ! • 使⽤用更快的序列化格式:msgpack > php serialize
> json 序列化(s) case1 case2 case3 case4 case5 PHP 0.216778 0.217359 0.253435 0.162621 0.214441 JSON 0.249784 0.205442 0.325695 0.124034 0.384287 Msgpack 0.218894 0.212432 0.250249 0.048074 0.096459
RPC优化 • 整体性能提升:24.6% ! • 其他尝试思路: • 更短的调⽤用路径,减少架构层次 • 内部使⽤用更⾼高效的协议,⽽而不是HTTP等
更快的PHP • 另⼀一个PHP实现:HHVM (HipHop PHP Virtual Machine) • Facebook开源项⺫⽬目 http://github.com/facebook/hhvm
• 解决PHP运⾏行效率问题 • 开发速度和效率兼得 Nginx 运⾏行层 RPC
更快的PHP %$" %$" #! %$"
更快的PHP • 我们的业务测试结果 ! ! ! !
为什么会快 • 类型推导 • JIT • 多级优化
真实业务数据
真实业务数据 • 响应时间下降:126ms • 平均提升:27%
进展 • 完成绝⼤大多数在线应⽤用的迁移 • 核⼼心服务性能提升平均40%+ ! • Conclusion: 尤其适合计算密集型业务
系统化思路 • 防治:线下性能监控 • 监控:线上性能监控 • 定位:性能问题分析 षؿ ҩ൫ ഈཌ
ᄎྛ ࡓ॥
系统化思路 • 防治:线下性能监控平台 • 业务拓扑关系复杂 • 线上线下环境差异⼤大 • 难以获得真实数据 •
难以⾃自动化
性能问题早发现 • 在线性能监控平台 • 性能变化早知道 • 和上线时间点关联 • 调⽤用拓扑关系
总结和展望 • 性能优化是个迭代过程 • 全局思考、有所取舍 ! • 提升在线性能问题定位效率 • 探索线下性能衰减发现有效⼿手段
• 全局优化:不⽌止Server端,底层操作系统,⺴⽹网络等。
Thank you