说明
讲师:李智慧
架构师要站顶层高度思考问题:Linux、JVM为啥这么做架构设计,这么做的好处是什么何系统,都是软件,跟普通的软件没有什么区别,要找到架构设计的美。
互联 最主要解决大量流量访问的场景下,解决系统高性能的问题。这就是为什么需要这么多方法去解决遇到的高性能问题。
秒杀
秒杀:有限的商品,很多人过来购买。秒杀本身就是一种营销活动。
2009年左右,淘宝搞过1元秒杀买宝马汽车。低配的宝马20万左右,吸引上百万的用户过来抢,平均下来每个用户的广告成本也就几毛钱甚至几分钱,是相当划算的。
案例:XXX 站性能现状(2009年左右)
吞吐量 = 1/响应时间 * 1000 * 并发数;
XXX 站的正常流量情况
- 并发(单台),高峰期 < 10;
- 吞吐量(TPS, 单台)高峰期,<60;
- CPU负载 Load 高峰期,<2, 大部分服务器 <1;
- CPU使用率,一般只占1颗核心,平均60%左右。
- 服务器平均响应时间 高峰期,<150ms;
- 图片总流量带宽 1.8G(各 站总和).
高并发下的风险
- 络带宽耗尽。(一张图片几百k,上万人访问,就上千M的图片。)
- 服务器 Load 飙高,停止响应。
- 数据库瘫痪。
高并发下的事故
- 合作媒体推广:迅雷,暴风影音浮出广告,导致 ZZ 集群 Crash。
秒杀
- XXX.com 开业 88 小时不间断秒杀活动。
温馨提醒:
首页一般不用访问数据库,因为访问量太大了。如果要做个性化推荐,可以通过搜索引擎返回,也不用访问数据库。
高并发对 站性能的影响
XXX.com 秒杀系统:设计原则
静态化
- 采用 JS 自动更新技术将动态页面转化为静态页面。(为运营人员开发,上传秒杀商品信息,转换为静态页面的运营系统。)
并发控制,防秒杀器
- 设置阀门,只放最前面的一部分人进入秒杀系统。
简化流程
- 砍掉不重用的分支流程,如下单页面的所有数据库查询。
- 以下单成功作为秒杀成功标志。支付流程只要在 1 天内完成即可。
前端优化
- 采用 YSLOW 原则提升页面的响应速度。
XXX 秒杀系统:静态化(1)
秒杀商品 List 和 Detail 是静态的 HTML 页面
三道阀门的设计
阀门:基于 TT 的计数器
秒杀器的预防
秒杀 商品详情页面
- URL: 随机
- 秒杀前2秒放出,脚本生成,秒杀前。
- 1000次访问上限控制【每件商品只能放入1000人流量】。
下单页面:
- 订单ID,随机。
- 不能直接跳过秒杀 商品详情页面 进入。
- 每个秒杀商品,带预先生成的随机 Token 作 URL 参数。
- 如果秒杀过,直接跳到秒杀结束页面。
- 100 次访问上限控制 【每件商品只能放入 1000 人下单】。
Web Server 调优 – Apache 调优
- KeepAlive 相关参数调优
- 其它参数调优: HostnameLookups 设为 off,对 allowfromdomain 等候的域名不进行正向和反向的 dns 解析。
- 关闭 cookies-log 日志
- 打开 Linux sendfile()
- 关闭无用的 module
mod_Gzip
秒杀页面,非图片 HTML 文本所占流量比重可忽略不计,zip意义不大。
mod_Beacon
mod_hummock (等待反应过来,秒杀已经 over 了)
Web Server 调优 – JBoss 调优
Mod-jk worker 调优
Tomcat APR 设定
秒杀静态页面优化
- 图片合并:
- 8张图片合并为 1张,CSS 偏移展示。
- 减少 HTTP 请求数,减少请求等待数。
- 减少发送 Cookies 的量。
- HTML内容压缩
- 图片压缩:图片
- HTML Header Cache-Control 设置
- CSS, JS 精简
- xxx服务器响应时间 < 150ms, 但Offer Detail 页面用户等待时间 5s,大部分时间耗在路上(资源请求和 络传输)。
- 图片自动压缩(CMS自动压缩)。
- Cookies 服务化(控制Cookies的大小)。
- XXX 前端延迟加载框架 SmartLoad (只加载首屏数据)。
- Google mod_pagespeed module: 自动压缩图片,静态资源,智能浏览器缓存技术。
- Google Diffable (增量下载静态资源技术)。
- 一、性能测试
- 新增:当有新的数据需要创建索引时,原来的段不变,选择新建一个段来存储新增的数据。
- 删除:当需要删除数据时,在索引文件新增一个 .del 的文件,用来专门存储被删除的数据ID。当查询时,被删除的数据还是可以被查到的,只是在进行文档链表合并时,才把已经删除的数据过滤掉。被删除的数据再进行段合并时才会被真正被移除。
- 更新:更新的操作其实就是删除和新增的组合,现在 .del 的文件中记录旧数据,再在新段中添加一条更新后的数据。
- 索引分片,实现分布式
- 索引备份,实现高可用。
交易系统性能优化
改进一:采用更轻量 / 快速的服务器 (1)
采用 Lighttpd 代替 Apache 杀手锏 (AIO)
改进二:前端优化自动化
淘宝下单高峰在上午10点钟左右。看来很多人上班第一件事情,就是上淘宝。
宅米 性能优化实践
爬虫系统架构
文档矩阵与倒排索引
倒排索引
带词频的倒排索引
Lucene 架构
Lucene 索引文件准实时更新
索引有更新,就需要重新全量创建一个索引来替换原来的索引。这种方式在数据流很大时效率很低,并且由于创建一次索引的成本很高,性能也很差。
Lucene 中引入了段的概念,将一个索引文件拆分为多个子文件,每个子文件叫做段。每个段都是一个独立的可被搜索的数据集,索引的修改针对段进行操作。
为了控制索引里段的数量,我们必须定期进行段合并操作。
、Lucene 缺点:不支持分布式。
Elastic Search 架构
Elastic Search 是支持分布式的搜索引擎。因为其速度快,得到很多公司的热捧,发展前景很好。
总结
问题的洞察力才是做架构师的关键。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!