可 展扩 Web 架 探构 讨
echouzhou
高性能网站 秒能 理成千上万个 求, 是每 处 请 关键
Scalability
良好的可伸 性缩
Caching
无 不在的 存处 缓
Scalability
是系 不断 用 数量的能力统适应 增长 户
性能平稳
均衡、容负载 错
接入保 、护 Cache 冲缓
容容易扩
所有 件都 当可以 展组 应 简单扩
无共享架构
可控状态
Vertical Scaling
更大的服 器务
更快的 CPU
展性扩 / 价格比很差
超 算机都是平行 展的级计 扩
!
可伸 性缩 vs. 高性能
在系统可扩展的前提下提高性能
Web 的可 展性扩
Web 服 器务
均衡负载
南北互通
Web 服 器务
Web 服 器的务 选择
Apache
不适合静 文件的支持态
内存、 CPU 占用比 大较
非常成熟,功能强大,配置丰富
TWS
架 中心自主构 开发
对 CGI 的支持比 独特较
CGI 性能非常好
Qhttpd
公司内部 件软
只适合静 文件的支持态
非常 定可靠稳
Lighttpd 、 Nginx
内存、 CPU 小开销
静 文件性能 出很多态 胜
越来越多的网站 始用它开
性能改进
、静 内容分动态 态 开
静 文件:态 qhttpd/lighttpd/nginx
内容:动态 Apache
某些静 文件 :态 压缩传输 lighttpd 的 mod_compress
内容性能提升动态
传统 CGI
PHP 、 Rails 、 SSI
FastCGI
TWS CGI
FastCGI
出 很早的技现 术
少减 传统 CGI 用的消耗调
基本保持源代 的兼容性码级
#include <stdio.h>
#include <fcgi_stdio.h>
While (FCGI_Accept() >= 0) {
// CGI 代码
}
FastCGI 的配置
均衡技负载 术
均衡负载 (Load Balancing)
是可 展性的扩 关键
提高网站的可用性
接入保 、失效护 检测
DNS 轮询
是最 的 均衡简单 负载
域名 置多条设 A ,记录 DNS 轮询
硬件 均衡负载
Cisco
Alteon
Foundry
F5
件 均衡软 负载
免 解决方案费
Linux Virtural Server
基于内核 , 通 修改过 TCP/IP 数据 文 均衡, 保报 实现负载 确
可用性的守 程护进 ldirectord
高性能,部署相 麻 ,不便于 察对 烦 观
HAproxy
基于 layer 7
效率相 低,部署容易,有对较 web 界面便于 察观
Layer 4
TCP 的交层 换
根据源 / 目的地址和端口进
行 均衡负载
均衡策略负载
round-robin
最少 接连
Layer 7
基于 HTTP 求请
最常用的是 URL 分发
南北互通
双 服 器线 务
多个 IP 地址
一个 IP 地址,多个路由
深南花 :园
信、网通、教育网三通机房电
北方网通 深 网通仍然很慢访问 圳
动态 DNS
根据来自不同 ISP 的用 接入到就近的服 器户 务
公司自己 的开发 动态 DNS 件软
自己 的开发 DNS 服 器务
IP 地址 和库 IP 速测
存在 分布的业务 问题
CDN
Content Delivery Network
就近接入
代理 存缓
域名解析 加增 CNAME 即可
Caching
Web Cache 的类型
器浏览 Cache
私有 存缓
可以 存“缓 private” 响应
Cache Proxy
Surrogates - 存代理缓
Web 加速
共享 存缓
只能 存“缓 public” 响应
一些数据
多至 43% 的 Web 求 不可 存的内容请 访问 缓
Web 存命中率缓 为 40% 左右是比 的较现实
面静 化页 态
理想状 :态
静 化所有 面—— 做不到态 页 实际
如何静 化?态
由模板生成静 面态页
定 或有更新时 时
困 :难
成千上万个 面的静 化不页 态 现实
面有 体,不适合静 化页 变 态
多台服 器 麻务 维护 烦
面既包含静 内容,又包含 内容页 态 动态
面 存页 缓
按需静 化态
前端 cache 存 面内容储动态页
mod_cache
Squid
Varnish*
遵循 HTTP 的 Cache 范规
可精 控制细 Cache
Expires
Cache-control
合适 GET 类 CGI 求请
HTTP 的 Cache 范规
要充分发挥 Cache 的效用,就必 了解须 HTTP
Cache 范和机制规
条件 求请
Expiration
Cache-control
Cookie
条件 求请
If-Modified-Since/Last-Modified
1. 服 器 :务 响应
200 OK
Last-Modified: …
2. 器 求浏览 请
GET … HTTP/1.1
If-Modified-Since: …
3. 服 器务 响应
200 OK 或
304 Not Modified
条件 求请 (2)
If-None-Match / ETag
1. Server 响应
200 OK
ETag: abcdef
2. 器 求浏览 请
GET … HTTP/1.1
If-None-Match: abcdef
3. Server 响应
200 OK 或
304 Not Modified
Expiration
Expires
置 象的 失效设 对 绝对 时间
是 HTTP/1.0 范规
max-age
是 Cache-control 的一个指令
置 象的年 (秒数)设 对 龄
是 HTTP/1.1 范规
max-age 先于优 Expires
Cache-control
no-cache=[Set-cookie]
器和浏览 squid 都不可以 存缓
再次使用前需 送条件 求发 请
max-age=NNN
指定 存有效 (秒)缓 时间
public
器和浏览 squid 都可以 存缓
max-age 指定 存缓 时间
private
只有 器可以 存浏览 缓
Cookies
HTTP 求携请 带 Cookies:
Cookie: name=profile,domain=www.bigmoney.com,
path=mysecrets.html, cookie=day-trader
HTTP 置响应设 Cookies:
Set-cookie: name=profile,domain=www.bigmoney.com,
path=mysecrets.html, cookie=day-trader
Cached content
需要的 候才 置时 设 Cookies—— 太理想化
Squid 添加一个 IMS 头
一些典型的 Cache 景场
返回个人信息
Cache-control: private, max-age=NNN
CGI 写操作
Cache-control: no-store, no-cache
CGI 取状 等信息获 态
Cache-control: public, max-age=NNN
QQvideo 践分享实
QQvideo Web 架构图
践要点实
3DNS + HAProxy 均衡、接入保实现负载 护
、静 文件分用不同服 器动态 态 务
首 静 化页 态
某些 繁 用频 调 CGI : Squid 存缓
播放:视频 CDN 加速
略 :缩 图 Squid 存缓
Web 数据 存:缓 Memcached
QQvideo 的一些数据
HAProxy :
每天转发 HTTP 求:请 5500 万
CPU 占用率: 10~20%
<增加 片>图
片图 Squid:
命中率: 90%
<增加 片>图
Memcached :
命中率: 40% 左右
<增加 片>图
相 件介关软 绍
HAProxy
http://haproxy.1wt.eu
特色
L7 交换
采用 epoll ,效率很高
配置 活,部署很容易简单灵
Graceful restart – 不影响已有 接连
Web 控界面 – 清晰直监 观
内容分 (发 Content Switching)
ACL 定义规则
ACL 活 合 分灵 组 选择 发 backend
求请 / 响 改写应头
均衡和 保负载 过载 护
均衡策略:加权负载 round-robin 、 Source 、 URL
Sticky sessions
接入 接数限制连
后端服 器健康务 监测
HAproxy 与 LVS 比较
HAProxy 效率不如 LVS
User 级 vs. 内核级
HAProxy 部署简单
一个程序 vs. 内核 patch
HAProxy 功能 富丰
L7 vs. L4
HAProxy 性能可 足大部分网站需要, 到 大满 达 较 规
模 可改用时 LVS.
HAproxy 配置
URL 分发规
则
多个 server
池
Sticky sessions
健康检测和接入
限制
HAProxy Web 界面
Memcached
http://www.danga.com/memcached
高性能的,分布式的内存 象 存系对 缓 统
Epoll ,效率高驱动
高效的内存管理机制
存 象可 置缓 对 设 Expire 时间
使用 ,部署更简单 简单
万金油
Web Cache
昵称 存缓
用 看 史户观 历
后台管理系统
用 操作 率控制户 频
Memcached 行状况运
Squid
http://www.squid-cache.org
有力的 争者竞 Varnish!
Squid 控监
!谢 谢

腾讯大讲堂08 可扩展web架构探讨