Cache::Memcached::Fast の weight をでかくすると地球がやばい
Cache::Memcached::Fast はデフォルトで consistent hashing してくれる。で、servers に weight を渡すと振り分けの重み付けをしてくれるわけだが、これを ketama_points に大きな値を指定し、かつ 100 とかにして new したら死ぬほど遅くなった。
とある環境でいきなりインスタンス生成がクソ遅くなって、なかなか原因がわからなくて超ハマったのでメモ。
考えてみれば ketama るので、超巨大な配列が内部で作られるから当然っちゃ当然。
デフォルトは ketama_points => 0 だけど、普通 200〜300 位を指定しているはず。
use strict; use warnings; use Benchmark qw(cmpthese); use Cache::Memcached::Fast; cmpthese 100 => { 'little' => sub { Cache::Memcached::Fast->new({ servers => [ { address => 'zigorou', weight => 1.0 }, { address => 'nekokak', weight => 1.0 }, ], ketama_points => 300, }); }, 'big' => sub { Cache::Memcached::Fast->new({ servers => [ { address => 'zigorou', weight => 100 }, { address => 'nekokak', weight => 100 }, ], ketama_points => 300, }); }, }, 'all';
big の方は終わらない。