如何始终如一地为同一CDN主机提供资产?

时间:2010-08-11 16:35:35

标签: cdn assets

因此,为了加快加载时间,我们正在设置一堆CDN主机名来提供图像和资源。对同一资产持续使用同一主机的最佳方法是什么?例如。 button.gif始终从http://assets-15.ourserver.com提供。

我正在考虑提出一些规则,其中文件名的md5哈希以某种方式映射到服务器(不能使用文件名本身,因为很多相似:“button-home.gif”,“button -about.gif“等。我不确定这是否是最有效的方式,但似乎它会起作用。

任何人都有这方面的经验吗?我需要一种与语言无关的解决方案,因为它将被几种不同的语言使用。

编辑:雅虎关于如何加快速度的解释:http://developer.yahoo.com/performance/rules.html#split

2 个答案:

答案 0 :(得分:1)

内容分发网络(CDN)的目的是从最靠近用户的服务器加载资产。

从显式服务器加载给定资产会破坏CDN的用途。我的猜测是它不受支持。如果您需要从显式位置加载资产,请不要将其放在CDN上,将其放在中央服务器上。

答案 1 :(得分:1)

当我做这样的事情时,所有相关的资源都有id号,所以我只是用它作为依据。不过,扩展到非数字并不太难。

您使用的主机名数量存在平衡,主机查找开销过多会超出多个主机名的优势,因此在外部您可能会有大约12个,可能更少。

这本身就意味着一个简单的哈希可能很容易在给定范围内分裂,而不需要特别聪明。

缺少编码问题的混淆,因为你的应用程序要么完全处理IURI(在这种情况下,utf-8处理已经是你已经处理过的问题)了,或者它没有,在这种情况下,每个字符都在URI转义形式的路径(也就是说,实际URI中使用的名称)将在ASCII范围内。

没有必要通过加密安全或类似的东西,因为猜测使用的服务器不是安全风险。如果一个或两个页面略微倾向于一个服务器而不是另一个服务器,那么它将不会是世界末日(无论如何,随机性会发生完美的事情)。

因此,只需遍历图像URI的绝对路径中的字符(主机从第一个/之后的所有内容),将它们的整数值相互添加,然后使用主机名部分的模数

如果您想限制为速度问题处理的字符数,请从最后向后执行,因为这将有最大的变化。

“button-home.gif”类似于“button-about.gif”不是问题,因为它们在这样的过程中看起来并不是非常相似。

如果您增加使用的主机名数量,请尝试将其作为前一个号码的倍数,因为这会产生尽可能多的资源来保留旧的URI。

相关问题