問題数百の sidekiq バックグラウンド プロセスを実行する Rails アプリケーションがあります。それらはすべて 250 の接続を提供することに満足していない PostgreSQL データベースに接続します - それは可能ですが、すべての sidekiq プロセスが誤ってデータベースにクエリを送信すると、それは崩壊します。
オプション 1データベースの前に pgBouncer を追加することを考えていましたが、search_path
どの「国」(PostgreSQL スキーマ) を決定するために各ジョブ処理の開始時に を設定するかに大きく依存しているため、現在はトランザクション モードを使用できません。 (アパートメントジェム)に取り組む。この場合、セッション ベースの接続プーリング モードを使用する必要があります。ただし、これは、私の知る限り、各ジョブの処理後に接続を切断し、接続をプールに解放する必要があり、それはパフォーマンス面で非常にコストがかかりますよね? 私は何かを見逃していますか?
オプション 2アプリケーション層ベースの接続プールを使用することもオプションですが、sidekiq を使用して PostgreSQL でそれを行う方法がよくわかりません。
オプション 3私が思いもよらなかったことはありますか?