nginx и несколько memcached серверов

Deomid Ryabkov myself at rojer.pp.ru
Sun Oct 25 23:05:35 MSK 2009


Andrey Zloy wrote:
> Сдвиг на 16 бит потому что это алгоритм из Cache::Memcached. думаю что 
> они сдвигают биты для получения меньшего числа. Ведь нет смысла делить 
> огромное число, если нужен лишь остаток от деления.
наоборот, если цель - получить осттаок от деления, то нет смысла 
сдвигать. и уж тем более нет смысла накладывать маску 0x7fff.
сдвигать есть смысл только в том случае, если в нижних битах по какой-то 
причине недостаточно энтропии.
может, конечно, я чего-то не понимаю, пусто тогда другие участники меня 
поправят. в чём сермяжная правда использования верхних 16 бит, а не нижних?
мой вариант: (CRC32(uri) ^ CRC32(args)) % num_servers, без 
предварительной конкатенации - xor двух crc32 ничем не хуже, чем CRC32 
от конкатенации.

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


-- 
Deomid "rojer" Ryabkov
myself at rojer.pp.ru
rojer at sysadmins.ru
ICQ: 8025844

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3308 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20091025/dbfb7e63/attachment.bin>


More information about the nginx-ru mailing list