极客大学架构师训练营 秒杀 搜索引擎 爬虫 Lucene Elastic Search 第18课 听课总结

说明

讲师:李智慧

架构师要站顶层高度思考问题: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 设定

秒杀静态页面优化

  1. 图片合并:
  • 8张图片合并为 1张,CSS 偏移展示。
  • 减少 HTTP 请求数,减少请求等待数。
  • 减少发送 Cookies 的量。
  1. HTML内容压缩
  2. 图片压缩:图片
  3. HTML Header Cache-Control 设置
  4. CSS, JS 精简

    交易系统性能优化

    改进一:采用更轻量 / 快速的服务器 (1)

    采用 Lighttpd 代替 Apache 杀手锏 (AIO)

    改进二:前端优化自动化

    • xxx服务器响应时间 < 150ms, 但Offer Detail 页面用户等待时间 5s,大部分时间耗在路上(资源请求和 络传输)。
    • 图片自动压缩(CMS自动压缩)。
    • Cookies 服务化(控制Cookies的大小)。
    • XXX 前端延迟加载框架 SmartLoad (只加载首屏数据)。
    • Google mod_pagespeed module: 自动压缩图片,静态资源,智能浏览器缓存技术。
    • Google Diffable (增量下载静态资源技术)。

    淘宝下单高峰在上午10点钟左右。看来很多人上班第一件事情,就是上淘宝。

    宅米 性能优化实践

    • 一、性能测试
    • 爬虫系统架构

      文档矩阵与倒排索引

      倒排索引

      带词频的倒排索引

      Lucene 架构

      Lucene 索引文件准实时更新

      索引有更新,就需要重新全量创建一个索引来替换原来的索引。这种方式在数据流很大时效率很低,并且由于创建一次索引的成本很高,性能也很差。

      Lucene 中引入了段的概念,将一个索引文件拆分为多个子文件,每个子文件叫做段。每个段都是一个独立的可被搜索的数据集,索引的修改针对段进行操作。

      • 新增:当有新的数据需要创建索引时,原来的段不变,选择新建一个段来存储新增的数据。
      • 删除:当需要删除数据时,在索引文件新增一个 .del 的文件,用来专门存储被删除的数据ID。当查询时,被删除的数据还是可以被查到的,只是在进行文档链表合并时,才把已经删除的数据过滤掉。被删除的数据再进行段合并时才会被真正被移除。
      • 更新:更新的操作其实就是删除和新增的组合,现在 .del 的文件中记录旧数据,再在新段中添加一条更新后的数据。

      为了控制索引里段的数量,我们必须定期进行段合并操作。

      、Lucene 缺点:不支持分布式。

      Elastic Search 架构

      Elastic Search 是支持分布式的搜索引擎。因为其速度快,得到很多公司的热捧,发展前景很好。

      • 索引分片,实现分布式
      • 索引备份,实现高可用。
      • 总结

        问题的洞察力才是做架构师的关键。

        声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年7月4日
下一篇 2020年7月4日

相关推荐