淘宝是如何做秒杀系统的性能优化的?

557 阅读1分钟

秒杀系统的核心优化点有哪些? 秒杀系统的应急预案如何制定? 除了高并发,秒杀还有哪些隐藏的挑战

几百万的用户 并发访

XXXX性能现状

XXXX网站的正常流量情况

  • 并发(单台),高峰期<10;
  • 吞吐量(TPS, 单台) 高峰期, <60;
  • CPU负载Load高峰期,,大部分服务器<1;
  • CPU使用率,一般只占1颗核,平均60%左右;
  • 服务器平均响应时间高峰期,<150ms;
  • 图片总流量带宽1.8G(各网站总合)。

高并发下的风险

  • 网络带宽耗尽
  • 服务器Load飙高, 停止响应。
  • 数据库瘫痪

高并发下的事故

  • 事故:网站运营推广页面弹出1兆大图片导致带宽耗尽
  • 增加审核机制:运营推广增加的图片流量不能超过现有流量的30%
  • 合作媒体推广:迅雷, 暴风影音浮出广告, 导致ZZ集群Crash。

秒杀

  • xxXx.com开业88小时不间断秒杀活动

高并发会对网站性能造成哪些影响?

高并发实例:XXXX.com开业秒杀活动

商业需求

  • 为庆祝XXXX.com开业退出88小时不间断秒杀活动。
  • 每小时整点推出8款商品......
  • 每款商品供168件,每人限批3件,成交人数56人.
  • CCTV黄金广告时间, 各种网络, 平面媒体轰炸, 总广告费:1.5亿。
  • 接到运营通知,距秒杀开始仅仅5天时间.

技术挑战

  • 瞬间高并发
    • 8000并发:预估秒杀在线人数可达8000人。
    • 风险:带宽耗尽。
    • 服务器:崩溃,可以理解成自己给自己准备的D.D.O.S攻击。
  • 秒杀器
    • 第一种:秒杀前不断刷新秒杀页面,直到秒杀开始,抢着下单。

    • 第二种:跳过秒杀页面,直接进入下单页面,下单。

XXX.com秒杀系统:服务器和网络准备

服务器准备(距秒杀开始仅五天时间来不及采购)

  • style服务器( Lighttpd集群):5台
  • 图片服务器(Nginx集群):5台
  • 静态服务器( Apache集群):10台
  • 交易服务器(JBoss动态集群):10台

带宽准备

  • 图片出口带宽上限:2.5G(出口带宽支持10G,但图片服务器集群的处理能力:图片服务集群最大并发处理能力X网站平均图片大小=2.5G)
  • CDN准备: China cache沟通; 借用CCCC CDN

开发一个小系统 比维护一个老系统要容易的多的多的多的多

XXXX.com秒杀系统:设计原则

静态化

  • 采用JS自动更新技术将动态页面转化为静态页面

并发控制,防秒杀器

  • 设置阀门,只放最前面的一部分人进入秒杀系统

简化流程

  • 砍掉不重要的分支流程,如下单页面的所有数据库查询
  • 以下单成功作为秒杀成功标志。支付流程只要在1天内完成即可。

前端优化

  • 采用YSLOW原则提升页面响应速度

xxx秒杀系统 静态化

计数器的实现 参考TT计数器(全局的缓存)

如何保证不超卖

三层阀门 1000 > 100 > 10 10个人才能去下单 这个时候不会出现超卖

当js文件由空 变成 内容填充时 秒杀开始

三道阀门的设计

应急预案

域名分离,独立域名,不影响XXXX原有业务。

  • Style集群:style.XXXX.china.XXXX.com
  • 图片服务器集群:img.XXXX.china.xxxx.com
  • 静态页面集群:page.xxxx.china.xxxx.com
  • 出问题直接把XXXX相关域名卡掉,所有请求跳到万能出错页面。

机动服务器10台,备用。

拆东墙补西墙战略

  • 5天时间来不及采购服务器,因此SA待命,随时准备将非核心应用集群的冗余服务器下线,加入到秒杀集群。

壁虎断尾策略

  • 所有办法均失效的情况下,例如流量耗尽。
  • 非核心应用集群统统停止服务,如资讯,论坛,博客等社区系统。
  • 保住首页,OfferDetail, 旺铺页面等核心应用的可用性。

万能出错页面:秒杀活动已经结束

  • 任何出错都302跳转到此页面
  • 位于另外集群

万幸:最终所有的预案都没有用上