LoginSignup
19
6

More than 5 years have passed since last update.

なぜconnection pool必要?

  • connectionの数が無限ではない、例えば、mysql、Redis、Http serverなどがサポートするMax connectionがある
  • リソースを作成するのに時間がかかる。例えば、毎回新しいDB connection、websocketを作成するとパフォーマンス低下になります。

connection poolの仕組みを紹介する面白い記事

connection poolの活用例

  • よく使うのはdatabase connection pool
  • web serviceの制限で、同時サポートできるconnection数が限られている場合

Generic connection pooling for Rubyを調べる

  • 特徴: 汎用的に、何でもpoolで管理できる
  • connection pool実装するときに押さえるべきポイント
    • lockが必要:複数のところで同時にconnection poolからconnectionを取ったり、戻したりするときに、競合が発生しないように、lockが必要
    • timeoutが必要:connectionの取り出しで、connection poolが使い切った場合、一定の時間を待て、諦める

なぜ分散connection pool必要?

複数processや、分散サーバで処理を実行するときも、同じpoolを共有することができない

解決案を探る

  • まず分散処理でも使えるlockが必要で、このredlock-rb gemを発見
  • poolのサイズを管理する必要があるので、redisを使うと分散処理で、同じ情報を参照することができる

分散connection poolを実装して見ました

初期版はここ:https://github.com/qiuyin/connection_pool
表のConnectionPoolクラスは基本そのままで、分散queueを追加して、分散connection poolを実現しました。
新規に追加した分散queue: lib/connection_pool/distributed_sized_queue.rb

19
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
6