cdn的那些事儿

44

Click here to load reader

Upload: rfyiamcool

Post on 14-Apr-2017

1.855 views

Category:

Software


1 download

TRANSCRIPT

Page 1: cdn的那些事儿

cdn 的设计原理- xiaorui.cc- 峰云就她了

Page 2: cdn的那些事儿

introduce什么是 CDN, 内容分发网络为什么要用 cdn ?

cdn 的关键组件cdn 内部实现原理 , 架构拓扑及优化方法源站层面的 cdn 架构及优化网页层面的 cdn 架构及优化

Page 3: cdn的那些事儿

dns

cdn

server

HTMLbrower

涉及的内容

Page 4: cdn的那些事儿

cdn 基本原理内容缓存到不同地区的缓存服务器实现就近访问原则通过 dns view 和 load status 调度到不同的边缘节点

Page 5: cdn的那些事儿

cdn target

构建边缘节点 , 解决最后”一公里”智能调度 ( 负载均衡 , 故障屏蔽 , 就近访问 )

智能路由 ( 寻找最优访问链路 )

安全防护 ( 强大带宽 , 边缘计算能力 )

Page 6: cdn的那些事儿

source - BJ1.1.1.1

client - QD

cdn - QD2.2.2.2

50 ms

10 mshtml viewxiaorui.cc/a.jpg xiaorui.cc/b.jpg/c.jpgstatic.xiaorui.cc/a.jpg

DNSstatic 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

Page 7: cdn的那些事儿

dns scheduler

Edge Cache SH

Edge Cache BJ

Edge Cache GZ

sourceLB

Ldns

x NS

.com/.xxxroot

Page 8: cdn的那些事儿

“ Http Headers , Abort cache http protocol”

Page 9: cdn的那些事儿

http headerExpires 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

Page 10: cdn的那些事儿

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

Page 11: cdn的那些事儿
Page 12: cdn的那些事儿

“ schduler zone contains view dns and each cache load ”

Page 13: cdn的那些事儿

scheduler

smart dns

view

ip db

edns

rule priority

Page 14: cdn的那些事儿

schedulercollect

可用性探测Host 存活Service 存活

性能探测流量cpu / memdisk iops

服务注册

Page 15: cdn的那些事儿

dns cluster

xiaorui.cc NS2

cc dns

RTT 指标

root dns

xiaorui.cc NS1LVS

Page 16: cdn的那些事儿

anycast dns cluster

青岛 1.1.1.1

上海 1.1.1.1

北京 1.1.1.1

利用一个 / 多个 bgp as 号码在不同的地区广播相同的一个 ip 段anycast 就是不同的服务器用了相同的 ip 地址

对坑攻击 , 区域隔离 !

Page 17: cdn的那些事儿

“ cache server optimize”

Page 18: cdn的那些事儿

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

Page 19: cdn的那些事儿

proxy network io

| | | | | | | | | |

epoll

buffer

sourcemem

returnreturn

Page 20: cdn的那些事儿

lvs dr 提高流量nginx/haproxy引流一致性 hash 提高

hit探测高可用移除 lb镜像站cache server 上报状态

Cache Load Balance 选型

vrrp

LB(Nginx/Haproxy)

LVS

LB(Nginx/Haproxy)

Ats

Ats

AtsAts

LVS

Page 21: cdn的那些事儿

二级 cache and icp

L2

L1

source

L1 L2 percent ?

icp

Page 22: cdn的那些事儿

cdn secure+ secure

waf

ddos

流量清洗cc

limit rate or drop

验证码页面js insert cookie token , cdn diff token

Page 23: cdn的那些事儿

ddos

mpls

引流正常状态

清洗

回注

Page 24: cdn的那些事儿

pull vs pushpull

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

Page 25: cdn的那些事儿

多级 cache

mem

ssd

disk

hot

cold推荐百分比 mem: ssd: sata = 1: 10: 100

Page 26: cdn的那些事儿

数据结构顶层 hash map 判断该文件的 level 位置每个 level cache 都有数据位置表及 Lru 表lru = double linked list + hash map

hash map 存放 linked node

Lru 长度是由 level 字节动态控制

Page 27: cdn的那些事儿

数据结构| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

顶层 hash 定位 level

————————————————

| | | | | | | | | |

Hash ( List’ s node )

Lru deque

调整时需先 copy 后 del置换空间 15 %预留空间 5 %

| | | | | | | | | | | | | |

| | | | | | | | | | | | | |

————————————————

————————————————

satassdmemory

Page 28: cdn的那些事儿

多级 cache起初

mem —> ssd —> disk使用 Lru 淘汰冷文件 , 超过阈值后主动淘汰 , 定时调节各 level cache不使用 raid, 如磁盘不可读 , 摘掉cache server 内置 disk 的调度一致性 hash大文件直接到 diskcoss 小文件 , aufs 大文件 . 可同时使用裸盘的急速体验

Page 29: cdn的那些事儿

扩展purge

盗链 (refer, token)

限速for source server

for client

文件合并及压缩

Page 30: cdn的那些事儿

cdn 优化选择性的 ignore (reload \ no-cache)

304 不走磁盘使用 libaio ( 内核 AIO)

视频分片cdn server ——> web server , spdy + tfo

万兆网卡是标配https 装载卸载 , ssl 加速卡 ?

使用 trie 树快速匹配 , (purge, 黑名单 , ip View)

Page 31: cdn的那些事儿

“ soruce server frame optimize ”

Page 32: cdn的那些事儿

simple bgp describe

lualu通告 203.118.14.10/30

un125.201.14.13/30

ct203.118.14.9/30

* 小白 *

通过 125.201.14.14/30

bgp ip range

gateway解决单 ip 多线路 !!!

AS 9504

AS 1111

AS 2222

Page 33: cdn的那些事儿

source zone

LB

webfuser/api

file server

fastdfsgfscephgluster

ospflvs

http://static.xiaorui.cc/mm.jpg

Page 34: cdn的那些事儿

“ html code optimize ”

Page 35: cdn的那些事儿

源站优化动静分离

after end template + fore-end mvc优点并行开发调试服务化后端模板渲染及传输成本缺点seo, seo, seo

ESI Include vs 静态化

Page 36: cdn的那些事儿

源站优化切割域名提高 brower 并发提高可用性 , 页面的静态文件不会全部都挂监听服务端的缓存热点压力brower 限制同一域名下并发数引用外联地址的作用及方法

domain hashcookie free

Page 37: cdn的那些事儿

news

<esi:include src=“top_news.php” max-age="45"/>

csiiframe, ajax …

ssiinclude fileonly source server

esipageage in edge cache

<esi:include src=“comment.php” max-age="45"/>

ESI vs SSI vs CSI

Page 38: cdn的那些事儿

“ debug cache server ”

Page 39: cdn的那些事儿

[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 调度测试

Page 40: cdn的那些事儿

[ruifengyun@devops ~ ]$ curl -I http://sports.sina.com.cn/china/HTTP/1.1 200 OKServer: nginxDate: Tue, 21 Jun 2016 05:31:19 GMTContent-Type: text/htmlLast-Modified: Tue, 21 Jun 2016 04:34:29 GMTVary: Accept-EncodingExpires: Tue, 21 Jun 2016 05:32:19 GMTCache-Control: max-age=60X-Powered-By: schi_v1.02X-Cache: HIT from ctc.gz.1cf2.42.spool.sina.com.cnETag: "57451990-481"

[ruifengyun@devops ~ ]$ curl -I http://sports.sina.com.cn/china/…X-Powered-By: schi_v1.02X-Cache: MISS from ctc.gz.1cf2.38.spool.sina.com.cn

cdn hit miss 测试

Page 41: cdn的那些事儿

[ruifengyun@devops ~ ]$ curl -I http://sports.sina.com.cn/china/HTTP/1.1 200 OKServer: nginxDate: Tue, 21 Jun 2016 05:31:19 GMTContent-Type: text/htmlLast-Modified: Tue, 21 Jun 2016 04:34:29 GMTVary: Accept-EncodingExpires: Tue, 21 Jun 2016 05:32:19 GMTCache-Control: max-age=60X-Powered-By: schi_v1.02X-Cache: HIT from ctc.gz.1cf2.42.spool.sina.com.cnETag: "57451990-481"

[ruifengyun@devops ~ ]$ curl -I http://sports.sina.com.cn/china/…X-Powered-By: schi_v1.02X-Cache: MISS from ctc.gz.1cf2.38.spool.sina.com.cn

cdn hit miss 测试

Page 42: cdn的那些事儿

[ruifengyun@devops ~ ]$ curl -I xiaorui.ccHTTP/1.1 200 OKServer: TengineContent-Type: text/html; charset=UTF-8Content-Length: 105749Connection: keep-aliveVary: Accept-EncodingDate: Tue, 21 Jun 2016 05:26:40 GMTX-Powered-By: PHP/5.3.3Cache-Control: max-age=3, must-revalidateWP-Super-Cache: Served supercache file from PHPVia: cache24.l2nu16-1[0,200-0,H], cache20.l2nu16-1[1,0], kunlun8.cn239[0,200-0,H], kunlun10.cn239[0,0]Age: 2504X-Cache: HIT TCP_MEM_HIT dirn:9:536240464EagleId: 7a8de38a14664893048527282e

cdn hit miss 测试

Page 43: cdn的那些事儿

常见问题切细 static资源域名ttl Ldns 强制延长 , A记录主机宕机了 , how ?

httpdns

新增的节点 , 需跑热被劫持到 isp cache, how ?

链路劫持 , https

more…

Page 44: cdn的那些事儿

“Q & A”– xiaorui.cc