tags:
- Networks
CDN - Bringing It Home
如果你想部署自己的静态页面,你可以将你的页面部署到 Github Pages 上,这是完全免费的。但有一个问题:Github Pages 的服务器在美国,如果你在非美国本土的其他地方访问托管页面,那么页面加载就可能会很慢。因为数据会从美洲跨过大洋来到中国。
如果你 Ping 一下 github.com
我们能看到中间经过了 16 跳,RTT 延迟平均下来 170ms 左右。
正在 Ping github.com [20.205.243.166] 具有 32 字节的数据:
来自 20.205.243.166 的回复: 字节=32 时间=147ms TTL=112
来自 20.205.243.166 的回复: 字节=32 时间=168ms TTL=112
来自 20.205.243.166 的回复: 字节=32 时间=180ms TTL=112
来自 20.205.243.166 的回复: 字节=32 时间=198ms TTL=112
20.205.243.166 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 147ms,最长 = 198ms,平均 = 173ms
如何降低延迟呢?你可以把服务器搬到离你比较近的位置。你让 Github 在国内建立服务器可能不太现实,但是你可以使用 CDN 内容分发网络服务。也就是说,将源站的资源缓存到离你近一些的 CDN 服务器上,之后你对源站资源的访问就会被导流到 CDN 服务器上。
假如我 Ping 一下我的域名 congzhi.wiki
:
正在 Ping congzhi.wiki.w.kunlunaq.com [113.200.122.224] 具有 32 字节的数据:
来自 113.200.122.224 的回复: 字节=32 时间=5ms TTL=57
来自 113.200.122.224 的回复: 字节=32 时间=8ms TTL=57
来自 113.200.122.224 的回复: 字节=32 时间=7ms TTL=57
来自 113.200.122.224 的回复: 字节=32 时间=7ms TTL=57
113.200.122.224 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 5ms,最长 = 8ms,平均 = 6ms
你可以看到跳数少了一半,RTT 也短了不少。虽然这样不能说明访问网站加速了多少,但至少能够说明一些问题。
CDN 服务通常依赖于 ISP 或 CDN 供应商在用户所在地附近部署的 POP(Point of Presence,接入点)服务器节点。虽然我们的静态网页原本部署在美国,但通过在中国大陆设置 POP 节点,CDN 供应商就能将源站资源提前缓存到国内的服务器上,从而加速内容传输。CDN 就是一张由全球各地 POP 节点构成的分布式网络。
当用户访问 congzhi.wiki
时,请求不会直接到达 Github Pages 的原站。DNS 解析会将该域名指向距离用户路由最近的 CDN POP 节点。如果该节点已缓存了所需内容,它会立即将数据返回给用户;如果未命中缓存,该节点会在后台向源站拉取内容、进行缓存后再响应请求。
除了加速页面加载,CDN 还会提升网站的安全性。因为 CDN 的原理就是通过将用户请求分发到遍布各地的 CDN POP 节点,以减少对源站直接的访问。所以用户端是访问不到源站的,从而对源站的 DDoS(分布式拒绝服务)攻击和其他恶意流量攻击的风险就会大大降低。
此外,多数 CDN 服务商会内置 WAF 和流量清洗技术,这些安全措施可以在恶意流量到达源站之前对其进行拦截和过滤,保护原始服务器不受直接攻击。利用这种分布式防护机制,即使发生大规模流量攻击,恶意数据也会被分散到各个 POP 节点,整体系统的稳定性和可用性都会大大提高。
CDN 服务通常也支持 HTTPS 及 SSL/TLS 加密传输,确保用户与 CDN 节点之间的数据在传输过程中不会被截获或篡改。保护数据的隐私性,也为网站的整体安全加固提供了多重保障。