MySQLでconnection poolingを行いたい
JavaでJdbc使えば、connection poolingなんて普通でしょ?
LL言語でMySQLとの接続数を減らせないかということで、Database Proxy, Database Router, MaxScale | MariaDBを試してみた。効果あり。

テスト環境
MaxScaleでコネクションを減らせるのか、テスト環境を作って試してみる。Docker便利だ。公式イメージを使って手短に用意する。
テストデータは テストデータ・ジェネレータ を使ってみた。画面に表示されたデータをGoogleスプレッドシートに貼って、csv出力してから bulk insert のsqlに手直しして、DBに投入。テーブル構造はmaxscale-sample/rdb/sql at master · hiroaki0404/maxscale-sampleを参照。
テスト用のWebアプリも手抜き。pythonってほとんど使った事ないけど、このテストではLL言語でアプリを書きたかったので、試してみた。
テスト実施
docker-compose upとすれば、DB, MaxScale, Webアプリが立ち上がる。DBコンテナにnet-toolsを入れて、netstatでコネクションをみながら、Webアプリに対してApache Benchでアクセスしてみる。すると、同時アクセス数が増えてもDBのコネクション数は増えていない。
結論というには雑だけど
雑なテストだけど、同時アクセス数を100にしてもmysql側のコネクションは増えない(2のままだった)ので、効果はあった。
「コネクションプーリング」と言っても、実は2つのことを指しているので(コネクションプーリングの話 – naoyaのはてなダイアリー参照)、「接続数を減らす効果があるか」という点に絞り、環境を作って試してみた。AWS LambdaとRDBは相性が悪いと言われているが、間にこういったプロキシーを挟めば、なんとかできるのではないだろうか?失敗事例すら見かけないのが不安だが。
コメント