我工作的中小型在线零售公司使用 Akamai 作为我们的静态图像 CDN,但我想知道它是否会有害处而不是帮助,如果它不是最理想的,我们应该怎么做。
我们每月的页面浏览量约为 300 万,独立访客数量约为 40 万。我们的各个网页上都有超过 10 万张不同的静态图片(数千种产品中的每一种都有几张不同的图片,等等)。
问题在于,Akamai 的服务器从原始服务器(我们自己托管)请求文件,占所有浏览器请求的 40% 左右。这意味着我们的客户需要等待很多(在我看来)不必要的时间:40% 的请求必须在 Akamai 和我们的原始服务器之间往返,然后才能返回给客户。
服务器 TTL 不是问题;它们都设置为 365 天。因此,似乎
- Akamai 的边缘服务器没有将我们的内容在缓存中保存足够长的时间,然后将其交换为流量比我们更高的内容,以及/或
- Akamai 边缘服务器数量非常多(他们声称全球有 70,000 多台),以至于每台服务器都无法从我们每月 45 万名访问者那里获得足够的流量来构建我们的文件缓存。
因此我开始思考,服务器较少的 CDN 是否能更好地服务我们。我的想法是,如果 CDN 服务器较少,我们的更多图片会更频繁地缓存在每台服务器上,并且可能会在缓存中停留更长时间而不会被交换出去。另一方面,服务器较少可能意味着距离服务器较远的用户会面临更大的延迟。
我们正在考虑两种基于 Akamai 的选项,但尚未实施:
- 我们还没有使用他们的 NetStorage 服务,因为存在技术障碍(如果我们朝这个方向发展,这将是我下一个 SF 问题的主题),并且 40% 的时间在边缘服务器和原点之间仍然会有额外的往返;它只是 Akamai 网络内部的往返,而不是到我们单独托管的原点——可能更快,但仍然是往返。
- 我们不支付 Akamai 的可选分层分发服务费用。这可能在很大程度上缓解问题,但 (1) 它并不便宜,并且 (2) 同样,40% 的时间边缘服务器和其分层中心之间仍会存在往返。
我的问题是:
你们是否认为将文件缓存在更少的服务器上会更好,但代价是某些用户的额外延迟;或者延迟是否比原始往返更大的问题?
如果我们使用 NetStorage,是否有人知道往返 NetStorage“原点”通常需要多长时间?
我遗漏了什么吗?我还应该考虑什么?
答案1
最好基于事实,而不是假设。您的假设是,节点较少的 CDN 访问您的源站的频率较低。为了测试这一点,我会:
- 在多个 CDN 上设置一个帐户,这些 CDN 可以执行源获取,但具有“超级 POP”模型。Amazon CloudFront、MaxCDN 和 Voxel 是首选。CacheFly 也行,尽管我认为如果没有服务参与,您就无法执行源获取。LimeLight 率先采用了“超级 POP”模型,但需要经过销售的繁文缛节才能进行测试。
- 将一些具有统计意义的 CDN 流量转移到这些测试 CDN。这可能很简单,只需执行 n% 的重写规则,但“内容组合”对于所有 CDN 都必须完全相同。您不能将其限制为静态资产的子集,因为数字静态资产也可能有影响。也许将 80% 的流量放在 Akamai 上进行测试,然后将 5% 放在其他 CDN 上。
- 使用您的网络服务器日志来衡量您从每个 CDN 看到的原始点击量以及发送到每个 CDN 的流量量。
- 使用 pingdom 之类的工具来测量每个 CDN 上各种静态资产的全球响应时间。卸载来自源站的点击量是 CDN 正常工作的一个指标,但最终用户的延迟也很重要。
掌握了这些事实,你的决定就很容易了。不管怎么说,我认为你是对的:Akamai 可能只是节点过多适用于“较小”的站点。
请注意,一些较小的 CDN 会自动对所有内容使用分层模型;它们只是从一开始就以这种方式构建。在这种模型中,对特定边缘节点的请求在缓存未命中时被路由到“内部”节点。如果“内部”节点也发生缓存未命中,则将其路由到源。我自己的测试表明 MaxCDN 以这种方式工作(例如,对阿姆斯特丹节点上的文件的第一次请求并不总是导致相应的源提取。因此它一定是从 MaxCDN 网络内的其他地方获取了文件)。
答案2
我不是 Akamai 的员工,但我们确实转售他们的很多服务。
您是否查看过 CDN 缓存?如果这些图像正在快速变化,则可能出现以下情况:节点已收到更新的内容,而 Akamai 正在缓存来自其他节点的时间戳。尝试通过 Akamai 控制面板清除缓存。
是否还有其他项目正在缓存,仅是图像。有 CSS 和 Javascript 吗?
Akamai 有许多可用选项可帮助优化交付。
最近有人向我介绍了 Strangeloop,他们提供压缩服务,可以减少每页的对象数并保存为模板。这不是替代品,而是很有趣的东西。
延迟和缓存相辅相成。NetStorage 将提高性能。
如果我能帮忙的话请告诉我,祝你好运!
答案3
您绝对应该致电 Akamai 支持部门,并向他们提供未按预期缓存的示例。我们遇到过类似的问题,这是由于我们误解了文档而设置了一些标头。您为此要付给他们一大笔钱;不要犹豫,立即致电。
Akamai 不会进行“每个边缘节点一次点击”;他们会进行几次点击以将其放入“云”中,然后从那里传播到边缘。