文字内容
1. cdn的设计原理 - xiaorui.cc - 峰云就她了
2. introduce 什么是 CDN, 内容分发⽹络 为什么要用cdn ? cdn的关键组件 cdn 内部实现原理, 架构拓扑及优化⽅法 源站层面的cdn架构及优化 ⽹页层面的cdn架构及优化
3. 涉及的内容 cdn dns brower server HTML
4. cdn基本原理 内容缓存到不同地区的缓存服务器 实现就近访问原则 通过dns view 和 load status调度到不同的边缘节点
5. cdn target 构建边缘节点, 解决最后”⼀公里” 智能调度 (负载均衡, 故障屏蔽 , 就近访问) 智能路由 (寻找最优访问链路) 安全防护 (强⼤带宽, 边缘计算能⼒)
6. why use cdn ? DNS static A 2.2.2.2 * A 1.1.1.1 * A 2.2.2.2 90%流量 : static zone 50 ms client - QD html view xiaorui.cc/a.jpg xiaorui.cc/b.jpg /c.jpg static.xiaorui.cc/a.jpg 10 ms handler request cost cdn - QD 2.2.2.2 30 ms source - BJ 1.1.1.1
7. root Edge Cache SH .com/.xxx x NS Edge Cache BJ dns scheduler LB source Edge Cache GZ Ldns
8. “ Http Headers , Abort cache http protocol”
9. http header Expires vs Cache-Control max-age 200 from cache vs 304 when F5 vs ctrl + F5 , add args in request header F5 —> Cache-Control:'>Cache-Control: max-age=0 ; If-Modified-Since。。。 Ctrl F5 —> Cache-Control:'>Cache-Control: no-cache Pragma: no-cache Last-Modified + If-Modified-Since vs Etag + If-None-Match
10. http header no-cache vs no-store in reuqest header no-cache , not get cache data no-store , (CTRL + F5) None in response header no-cache , Allow cache action chrome : reqeust again , Check 304 every time. ie9/FF : request again , Not cache data no-store , Prohibit cache action ,get file from source, All node not cache .
11. http header X-Cache : HIT from xd33-98.sina.com.cn X-Forwarded-For : client_ip proxy1_ip proxy2_ip Via : cache42.l2nu16-1[0,200-0,H], cache6.l2nu16-1[8,0] Age : cache age Range : bytes=500-999
13. “ schduler zone contains view dns and each cache load ”
14. scheduler smart dns view ip db edns rule priority
15. scheduler collect 可用性探测 Host存活 Service存活 性能探测 流量 cpu / mem disk iops 服务注册
16. dns cluster root dns cc dns RTT指标 xiaorui.cc NS2 LVS xiaorui.cc NS1
17. anycast dns cluster 北京 1.1.1.1 对坑攻击, 区域隔离 ! 青岛 1.1.1.1 上海 1.1.1.1 利用一个/多个 bgp as 号码在不同的地区广播相同的一个ip段 anycast就是不同的服务器用了相同的ip地址
18. “ cache server optimize”
19. simple cdn diff 平台 squid varnish 存储 性能 disk/mem 2.7单核 > 3.x多 核 mem 极⾼ 共享存储 功能 多级存储 acl, icp, rate等 等 只能内存 基本的acl, purge nginx mem/disk ⾼ 多级存储 功能多, 可 module扩展 ats mem/disk 很⾼ 裸盘多级存储 功能强⼤, icp
20. proxy network io epoll return return buffer source mem
21. Cache Load Balance 选型 LVS vrrp LVS LB (Nginx/Haproxy) LB (Nginx/Haproxy) Ats Ats Ats Ats lvs dr提⾼流量 nginx/haproxy 引流 ⼀致性hash提⾼hit 探测⾼可用 移除lb 镜像站 cache server上报状态
22. ⼆级cache and icp L1 L1 L2 percent ? L2 icp source
23. cdn secure + secure waf ddos 流量清洗 cc limit rate or drop 验证码页面 js insert cookie token , cdn diff token
24. ddos & cc 伪造源IP ⼤字节SYN 混乱型ACK Connection Flood 引流 正常状态 清洗 mpls 回注 SYN 反查路由 success conn proxy 透传 ACK syn cookie ES limit conn active counter ip rate limit js input token cookie js 302
25. pull vs push pull ops submit urls ,then cdn requests the urls. push cdn push files to cdn store quickly push cache files with p2p use icp protocol in the same zone
26. 多级cache hot mem ssd disk cold 推荐百分比 mem: ssd: sata = 1: 10: 100
27. 数据结构 顶层hash map判断该⽂件的level位置 每个level cache都有数据位置表及Lru表 lru = double linked list + hash map hash map存放linked node Lru 长度是由level 字节动态控制
28. 数据结构 顶层hash定位level memory ssd sata Hash ( List’ s node ) —— —— —— —— —— —— —— —— Lru deque —— —— —— —— —— —— —— —— 调整时需先copy后del 置换空间 15 % 预留空间 5 % —— —— —— —— —— —— —— ——
29. 多级cache 起初 mem —> ssd —> disk 使用Lru淘汰冷⽂件, 超过阈值后主动淘汰, 定时调节各level cache 不使用raid, 如磁盘不可读, 摘掉 cache server内置disk的调度⼀致性hash ⼤⽂件直接到disk coss 小⽂件, aufs ⼤⽂件. 可同时使用 裸盘的急速体验
30. 扩展 purge 盗链 (refer, token) 限速 for source server for client ⽂件合并及压缩
31. cdn 优化 选择性的ignore (reload \ no-cache) 304不⾛磁盘 使用libaio (内核AIO) 视频分片 cdn server ——> web server , spdy + tfo 万兆⽹卡是标配 https装载卸载, ssl 加速卡 ? 使用trie树快速匹配, (purge, ⿊名单, ip View)
32. “ soruce server frame optimize ”
33. simple bgp describe un 125.201.14.13/30 解决单ip多线路 !!! gateway 通过 125.201.14.14/30 AS 1111 * 小白 * AS 2222 ct 203.118.14.9/30 AS 9504 bgp ip range 通告 203.118.14.10/30 lualu
34. source zone ospf lvs http://static.xiaorui.cc/mm.jpg LB fastdfs gfs ceph gluster fuser/api file server web
35. “ html code optimize ”
36. 源站优化 动静分离 after end template + fore-end mvc 优点 并⾏开发调试 服务化 后端模板渲染及传输成本 缺点 seo, seo, seo ESI Include vs 静态化
37. 源站优化 切割域名 提⾼brower并发 提⾼可用性, 页面的静态⽂件不会全部都挂 监听服务端的缓存热点压⼒ brower限制同⼀域名下并发数 引用外联地址的作用及⽅法 domain hash cookie free
38. ESI vs SSI vs CSI news csi iframe, ajax … ssi include file only source server esi pageage in edge cache <esi:include'>esi:include src=“top_news.php” max-age="45"/> <esi:include'>esi:include src=“comment.php” max-age="45"/>
39. “ debug cache server ”
40. dns调度测试 [ruifengyun@devops ~ ]$ dig @180.153.225.136 xiaorui.cc ... ;; ANSWER SECTION:'>SECTION:'>SECTION:'>SECTION: xiaorui.cc. 385 IN CNAME xiaorui.cc.w.kunlunca.com. xiaorui.cc.w.kunlunca.com. 30 IN A 122.228.74.183 [ruifengyun@devops ~ ]$ dig @114.114.114.114 xiaorui.cc ;; ANSWER SECTION:'>SECTION:'>SECTION:'>SECTION: xiaorui.cc. 180 IN CNAME xiaorui.cc.w.kunlunca.com. xiaorui.cc.w.kunlunca.com. 180 IN A 119.167.151.224 [ruifengyun@devops ~ ]$ dig @8.8.8.8 xiaorui.cc ;; ANSWER SECTION:'>SECTION:'>SECTION:'>SECTION: xiaorui.cc. 599 IN CNAME xiaorui.cc.w.kunlunca.com. xiaorui.cc.w.kunlunca.com. 179 IN A 222.161.210.45
41. cdn hit miss测试 [ruifengyun@devops ~ ]$ curl -I http://sports.sina.com.cn/china/'>http://sports.sina.com.cn/china/ HTTP/1.1 200 OK Server: nginx Date: Tue, 21 Jun 2016 05:31:19 GMT Content-Type: text/html Last-Modified: Tue, 21 Jun 2016 04:34:29 GMT Vary: Accept-Encoding Expires: Tue, 21 Jun 2016 05:32:19 GMT Cache-Control: max-age=60 X-Powered-By:'>X-Powered-By: schi_v1.02 X-Cache:'>X-Cache: HIT from ctc.gz.1cf2.42.spool.sina.com.cn ETag: "57451990-481" [ruifengyun@devops ~ ]$ curl -I http://sports.sina.com.cn/china/'>http://sports.sina.com.cn/china/X-Powered-By:'>X-Powered-By: schi_v1.02 X-Cache:'>X-Cache: MISS from ctc.gz.1cf2.38.spool.sina.com.cn
42. cdn hit miss测试 [ruifengyun@devops ~ ]$ curl -I http://sports.sina.com.cn/china/'>http://sports.sina.com.cn/china/ HTTP/1.1 200 OK Server: nginx Date: Tue, 21 Jun 2016 05:31:19 GMT Content-Type: text/html Last-Modified: Tue, 21 Jun 2016 04:34:29 GMT Vary: Accept-Encoding Expires: Tue, 21 Jun 2016 05:32:19 GMT Cache-Control: max-age=60 X-Powered-By:'>X-Powered-By: schi_v1.02 X-Cache:'>X-Cache: HIT from ctc.gz.1cf2.42.spool.sina.com.cn ETag: "57451990-481" [ruifengyun@devops ~ ]$ curl -I http://sports.sina.com.cn/china/'>http://sports.sina.com.cn/china/X-Powered-By:'>X-Powered-By: schi_v1.02 X-Cache:'>X-Cache: MISS from ctc.gz.1cf2.38.spool.sina.com.cn
43. cdn hit miss测试 [ruifengyun@devops ~ ]$ curl -I xiaorui.cc HTTP/1.1 200 OK Server: Tengine Content-Type: text/html; charset=UTF-8 Content-Length: 105749 Connection: keep-alive Vary: Accept-Encoding Date: Tue, 21 Jun 2016 05:26:40 GMT X-Powered-By: PHP/5.3.3 Cache-Control: max-age=3, must-revalidate WP-Super-Cache: Served supercache file from PHP Via: cache24.l2nu16-1[0,200-0,H], cache20.l2nu16-1[1,0], kunlun8.cn239[0,200-0,H], kunlun10.cn239[0,0] Age: 2504 X-Cache: HIT TCP_MEM_HIT dirn:9:536240464 EagleId: 7a8de38a14664893048527282e
44. 常见问题 切细static资源域名 ttl Ldns强制延长, A记录主机宕机了, how ? httpdns 新增的节点, 需跑热 被劫持到isp cache, how ? 链路劫持, https more…
45. “Q & A” – xiaorui.cc