<div>Сдвиг на 16 бит потому что это алгоритм из Cache::Memcached. думаю что они сдвигают биты для получения меньшего числа. Ведь нет смысла делить огромное число, если нужен лишь остаток от деления.<br></div><div><br></div>
<div>На счет замены md5 на crc32 согласен, надо переделать. Нет смысла получать такой сложный хэш, когда цель всего лишь сжать url.</div><br><div class="gmail_quote">25 октября 2009 г. 20:02 пользователь Deomid Ryabkov <span dir="ltr"><<a href="mailto:myself@rojer.pp.ru">myself@rojer.pp.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">CRC32 от MD5, зачем-то сдвинутый на 16. не нравятся младшие биты?<br>
md5 вычислительно значительно дороже CRC32, может обойтись только CRC32?<br>
<br>
Andrey Zloy wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Написали небольшой конфиг, который позволяет nginx'у определять "правильный" memcached сервер.<br>
Логика определения сервера взята из модуля Cache::Memcached.<br>
Ключом для мемкеша служит md5 от url'а страницы.<br>
<br>
На продакшн конфиг пока не выкатывал. На тестовых серверах работает хорошо.<br>
<br>
Подскажите могут ли быть подводные камни?<br>
Может кто уже писал подобные решения<br>
<br>
http {<br>
perl_set $md5_uri 'sub {<br>
use Digest::MD5 qw(md5_base64);<br>
my $r = shift;<br>
my $uri=$r->uri;<br>
my $args=$r->args;<br>
if ($args){<br>
$uri=$uri."?".$args;<br>
}<br>
return md5_base64($uri);<br>
}';<br>
<br>
perl_set $memcached_index '<br>
sub {<br>
use String::CRC32;<br>
my $r = shift;<br>
return (((crc32($r->variable("md5_uri")) >> 16) & 0x7fff) % 2); # 2 - кол-во серверов memcached<br>
}<br>
';<br>
<br>
server {<br>
listen 3666;<br>
server_name 172.28.144.68;<br>
<br>
location / {<br>
set $memcached_key $md5_uri;<br>
if ($memcached_index = 0){<br></div></div>
memcached_pass <a href="http://172.28.144.52:11211" target="_blank">172.28.144.52:11211</a> <<a href="http://172.28.144.52:11211" target="_blank">http://172.28.144.52:11211</a>>; }<br>
if ($memcached_index = 1){<br>
memcached_pass <a href="http://172.28.144.53:11211" target="_blank">172.28.144.53:11211</a> <<a href="http://172.28.144.53:11211" target="_blank">http://172.28.144.53:11211</a>>; }<br>
<br>
error_page 404 @fallback;<br>
}<br>
}<br>
}<br>
<br>
</blockquote>
<br>
<br>
-- <br>
Deomid "rojer" Ryabkov<br>
<a href="mailto:myself@rojer.pp.ru" target="_blank">myself@rojer.pp.ru</a><br>
<a href="mailto:rojer@sysadmins.ru" target="_blank">rojer@sysadmins.ru</a><br>
ICQ: 8025844<br>
<br>
</blockquote></div><br>