服务器工程师必须了解的 CDN 技能
本文使用案例研究来突出服务器工程师在使用 CDN 时必须掌握的技能。
在云时代,每个人都在努力提高静态资源的加载速度。近年来,仅此一项就促进了 CDN 的逐步普及,尤其是在像中国这样快速扩张的市场中。我工作于一家核心业务是图像共享社区的公司,因此我们严重依赖图像 CDN。本文使用案例研究来突出服务器工程师在使用 CDN 时必须掌握的技能。它将讨论 CDN 的背景和基本原理、分布式图像存储、批量添加和切换 CDN 的流程和注意事项以及 CDN 访问故障分析。
本文中的所有内容都基于我自己的经验。CDN 和分布式图像存储的背景和原理 在我们开始之前,让我们快速了解一下基本的 CDN 图像存储架构
上述架构的主要原则可以在下图中说明
在这个架构中,我们的目标是将某个域名(a.mengkang.net)的图像访问流量切换到 CDN。以下是整个过程的概述
- 首先,我们需要收集原始域名的访问日志统计信息,以找到访问频率较高的图像地址(例如大约 200,000 个地址)。然后,我们将这些地址交给 CDN 提供商。
- 然后,CDN 提供商将对这 200,000 个地址的资源进行预热抓取。
- 预热抓取完成后,我们可以将 a.mengkang.net 的一部分域名更改为 b.mengkang.net。然后,我们需要将 b.mengkang.net 的 CNAME 解析到 CDN 服务器的域名,例如 b.mengkang.ccgslb.com.cn。
- 使用 wget 测试,我们将访问 b.mengkang.net 域名中的图像,以查看它们是否可以被 CDN 缓存。
- 如果缓存测试成功,我们将把 a.mengkang.net 的部分流量切换到 b.mengkang.net。运维人员将监控回源流量情况,并相应地调整流量分配。
定位 CDN 资源访问故障
案例研究 1
问题
最近我们遇到了一个关于大图像的独特问题。对同一图像地址的访问有时成功,有时失败,并且当无法访问图像时,单个图像地址的访问请求会跳转到游戏网站的主页。
我们联系了 CDN 提供商的客户支持,他们被告知运营商的 DNS 被劫持了,但 CDN 服务没有问题(他们似乎非常被动)。以下是我们解决问题的方法。
解决方案
让我们以以下图像为例:http://f4.topit.me/4/2d/d1/1133196716aead12d4s.jpg
- 首先,我们确认我们的源站资源可以被访问,并且 CDN 回源没有问题
我们使用 wget 命令绑定域名主机(这里,我们假设源站 IP 为 111.1.23.214)。这允许我们绕过 CDN 并直接访问我们的源站
这证实了该图像可以正常访问。
- 然后,我们使用 wget -S 来打印详细的 HTTP 标头信息
通过这个请求,我们可以清楚地看到请求首先连接到 123.150.50.14:80,然后经历了 302 重定向。标头信息清楚地表明:Powered-By-ChinaCache: HIT from CHN-TJ-7-3V2.6。这意味着这是一个 CDN 本身的问题。此外,重定向页面也是 ChinaCache 的客户。现在我们已经找到了问题所在,CDN 提供商再也不能否认责任并开始解决这个问题。
案例研究 2
问题
访问某个网页时,CSS 中的图像无法访问。但是,通过单独访问图像地址可以访问图像。使用 wget --referer,我们发现问题是错误的防盗链设置:8aad0243328afca0394f9b593e3fa3b508bd4d11
我向客户服务报告了这个问题,他们告诉我他们没有施加任何限制,问题出在我们的源站。所以我们必须挖掘证据。
解决方案
- 首先,我们通过使用带有 referer 的模拟浏览器访问来确认源站没有问题
同时,为了绑定主机,我们还使用了另一种方法:wget -e http_proxy
- 然后,我们直接请求,没有绑定主机
这清楚地显示了域名解析过程。 CDN DNS 使用预定义的策略,返回最佳 IP,111.202.7.252。然后,它返回了 403。 只有在我提供了显示这两种情况的截图后,CDN 客户服务人员才不得不开始解决这个问题。
结论
上述问题导致我们的开发工程师承担了过多的运营和管理责任。最近我们切换到阿里云 OSS 进行存储,现在我们不再需要担心上述问题。我们不需要再回源,因为我们可以直接将图像存储在云端!就是这么简单!