Phoenix で Poolboy を使ってコネクション(プロセス)プーリング

Poolboy を使ってコネクションプーリングができるようにする。接続先は memcached

memcached のクライアントにはmcdを使った。

サンプルのhello_phoenixを元にした。手を加えたファイルだけ以下に貼っておく (ちなみに Phoenix は v1.0.0)。

実行してみと、、、

% curl localhost:4000
{"val":"Hello Phoenix"}

成功。

メモ

  1. mcd はプロセスを生成した時点ではmemcached と接続されていない。ので、start_link してすぐに使おうとすると、結果が取れない。
  2. max_overflow の値を0以上にすると、プールしている数が size に達していてもさらにそこから max_overflow 分だけプロセスを生成する。
  3. max_overflow 分のプロセスは必要になった時点で生成されるので、01 で書いたとおり、コネクションが確立されていないプロセスが渡される時がある(というか、全てそうだった)。

感想

  • 既存ライブラリのおかげで簡単にプーリングできた。
  • Poolboy, mcd 両方とも、Erlang のライブラリ。Elixir を学ぶなら、Erlang を勉強しないとだめっぽい(動作を理解するのと、ライブラリの情報)。