构建高效安全的 CDN
如果无法正常显示,请先停止浏览器的去广告插件。
1. 构建⾼高效、安全的 CDN
——阿⾥里 CDN 核⼼心技术揭秘
!
阿⾥里云-核⼼心系统部
朱照远(叔度)
2. ⼤大纲
•
•
•
•
总览!
性能优化!
安全防御!
展望
3. 总览
3
4. 关于阿⾥里巴巴
4
5. 阿⾥里巴巴⾃自⾝身⾯面对的技术挑战
• 2012年淘宝、天猫的交易额为11600亿元⼈人民币!
• 超过Amazon与eBay之和!
• 三个⺴⽹网站流量在全球排名前100(Alexa统计)!
• taobao.com(#9) tmall.com(#18) alibaba.com(#68)!
• 2013年双11⼤大促活动的⼀一些数据!
• 6分钟成交10亿!
• 当天总销售额350.19亿,其中⼿手机淘宝⽀支付53.5亿!
• 成交总笔数1.71亿!
• 全天独⽴立访客4.02亿⼈人
5
6. 阿⾥里CDN概况
•
•
•
•
•
•
全球20⼏几个国家200多个节点!
6Tbps服务能⼒力储备!
1机柜单节点40Gbps服务能⼒力,20万QPS!
2013年双11峰值流量3.4Tbps!
处于业界技术前沿的开源技术研究及开发!
从淘宝CDN到阿⾥里云CDN
6
7. 阿⾥里云CDN
• 特点!
• 稳定快速!
• 安全防护!
• 简单易⽤用!
• 节约成本
7
8. 阿⾥里CDN⼤大图
8
9. 阿⾥里CDN组件分层
9
10. 性能优化
10
11. 阿⾥里CDN的⼤大脑:全局流量调度
11
12. DNS服务器:Pharos
• ⾃自主研发的调度系统,可控性,协议扩展性都更好,也省下
了采购商⽤用设备的成本!
• 单机⾼高性能,⽀支持百万级别的域名!
• ⽀支持多级的策略调度,节点故障不会造成⽤用户的不可⽤用!
• ⽀支持EDNS扩展协议!
• 多系统联动,与安全防御系统,刷新系统,内容管理系统联
动!
• Portal,API,tcheck等多种管理⽅方式
12
13. 实时调度系统:CMOS
• 数据化的调度!
• 流量完全可控,降低了抖动造成的带宽成本!
• LDNS级别、节点级别的流量预测,流量峰值到来前提前
应对!
• 精确、准实时的流量调度!
• 平均误差⼩小于15%,精度可以到5M级别!
• 单个Local DNS级别的调度!
• 5分钟级别的准实时!
• 调度质量、准确度的提升,直接影响着⽤用户体验!
• ⾃自动化的调度!
• 只要描述调度的场景,设定约束条件,⾃自动计算,⽣生成适
应的策略,更新pharos
13
14. Pharos+CMOS架构
14
15. 调度准确性的重要基础:IP地址库
• 数据采集,多个数据源!
• 数据运算与评估(加权投票、评估体系)!
• 对各个数据源的数据质量,设置不同权重,进⾏行投票!
• 权重的设置,是根据数据源质量的评估结果进⾏行设置,质
量⾼高,权重⾼高,否则相反!
• 根据淘宝包裹地址和IP做数据校验!
• 根据上次的结果进⾏行迭代
15
16. 阿⾥里CDN节点系统:内部架构图
• 关键组件!
• LVS做四层负载均衡!
• Tengine做七层负载均衡!
• 安全!
• 业务逻辑处理!
• Swift做HTTP缓存!
• ⾼高性能cache!
• 磁盘(SSD/SATA)
16
17. 四层负载均衡:LVS
• DR模式!
• IN的流量经过LVS,OUT的不经过!
• 负载均衡算法采⽤用wrr!
• 双LVS做Active-Active互备,中间有⼼心跳监测
17
18. 七层负载均衡:Tengine
• 阿⾥里基于Nginx开发的⾼高性能HTTP服务器!
• 已经开源于:http://tengine.taobao.org!
• ⼀一致性hash(consistent hashing)!
• 提⾼高命中率!
• 降低抖动!
• 主动健康检查!
• SPDY v3⽀支持!
• SO_REUSEPORT⽀支持!
• 提⾼高worker进程之间的均衡性!
• 降低CPU使⽤用!
• 热点对象发现
18
19. 阿⾥里HTTP缓存服务器:Swift
• 基础功能!
• HTTP/1.1协议、proxy功能!
• 内存缓存、磁盘存储!
• HTTPS协议关键特性的⽀支持!
• 业务功能!
• 精确purge/dir purge/正则purge!
• 鉴权X-Referer-Acl!
• ESI+gzip!
• 运维和配置相关功能!
• 按照域名配置的功能!
• if、变量⽀支持!
• 磁盘容错。磁盘为只读不再进⾏行写操作;磁盘不可读将磁盘摘掉!
• 丰富的统计信息
19
20. Swift总体架构图
• 核⼼心组件!
• HTTP处理引擎!
• 回源!
• 存储!
• 索引!
• 内容管理⼦子系统
20
21. Swift性能优化点
•
•
•
•
•
•
•
•
•
•
•
多线程事件驱动⺴⽹网络模型!
减⼩小线程间上下⽂文切换!
内存命中,⼀一个请求只需要⼀一个线程来处理!
消除在万兆⺴⽹网卡上⺴⽹网络处理的瓶颈!
304的请求没有Disk I/O!
使⽤用trie树实现快速匹配,减少ACL字符串匹配!
使⽤用完美hash计算header id,实现批量拷⻉贝、删除响应头!
使⽤用libaio(Linux内核AIO)优化IO操作!
⼤大⽂文件分⽚片不同⽚片可以分到所有的磁盘上,可以按⽚片做热点!
七层负载均衡、热点cache!
分级存储和热点迁移
21
22. Swift的⽂文件存储系统
• TCOSS(Taobao Cyclic Object Storage System)!
• 基于Squid的COSS系统做的定制开发!
• ⽀支持裸盘热拔插!
• COSS对象访问导致平均2.13次I/O访问!
• TCOSS对象访问导致平均1次IO访
22
23. TCOSS存储系统
• 没有open和close,尽量少的读写IO
图1 磁盘没满写数据
图2 磁盘写满之后写数据
图3 从磁盘读数据
23
24. Swift热点迁移算法
• 三层存储!
• 内存!
• SSD!
• SATA!
• 根据对象热度决定到哪层
24
25. Tengine+Swift性能优化
• 集群的⼤大⽂文件分⽚片缓存功能!
• 基于HTTP分段压缩算法!
• 利⽤用SPDY的多路复⽤用技术!
• 减少三路握⼿手和慢启动的影响!
• 减少对本地端⼝口的占⽤用
QPS
User CPU
Sys CPU
Sirq CPU
Total CPU
HTTP
33.5K
15.00
16.20
10.04
41.25
SPDY
33.4K
12.83
12.77
8.48
34.10
对⽐比
基本相同
14.47%(优化降低)
21.17%(优化降低)
15.53%(优化降低)
17.33%(优化降低)
25
26. TCP协议栈优化
• 改进措施!
• 基于时间序的丢包发现机制!
• 主动的丢包发现机制!
• ⾃自适应的初始窗⼝口!
• 更激进的拥塞避免算法!
• 更⼩小的连接超时时间
26
27. TCP协议栈优化效果:抗抖动
27
28. TCP优化效果:减少连接时间
28
29. ⻚页⾯面优化
• Trim:去除⻚页⾯面的空格、回⻋车换⾏行、TAB、注释等,以减少⻚页
⾯面的⼤大⼩小!
• 智能gzip:某些⽤用户的浏览器实际⽀支持gzip但是却被防⽕火墙或
者proxy给改掉。智能gzip功能会对这个过程进⾏行测试,从⽽而
允许gzip,减少⽤用户传输内容的⼤大⼩小!
• SDCH:压缩算法优化,降低传输⼤大⼩小!
• Combo:组合多个JavaScript/CSS⽂文件成⼀一个请求,从⽽而减
少请求数⺫⽬目
29
30. 安全防御
30
31. 阿⾥里四层防攻击系统:AliGuard
•
•
•
•
•
基于DPDK之上的⺴⽹网络框架!
⽀支持集群部署!
流量牵引!
四层DDoS攻击防护!
DNS攻击防护
31
32. 阿⾥里七层防攻击:TMD系统架构
32
33. TMD⼀一些关键技术
•
•
•
•
•
•
模块化,如防CC模块、hotpatch模块等!
socketpair 实现多进程间配置更新通知!
共享内存hash表实现⿊黑⽩白名单!
漏桶,令牌桶算法实现QPS限流!
LRU,红⿊黑树实现CC统计算法!
多线程,libev实现⺴⽹网络通信框架
33
34. TMD防CC攻击的⼀一个例⼦子
•
•
•
•
原⻚页⾯面60KB!
攻击9万QPS!
计算带宽41Gbps!
实际节省200倍
34
35. 七层防攻击:Web应⽤用防⽕火墙
• 基于Tengine的模块(WAF)!
• ⾼高效的规则匹配引擎!
• 防⽌止攻击!
• SQL注⼊入!
• XSS!
• Web Shell!
• …
35
36. 可运维性改进
• 海量域名管理!
• Tengine不再依赖配置⽂文件!
• HTTP接⼝口去configserver拿域名对应的配置!
• lazy更新,只记录访问过的!
• 有cache时间!
• 失效接⼝口!
• 不需要reload
36
37. 展望
37
38. 阿⾥里CDN持续优化
•
•
•
•
•
核⼼心应⽤用软件开发!
节点架构优化!
调度系统的精细化调度!
运维⼯工具平台化、系统化!
总⺫⽬目标!
• 给阿⾥里云⽤用户提供稳定、安全、易⽤用、低成本的CDN服务
38
39. 我们在招聘!
• ⼀一流的技术环境,⼀一流的技术挑战!
• 招聘职位!
• 资深CDN系统开发⼯工程师(C/C++)!
• 资深Web服务器开发⼯工程师(C/C++)!
• 资深Java开发⼯工程师!
• 欢迎发送简历到!
• 邮件:shudu@taobao.com!
• 新浪微博:@淘叔度!
• 来往:叔度
39
40.