高并发下的网站架构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下单页面:
订单ID,随机 不能直接跳过秒杀Detail页面进入 每个秒杀商品,带预先生成的随机Token作URL 参数 如果秒杀过,直接跳到秒杀结束页面 100次访问上限控制【每件商品只能放入1000人下单】
Web Server 调优 – Apache调优
KeepAliveBiblioteka Baidu关参数调优
其他参数调优
机动服务器10台,备用 拆东墙补西墙战略 壁虎断尾策略
所有办法均失效的情况下,例如流量耗尽 非核心应用集群统统停止服务,如资讯,论坛,博客等社区系统 保住首页,Offer Detail,旺铺页面等核心应用的可用性 5天时间来不及采购服务器,因此SA待命,随时准备将非核心应用集群的冗余服务器下线,加入到秒杀集群
高并发下的网站架构
阿里巴巴中国站性能调优实践
何崚(阿里巴巴中国站架构师)
旺旺ID:maxheling E-mail:max.hel@alibaba-inc.com 【内部讲座资料,请勿外传】
中国站性能现状
中国站网站的正常流量情况
并发(单台) ,高峰期 < 10 吞吐量(TPS,单台) 高峰期,<60 CPU负载 Load 高峰期,<2, 大部分服务器<1 CPU使用率 , 一般只占1颗核,平均60%左右 服务器平均响应时间 高峰期 , <150ms 图片总流量带宽 1.8G(各网站总合)
万能出错页面:秒杀活动已经结束
任何出错都302跳转到此页面 位于另外集群
万幸:最终所有的预案都没有用上
秒杀活动结果
88小时秒杀,坚守阵地,大获成功 秒杀还是被秒杀?终于有了答案 三道阀门设计非常有效,拦住了秒杀器
1688.com 静态集群总并发情况 (首页,秒杀列表,秒杀商品页面)
交易系统集群总并发情况 (下单页面)
高并发下的风险
高并发下的事故
网络带宽耗尽 服务器Load飙高,停止响应 数据库瘫痪
秒杀
事故:网站运营旺旺推广页面弹出,1兆大图片导致带宽耗尽 增加审核机制:运营推广增加的图片流量不能超过现有流量的30% 合作媒体推广:迅雷,暴风影音浮出广告,导致旺铺集群Crash 1688.com开业88小时不间断秒杀活动
设置阀门,只放最前面的一部分人进入秒杀系统
简化流程
砍掉不重要的分支流程,如下单页面的所有数据库查询 以下单成功作为秒杀成功标志。支付流程只要在1天内完成即可。
前端优化
采用YSLOW原则提升页面响应速度
1688秒杀系统:静态化(1)
秒杀商品list和Detail是静态Html页面
1688秒杀系统:静态化(2)
性能大幅提升,中国站 全站下线1/3应用服务器
约一百台,明年不用采购新机器
架构更轻量, 配置更简单 应用更无状态化, 开发和维护的福音 更加安全 中国站应用服务器升级项目: Apache2.2+Mod-Proxy+Jetty7.1.5 与中国站现有架构性能对比
改进二:前端优化自动化
中国站服务器响应时间<150ms, 但Offer Detail页面用户等待时间5s,大部分时间耗在路上(资源请求和网络传输)
图片自动压缩 (CMS自动压缩) Cookies服务化(控制cookies的大小) 中国站前端延迟加载框架SmartLoad(只加载首屏数据) Google mod_pagespeed module 自动压缩图片,静态资源,智能浏览器缓存技术 Google Diffable (增量下载静态资源技术)
技术挑战
瞬间高并发
秒杀器
8000并发:预估秒杀在线人数可达8000人 风险:带宽耗尽 服务器:崩溃,可以理解成自己给自己准备的D.D.O.S攻击 第一种:秒杀前不断刷新秒杀页面,直到秒杀开始,抢着下单 第二种:跳过秒杀页面,直接进入下单页面,下单
1688.com秒杀系统:服务器和网络准备 服务器准备
高并发对网站性能的影响
并发数对吞吐量的影响
并发数对服务器平均请求响应时间的影响
并发数对用户平均请求等待时间的影响
高并发实例:1688.com开业秒杀活动
商业需求
为庆祝1688.com开业退出88小时不间断秒杀活动 每小时整点推出8款商品,拖拉机,牛,马桶,沙发…… 每款商品供168件,每人限批3件,成交人数56人 CCTV黄金广告时间,各种网络,平面媒体轰炸,总广告费:1.5亿 接到运营通知,距秒杀开始仅仅 5 天时间
(距秒杀开始仅五天时间来不及采购)
style服务器(Lighttpd集群):5台 图片服务器(Nginx集群) :5台 静态服务器(Apache集群) :10台 交易服务器(JBoss动态集群):10台
•
带宽准备
图片出口带宽上限:2.5G
(出口带宽支持10G,但图片服务器 集群的处理能力:图片服务集群最大并发处理能力 X 网站平均图片大小 = 2.5G)
改进三:架设镜像站组建山寨CDN
中国站青岛镜像站项目
改进四:采用反向代理 加速核心页面
在Offer集群前部署Squid反向代理集群
Offer Detail的Squid反向代理改造
基于消息的Squid缓存更新机制
改进五:海量数据的透明垂直切分
中国站性能优化领域立项中
不断增加的表,是 应用的沉重负担……
改进一:采用更轻量/快速的服务器(1)
采用Lighttpd 替代 Apache 杀手锏(AIO)
改进一:采用更轻量/快速的服务器(1)
Lighttpd 1.5 VS Apache2.2.4
小页面性能(100K)
http_load -verbose -timeout 40 -parallel 100 -fetches 500 http-load.10M.urls-100M
大页面性能(10M)
改进一:采用更轻量/快速的服务器(1) 性能关键:Web Server 的高性能I/O
Apache1.3
Apache2.2 支持
注意:sendfile()和AIO 的操作系统相关性: 依赖 高版本Linux操作系统
Lighttpd1.5
改进一:采用更轻量/快速的服务器(2)
中国站应用服务器升级项目,采用Jetty7.1.5 替代 JBoss4.0.5GA
关闭cookies-log日志 打开Linux sendfile() 关闭无用的module
HostnameLookups 设为off, 对allowfromdomain等后的域名不进行正向和反向的dns解析
mod_Gzip (秒杀页面,非图片html文本所占流量比重可忽略不计,zip意义不大), mod_Beacon, mod_hummock(等待反应过来,秒杀已经over了)
Web Server 调优 – JBoss调优
Mod-jk worker 调优
JBoss AJP Connector
Tomcat APR 设定
秒杀静态页面优化
图片合并
8张图片合并成1张,css偏移展示 减少HTTP请求数,减少请求等待数 减少发送cookies的量
HTML内容压缩 图片压缩:图片Bytes < 长X宽/2250 HTML Header Cache-Control设置 CSS,JS 精简
二跳页面的优化
1688.com其他页面
前端优化: Yslow规则调优
减少http请求,合并JS,CSS,图片,充分利用浏览器缓存
图片压缩,公式: 避免发送cookies
交易系统优化
普通订单管理列表和1688秒批订单管理列表分离 禁止用模糊查询功能
应急预案
域名分离,独立域名,不影响中国站原有业务
Style集群: style.1688.china.alibaba.com 图片服务器集群:img.1688.china.alibaba.com 静态页面集群:page.1688.china.alibaba.com 出问题直接把1688相关域名卡掉,所有请求跳到万能出错页面
CSS,JS 精简到极致,部分直接写在页面中,减少Http请求次数
下单页面优化
数据库操作:全部砍掉
原下单页面要访问8次数据库,全部砍掉
秒杀流程精简
砍掉填写或选择收货地址,放在秒杀成功后填写 砍掉调用是否开通支付宝接口,秒杀首页文案提示必须开通
采用内存缓存
秒杀Offer数据,支付宝相关信息,缓存
交易系统性能优化
1688秒杀系统:组成
简单系统:
三个页面组成:秒杀商品列表,秒杀商品介绍,下单
【1688.com静态集群】 下单成功后,进入支付宝系统,走支付流程
【中国站交易动态集群 china.alibaba.com】
1688.com秒杀系统:设计原则
静态化
采用JS自动更新技术将动态页面转化为静态页面
并发控制,防秒杀器
速度与激情!Welcome to join US! (B2B 技术部- 高性能网站领域)
Wiki :http://share.b2b.alibabainc.com/index.php/%E6%80%A7%E8%83%BD% E4%BC%98%E5%8C%96 群:101228600
限于时间,先和大家交流到这里 Welcome to join US (高性能网站领域) Thanks!
CDN准备:Chinacache沟通;借用Taobao CDN
1688.com秒杀系统:架构目标
1.图片网络带宽:1.0G
新增图片带宽:必须控制在 1.0G 左右 每件商品秒杀页面的图片总大小不得超过: 1000000/(1000*8) = 125K/每商品
2.网站并发:
单件商品并发:1000 【来自运营的预估】 总并发: 8(件商品)X 1000(人/商品)=8000
交易系统调优目标:
并发 下单页面 (优化前) 下单页面 (优化后) 20 40 TPS 100 400
关闭 Keep Alive(分析交易系统accesslog,用户在短时间内连续点击概率很低) JVM优化 优化CMS 垃圾回收器的参数 消灭 Top10 Bottlenecks
Velocity参数调优 采用DBCP1.4 替换C3P0 Offer 产品参数的XML解析
秒杀商品列表/秒杀商品介绍页面,如何判断秒杀开始否
答案: valid-offer.js
三道阀门的设计
阀门:基于TT的计数器
序号 1 2 3 阀门上限
限制进入秒杀页面 ,1000 限制进入下单页面 ,100 100 限制进入支付宝系统,56
秒杀器的预防
秒杀Detail页面
URL:随机 秒杀前2秒放出,脚本生成,秒杀前 1000次访问上限控制【每件商品只能放入1000人浏览】