QCon上海2015 大流量Web系统的性能优化实践 许令波(君山)
2020-03-01 82浏览
- 1.大流量Web系统性能优化实践 君山 2015.10.15
- 2.2015-6-3
- 3.2015-6-3
- 4.关于我 • • • • 许令波(君山) 在阿里6年,做了4件还不错的事情 商品详情、店铺、图片空间TL 关注大流量web系统的架构和性能优化工作。
- 5.目录 • 这些年的挑战 • 我们走过的路 • 我们的经验 5
- 6.流量爆发增长 • 图片来自网上
- 7.系统还比较脆弱 • 图片来自网上
- 8.环境造就了技术 图片来自网上
- 9.搞不好就淹死了 图片来自网上
- 10.业务爆发增长 图片来自网上
- 11.只有在这里才能遇到 图片来自网上
- 12.遇到的挑战 • 流量爆发增长带来机器的成倍增加,系统必 须要能水平扩展 • 流量的峰值(秒杀),单商品或者用户维度 会出现热点,给cache带来瓶颈 • 大面积的攻击,如何区分正常流量防止误杀 • 复杂的业务逻辑给系统系统的耦合度和数据 的分类更加困难
- 13.我们走过的路 • 系统代码层面的优化 • 架构优化 • 链路优化
- 14.代码级优化
- 15.代码优化实践:模板引擎的热点 • • • • Velocity是动态解释性语言,执行效率较 差 页面复杂,反射调用非常多 发现模板渲染占用了60%以上的CPU时间。 整个页面输出比较大,平均在100KB左右。
- 16.代码优化实践:sketch模板引擎 • 将Velocity模板直接转成Java类去执行, 将 Velocity语法转成Java语法 • 将方法的反射调用转成直接Java原生方 法 调用 • 减少页面大小,删除空行等无效字符输 出 • 将页面中的字符转成字节输出减少编码 转 换
- 17.代码优化实践:class.forname热点 • Class.forname会导致线程block
- 18.代码优化实践:增加cache • 性能提升5%
- 19.more.. • 对象作为HashMap的key • web.xml配置版本信息可以减少启动时 annotation的扫描时间 • Logger创建没有使用static修饰符导致线程 阻塞 • 少用Thread.getStackTrace() • 正则运算尽量cache
- 20.架构优化 • 数据的动静分离 • 读写的分层校验
- 21.数据动静分离 • 系统的静态化是读系统性能优化的终极必 杀器 • 让用户的请求尽量不要经过Java系统 • 让静态数据放在离用户最近的地方 • 让动态数据尽可能的小
- 22.架构优化实践:读系统的静态化
- 23.架构优化实践:商品详情的静态化 • • • • 每天支持30+亿的PV 可以支持峰值100w的QPS 静态请求单机10000+(物理机) 动态请求单机1500+(16核)
- 24.读写数据的分层校验 看一下全球最大的秒杀系统如何实现
- 25.读写数据的分层校验 • 从一个普通的详情页面跳转过来
- 26.读写数据的分层校验 • 整个页面是cache在用户浏览器 • 如果强制刷新整个页面,也会请求到CDN • 实际有效请求只是“刷新抢宝”按钮
- 27.读写数据的分层校验 • 防止被秒杀器刷掉 • 通过答题分散用户的写请求,控制并发数
- 28.秒杀系统的执行逻辑
- 29.读写数据的分层校验总计 • 先做数据的动静分离 • 将99%的数据缓存在客户端浏览器 • 将动态请求的读数据cache在web端 • • • • 对读数据不做强一致性校验 对写数据进行基于时间的合理分片 对写请求做限流保护 对写数据进行强一致性校验
- 30.链路优化 • 链路优化的目标是整体提升用户访问体验 (低延时) • 从用户的浏览器/APP • 网关/CDN • 服务端(web系统/服务层/数据层)
- 31.用户访问链路 •http://www.webpagetest.org/video/compare.php?tests=140318_M5_7GV%2C140318_Z2 _7CJ&thumbSize=200&ival=100&end=full
- 32.用户访问链路 •http://www.webpagetest.org/video/compare.php?tests=140318_M5_7GV%2C140318_Z2 _7CJ&thumbSize=200&ival=100&end=full • 服务端响应时间只占整个请求路径上的很 小一部分 • PC上更重要的是优化首屏的加载 • 无线端更多的是优化中间的管道
- 33.无线端请求合并 • 无线环境下做请求合并的收益是比较大的,所以会将当前的两次请求 再服务端做ESI合并为一个请求。
- 34.数据量大小 • 无线环境下数据大小对性能影响比PC更加明显,PC从20k到80k增加了 100ms,而无线从20k到80k增加了700ms。所以无线控制页面大小对 性能影响很大
- 35.cache到CDN上 •直接从CDN上获取Cache后的数据性能很好,40k以下的页面只要600ms 左右。相当是直接回源一倍的性能
- 36.一些结论 •无线环境下一次网络请求要明显好于2次以上,减少网络请求次数对首 屏加载性能影响比较明显 •无线环境文件大小与PC环境下文件大小对性能影响的差异不同,无线环 境下数据大小对性能影响比PC更加明显,PC从20k到80k增加了100ms, 而无线从20k到80k增加了700ms。所以无线控制页面大小对性能影响很大 •CDN直接Cache性能提升很大,所以尽量数据Cache到CDN同样对无线是 有效的 •小数据情况下动态加速和直接回主站比较没有明显优势,加上当前动态 加速链路还在调优,所以当前无线数据直接回统一cache比较理想。待动 态加速更加成熟后再走CDN,当前统一Cache和CDN已经做到了动态切换, 所以往CDN也没有成本
- 37.more… • • • • 域名的收敛 DNS本地cache SPDY长连 图片本地cache • 合理的预加载机制
- 38.我们的经验 • • • • 知道短板 减少数据大小 数据分级 减少中间环节、增加预处理
- 39.发现短板 • • • • • 光速 网速 网络结构(交换机/网卡) TCP/IP 虚拟机(内存/cpu/io…) • 应用
- 40.减少数据大小 •HTML •图片 •JSON •Java对象 •请求数 40
- 41.数据分级 41
- 42.数据分级 • 首屏为先 • 重要信息为先 • 次要信息异步加载
- 43.减少中间环节
- 44.减少中间环节 • 减少中间代理 • 减少字符到字节的 转换 • 将变的转换为不变 的,增加预处理
- 45.回顾 1. 面临的挑战 – – 流量挑战 业务复杂度挑战 2. 我们走过的路 代码优化 架构优化 链路优化 3. 我们的经验 – – – – 知道短板 减少数据大小 数据分级 减少翻译、增加预处理
- 46.总结 1. 一定要做应用基线 – – – 性能基线(何时性能突然下降了?) 成本基线(去年双11用了多少台机器?) 链路基线(我们的系统发生了那些变化?) 2. 必须持续有人关注系统的性能 – – – 代码级(提升编码质量) 业务(改掉不合理的调用) 架构和链路级(改进架构) 3. 更通用和批量的解决问题 – – 整合系统之间的调研链路(合并部署) 提升整体机器使用率(弹性部署)
- 47.
- 48. 微博:@淘宝君山webchat:xulingbo0201邮箱:xulingbo0201@163.comhttp://xulingbo.net