コネクションプーリングとは
- DB接続を予めいくつか開いて保持
- リクエストが来たら払い出し
- リクエストが終わったら戻す
存在意義
- レスポンス対策と流量制限
- DB接続、特にRDBの接続は開くのに時間がかかる
- リクエストが来る度に開いていたら毎リクエストが数秒遅延
- Webアプリはいつどのくらいリクエストが来るか予測できない
- リクエストが来る度に開いていたら上限に達する
接続数が足りないときは
- 一定数を新たに開く
- 上限はある
- 上限に達した場合は待ちが発生する
スケールアウト環境の考慮点
- APサーバのインスタンスが増えるとプーリングも増えることに注意が必要
- 例えば、最大100接続開く設定にしていたとして、インスタンス数上限が30だとすると、最大のDB接続数は?
スケールアウト環境の最適解
- AWSであれば、コネクションプーリングしてくれるサービスがある(RDS Proxy)
残念ながらAzureには同等のサービスがないっぽい・・・ - そもそも、接続にかかる時間が問題にならないDBを使う
- AzureならCosmos DB
- AWSならDynamo DB
最後に
- 仕組みを知っておくことが超重要!!
- スケールアウトとコネクションプーリングの仕組みを知ることで適切なチューニングが出来るようになる
- そもそもプーリングが必要ないサービスの採用も検討の価値あり