ЦЕЛЬ: Сопоставить каждый URL, обрабатываемый сервером, с 0, 1, 2 или 3, распределяя его как можно более равномерно.
В то время как документация дляХеш-метод ruby's String # говорит, что он «вернет хеш на основе длины и содержимого строки», это явно не вся история.Хэш данной строки не согласован при вызовах интерпретатора:
$ irb
ruby-1.9.2-p180 :001 > "foo".hash
=> 360517580588231756
ruby-1.9.2-p180 :002 > ^D
$ irb
ruby-1.9.2-p180 :001 > "foo".hash
=> -2716152678666510148
Это означает, что значение хеш-функции конкретной строки может различаться, например, на серверах.Rails использует внутреннюю String#hash
для сопоставления пути URL-адреса с одним из четырех хостов активов (если ресурс_хоста приложения настроен ), но эта функция намного менее эффективна, чем могла бы быть из-за перекрестногомашинные несоответствия;разные серверы могут отображать один и тот же URL-адрес на разные хосты ресурсов, снижая эффективность кэшей, облачного неба, преждевременного охлаждения чашек чая, портя репутацию хороших программистов.
Можете ли вы предложить альтернативную хеш-функцию, которая можетэффективно и быстро распределять хеши по типичному URL-пространству приложения, предпочтительно, которое производит Fixnum, так как, в конце концов, я хочу отобразить его на одном из четырех хостов активов?