这次公司大队人马去乌镇庆祝十周年,过程结果都很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
相当厉害!
哥们太厉害了,你有cdn开发经验么?
求PPT 的画图软件哈
keynote
厉害
赞一个