<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">&lt;<a href="mailto:myself@rojer.pp.ru">myself@rojer.pp.ru</a>&gt;</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&#39;у определять &quot;правильный&quot; memcached сервер.<br>
Логика определения сервера взята из модуля Cache::Memcached.<br>
Ключом для мемкеша служит md5 от url&#39;а страницы.<br>
<br>
На продакшн конфиг пока не выкатывал. На тестовых серверах работает хорошо.<br>
<br>
Подскажите могут ли быть подводные камни?<br>
Может кто уже писал подобные решения<br>
<br>
http {<br>
        perl_set $md5_uri &#39;sub {<br>
     use Digest::MD5 qw(md5_base64);<br>
     my $r = shift;<br>
     my $uri=$r-&gt;uri;<br>
     my $args=$r-&gt;args;<br>
     if ($args){<br>
       $uri=$uri.&quot;?&quot;.$args;<br>
     }<br>
      return md5_base64($uri);<br>
    }&#39;;<br>
<br>
     perl_set $memcached_index &#39;<br>
     sub {<br>
       use String::CRC32;<br>
       my $r = shift;<br>
       return (((crc32($r-&gt;variable(&quot;md5_uri&quot;)) &gt;&gt; 16) &amp; 0x7fff) % 2); # 2 - кол-во серверов memcached<br>
    }<br>
   &#39;;<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> &lt;<a href="http://172.28.144.52:11211" target="_blank">http://172.28.144.52:11211</a>&gt;;        }<br>
      if ($memcached_index = 1){<br>
         memcached_pass <a href="http://172.28.144.53:11211" target="_blank">172.28.144.53:11211</a> &lt;<a href="http://172.28.144.53:11211" target="_blank">http://172.28.144.53:11211</a>&gt;;        }<br>
<br>
      error_page 404 @fallback;<br>
    }<br>
  }<br>
}<br>
<br>
</blockquote>
<br>
<br>
-- <br>
Deomid &quot;rojer&quot; 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>