【问题标题】:Fast one digit hash for CDN load balancing PHP用于 CDN 负载平衡 PHP 的快速一位数哈希
【发布时间】:2014-01-04 11:54:25
【问题描述】:

我的网站提供许多图像,我想通过子域请求来并行化图像请求。

例如http://mydomain.com/image1.png 变为 http://img[0-9].mydomain.com/image1.png

我正在寻找的是一种允许我转换的哈希算法

"some-random-image-name.png" 到单个数字范围 0-9

以便我可以通过以下方式加载图像:

http://img0.mydomain.com/foo.png

http://img1.mydomain.com/foo.png

等等

我不能使用随机数,因为那样效率不高。如果图像从 img1 加载,我希望对该图像的下一个请求也转到 img1。

这需要很快,因为每次页面加载都会调用很多次。

感谢您的想法。

添加节点:

为什么要这样做?

浏览器只会从单个服务器请求有限数量的请求。这篇文章在这里讨论了这一点:

Max parallel http connections in a browser?

为了使包含许多静态资产(例如图像)的页面加载速度更快,您可以添加子域。即使它们仍然来自同一台服务器。

【问题讨论】:

  • 您是否将这些图像保存在任何地方的数据库中?如果是这样,只需使用图像 ID。
  • 我想我根本不明白这个需求。如果您使用的是合理的 CDN 提供商,您应该没有这样的需求。如果出于某种原因,您仍然需要使用不同的服务器集来提供内容,您也许可以使用 DNS 负载平衡器来满足您的需求。
  • 使用数据库中图像 ID 的最后一位。这将为您提供一个自动数字平衡的 0-9 范围。不能保证图像 1001 不会太受欢迎以至于它会杀死 img1 服务器。
  • 如果您有arandomimage.pnganotherimage.png 在您假设的一位数字哈希中都评估为5,那么您将如何区分它们?
  • 为那些询问为什么要这样做的人添加了一个注释。

标签: php hash


【解决方案1】:

这应该很快:

$hash = abs(crc32($filename) % 10);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多