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