410 likes | 643 Views
从宏观到微观的 CDN 之道. 焦胜强. 目录. 引子 宏观篇 微观篇. 引子 什么是 CDN 拥挤的传统结构 CDN 的目的. 什么是 CDN. 名称释义 Content Delivery Network CDN 的几个构成部分 内容调度 :GSLB,SLB 内容管理 :cache 源站 :storage 最简单的 CDN 一台负责全局负载均衡的 DNS 几台 Cache 分布于不同节点. 拥挤的传统结构. 传统的内容服务网络结构. CDN 的主要解决的问题. 带宽 距离. 宏观篇. 传统架构展示 51 图片频道的特点
E N D
从宏观到微观的CDN之道 焦胜强
目录 • 引子 • 宏观篇 • 微观篇
引子 • 什么是CDN • 拥挤的传统结构 • CDN的目的
什么是CDN • 名称释义 • Content Delivery Network • CDN的几个构成部分 • 内容调度:GSLB,SLB • 内容管理:cache • 源站:storage • 最简单的CDN • 一台负责全局负载均衡的DNS • 几台Cache分布于不同节点
拥挤的传统结构 • 传统的内容服务网络结构
CDN的主要解决的问题 • 带宽 • 距离
宏观篇 • 传统架构展示 • 51图片频道的特点 • 我们需要什么样的方案
传统的架构 • 解析层(DNS) • Bind • 3DNS • 其他 • 调度层(Balancer) • Netsclaer • F5 • Array • LVS • 服务层(应用服务) • WEB • Cache • FTP
传统的CDN架构示意图 • 图1
传统的CDN架构示意图 • 图2
有什么问题吗? • 每个cache都保存了同样的数据 • 宝贵的存储被浪费了
51图片频道的特点 • 源数据巨大,几百T • 访问热点不明显 • 每个用户的数据都有可能被别的用户访问 • 复杂的用户关系网络所表现的:每个人都是主角 • 访问量巨大 • 传统的CDN架构已经表现吃力
我们需要什么样的方案 • 扩展性 • 可用性 • 冗余 • 高效 • 大量 • 易用性 • 全部的开源软件 • 标准的协议使用 • 全面的资料介绍
相对于传统架构,我们必须做出改变 • 解析层 • 组合调度1层 • 组合调度2层 • 服务层
我们增强后的架构 LVS Standby Nginx (balancer) Nginx (balancer) Nginx (balancer) Squid (cache) Squid (cache) Squid (cache) Squid (cache) Squid (cache) Origin server (51DFS)
为什么可以这样? • 同样的算法总是得到同样的结果 • 多台具有相同算法的机器共同工作 • 唯一的object将被保存在唯一的cache
微观篇 • 各个细节的实现部分解析层(GSLB) • 调度层(SLB) • 服务层(Cache)
依靠DNS来实现GSLB • 就近访问:让用户访问距离自己最近的IDC • 负载均衡:多个IDC同时提供服务 • 故障转移:单个IDC出现问题时,用户不受影响
改进的组合实现的调度层(SLB) • 负载均衡 • 故障转移 • 高效可用
LVS有多强 • DR模式的优势 • LVS只负责调度请求,服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量 • 硬件平台的极限 • 网卡接口PCI 2.1总线的速率(DELL 1950): • 总线位宽是64位,总线频率66MHz,每时钟传输1组数据,它的带宽为508.6MB/s,即4068.8Mbps • 千兆以太网,一个线速端口的包转发率(fps)为1.488M • ((4CRC+46负荷)+2byte类型+6源MAC+6目的MAC) + 12帧间隙 + 8 MAC前导位 = 64 • 接近于操作系统的转发性能
为什么使用Nginx Proxy • 高并发连接(epoll) • 所支持的FD上限是最大可以打开文件的数目 • 具体数目可以cat /proc/sys/fs/file-max,跟系统内存挂钩 • max_clients = worker_processes * worker_connections/4 • WAN环境中存在大量的慢速连接时性能无明显下降 • 士兵站岗的故事 • 高性能 • We are currently using Nginx 0.6.29 with the upstream hash module which gives us the static hashing we need to proxy to varnish. We are regularly serving about 8-9k requests/second and about 1.2Gbit/sec through a few Nginx instances and have plenty of room to grow! -- Wordpress.com • 我们的实际使用效果 req 1000+/s,bw 500M+ • 低内存占用
为什么使用Nginx Proxy • 灵活的配置 • 故障切换的实现 • proxy_connect_timeout 2; • Buffer控制 • proxy_buffers 64 4k; • 策略实现 • 多域名合并 • proxy_set_header Host "images22.51.com";
Nginx Proxy所实现的URL HASH • 模块 • ngx_http_upstream_hash_module • 代码片段
Nginx Proxy所实现的故障转移 • 部分代码
服务层--- cache的服务细节 • Cache数据的获取 • Push(preload) • Pull • Squid的cache类型 • Mem • disk • Squid 结构 • Hash Table • 磁盘cache的2级hash目录
影响squid效率的几个因素 • 源数据过大 • 磁盘IO • 集群下的单台失效
页面的可缓存条件 • Etag • Max-age • Expires • Last-Modified • Refresh_pattern
未来的几个工作 • GSLB智能化 • 一致性HASH • 平滑扩展的首要技术 • 主动健康检查
大盈若冲,其用不穷 • Cache的精神 • 学习的态度
部分资料 • http://www.phparticle.net/bbshtmldata/8493/ • http://www.leftworld.net/wenzhang/show/7331.html • http://blog.csdn.net/rstevens/archive/2007/10/30/1858067.aspx • http://www.nginx.net/