技术分享之《cdn的设计原理及架构》

      这次公司大队人马去乌镇庆祝十周年,过程结果都很happy,抽奖还中了人民币,这运气没的说呀。 在乌镇西栅的小河边,我们量子团队一边聊MM,一边聊cdn的东西,很是happy。 同事们都是纯开发出身,对于运维的基础架构没有深入了解过。 在同事的鼓吹下,我觉得有必要跟大家好好聊聊cdn的各种场景,架构及实现的细节。 我做过一段时间的运维,不敢说多么精通,但一些架构还算熟知。在乐视基础架构虽然是开发,但开发的东西符合devops的业务范畴,主要折腾Lvs,  cdn cahce, dns view的管理接口 另外在来admaster之前,我也是看过部分的nginx cache,squid的部分源代码,多少还是有些心得的。 

     我原本标题定位是深入理解cdn设计原理,但又觉得这有点不自量力了,毕竟没有cdn的开发经验,不能这么不要脸。 最后改为《cdn的那些事儿》 ,内容还是针对开发人员讲的,当然没做过cdn运维的人也可以听听。 topic有cdn的组件,cdn网络设计实现,存储的基本数据结构,各阶段的运维架构,常见问题描述等。


     有些做cdn运维的朋友,他们对于cdn的运维管理很精通,但对于内部的实现模凌两可。 而开发的朋友对于cdn只是有个相当粗浅的认识,仅仅知道cdn是通过就近的缓存节点来提高网络访问质量而已。  职位的不同,关注的面也不同。 

贴个广告,我们团队持续招人中,有兴趣的朋友可以投简历到我的邮箱, 推荐奖金可3 7 分成,不还价 , ruifengyun@admaster.com.cn

废话说一句,团队基本都是python程序员,  所以在这个大环境下,想不提高技术都很难。


ppt内容摘要: 

# xiaorui.cc

1. cdn的设计原理 - xiaorui.cc - 峰云就她了
2. introduce 什么是 CDN, 内容分发网络 为什么要用cdn ? cdn的关键组件 cdn 内部实现原理, 架构拓扑及优化方法 源站层面的cdn架构及优化 网页层面的cdn架构及优化
3. dns cdn server HTMLbrower 涉及的内容
4. cdn基本原理 内容缓存到不同地区的缓存服务器 实现就近访问原则 通过dns view 和 load status调度到不同的边缘节点
5. cdn target 构建边缘节点, 解决最后”一公里” 智能调度 (负载均衡, 故障屏蔽 , 就近访问) 智能路由 (寻找最优访问链路) 安全防护 (强大带宽, 边缘计算能力)
6. source - BJ 1.1.1.1 client - QD cdn - QD 2.2.2.2 50 ms 10 ms html view xiaorui.cc/a.jpg xiaorui.cc/b.jpg /c.jpg static.xiaorui.cc/a.jpg DNS static A 2.2.2.2 * A 1.1.1.1 * A 2.2.2.2 why use cdn ? 90%流量 : static zone 30 ms handler request cost
7. dns scheduler Edge Cache SH Edge Cache BJ Edge Cache GZ source LB Ldns x NS .com/.xxx root
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: max-age=0 ; If-Modified-Since。。。 Ctrl F5 —> 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 no-cache , cache request source with 304 no-store , get file from source X-Cache:HIT from xd33-98.sina.com.cn X-Forwarded-For client_ip proxy1 proxy2
11. “ schduler zone contains view dns and each cache load ”
12. scheduler smart dns view ip db edns rule priority
13. scheduler collect 可用性探测 Host存活 Service存活 性能探测 流量 cpu / mem disk iops 服务注册
14. dns cluster xiaorui.cc NS2 cc dns RTT指标 root dns xiaorui.cc NS1LVS
15. anycast dns cluster 青岛 1.1.1.1 上海 1.1.1.1 北京 1.1.1.1 利用一个/多个 bgp as 号码在不同的地区广播相同的一个ip段 anycast就是不同的服务器用了相同的ip地址 对坑攻击, 区域隔离 !
16. “ cache server optimize”
17. simple cdn diff 平台 存储 性能 共享存储 功能 squid disk/mem 2.7单核 > 3.x多 核 多级存储 acl, icp, rate等 等 varnish mem 极高 只能内存 基本的acl, purge nginx mem/disk 高 多级存储 功能多, 可 module扩展 ats mem/disk 很高 裸盘多级存储 功能强大, icp
18. proxy network io | | | | | | | | | | epoll buffer source mem returnreturn
19. lvs dr提高流量 nginx/haproxy 引流 一致性hash提高hit 探测高可用 移除lb 镜像站 cache server上报状态 Cache Load Balance 选型 vrrp LB (Nginx/Haproxy) LVS LB (Nginx/Haproxy) Ats Ats Ats Ats LVS
20. 二级cache and icp L2 L1 source L1 L2 percent ? icp
21. cdn secure + secure waf ddos 流量清洗 cc limit rate or drop 验证码页面 js insert cookie token , cdn diff token
22. ddos mpls 引流 正常状态 清洗 回注
23. 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
24. 多级cache mem ssd disk hot cold 推荐百分比 mem: ssd: sata = 1: 10: 100
25. 数据结构 顶层hash map判断该文件的level位置 每个level cache都有数据位置表及Lru表 lru = double linked list + hash map hash map存放linked node Lru 长度是由level 字节动态控制
26. 数据结构 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 顶层hash定位level — — — — — — — — — — — — — — | | | | | | | | | | Hash ( List’ s node ) Lru deque 调整时需先copy后del 置换空间 15 % 预留空间 5 % | | | | | | | | | | | | | | | | | | | | | | | | | | | | — — — — — — — — — — — — — — — — — — — — — — — — — — — — satassdmemory
27. 多级cache 起初 mem —> ssd —> disk 使用Lru淘汰冷文件, 超过阈值后主动淘汰, 定时调节各level cache 不使用raid, 如磁盘不可读, 摘掉 cache server内置disk的调度一致性hash 大文件直接到disk coss 小文件, aufs 大文件. 可同时使用 裸盘的急速体验
28. 扩展 purge 盗链 (refer, token) 限速 for source server for client 文件合并及压缩
29. cdn 优化 选择性的ignore (reload no-cache) 304不走磁盘 使用libaio (内核AIO) 视频分片 cdn server ——> web server , spdy + tfo 万兆网卡是标配 https装载卸载, ssl 加速卡 ? 使用trie树快速匹配, (purge, 黑名单, ip View)
30. “ soruce server frame optimize ”
31. simple bgp describe lualu 通告 203.118.14.10/30 un 125.201.14.13/30 ct 203.118.14.9/30 * 小白 * 通过 125.201.14.14/30 bgp ip range gateway 解决单ip多线路 !!! AS 9504 AS 1111 AS 2222
32. source zone LB web fuser/api file server fastdfs gfs ceph gluster ospf lvs http://static.xiaorui.cc/mm.jpg
33. “ html code optimize ”
34. 源站优化 动静分离 after end template + fore-end mvc 优点 并行开发调试 服务化 后端模板渲染及传输成本 缺点 seo, seo, seo ESI Include vs 静态化
35. 源站优化 切割域名 提高brower并发 提高可用性, 页面的静态文件不会全部都挂 监听服务端的缓存热点压力 brower限制同一域名下并发数 引用外联地址的作用及方法 domain hash cookie free
36. news <esi:include src=“top_news.php” max-age="45"/> csi iframe, ajax … ssi include file only source server esi pageage in edge cache <esi:include src=“comment.php” max-age="45"/> ESI vs SSI vs CSI
37. “ debug cache server ”
38. [ruifengyun@devops ~ ]dig @180.153.225.136 xiaorui.cc ... ;; ANSWER 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: 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: xiaorui.cc. 599 IN CNAME xiaorui.cc.w.kunlunca.com. xiaorui.cc.w.kunlunca.com. 179 IN A 222.161.210.45 dns调度测试
39. [ruifengyun@devops ~ ] curl -I 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: schi_v1.02 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/ … X-Powered-By: schi_v1.02 X-Cache: MISS from ctc.gz.1cf2.38.spool.sina.com.cn cdn hit miss测试
40. [ruifengyun@devops ~ ] curl -I 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: schi_v1.02 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/ … X-Powered-By: schi_v1.02 X-Cache: MISS from ctc.gz.1cf2.38.spool.sina.com.cn cdn hit miss测试
41. [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 cdn hit miss测试
42. 常见问题 切细static资源域名 ttl Ldns强制延长, A记录主机宕机了, how ? httpdns 新增的节点, 需跑热 被劫持到isp cache, how ? 链路劫持, https more…
43. “Q & A” – xiaorui.cc

在线PDF分享:

    http://xiaorui.cc/cdn_design.pdf

在线PPT分享:

     ppt扔到slideshare里了,需要翻墙才可以看到的。http://www.slideshare.net/rfyiamcool/cdn-63269798


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

6 Responses

  1. 厉害 2016年12月6日 / 上午4:06

    相当厉害!

  2. 罗兰 2016年10月29日 / 上午8:54

    哥们太厉害了,你有cdn开发经验么?

  3. 景色 2016年7月29日 / 下午12:14

    求PPT 的画图软件哈

  4. 2016年6月25日 / 上午9:18

    厉害

  5. 白宇 2016年6月23日 / 上午9:47

    赞一个

发表评论

邮箱地址不会被公开。 必填项已用*标注