で、プロセスとキューの振り分けには色々あるけど、ウチはdefault+mailers、push、pullが、VPSを2つ使ってトータル12プロセス。これだと優先順位が付かないので、defaultを優先するために3つめのVPSでdefaultのプロセスだけ立ち上げておこうかと思っている。
defaultが動いていればサーバ内での処理は全て安定して動くので、他が詰まっていても快適に使える。
best-friends.cahtはdefault+mailersを受け持つサーバ、push+pullを受け持つサーバ(extra)の2系統に分けて、必要に応じてそれぞれ増減させる手法だったかな。
@noellabo 最近気づいたのは『キューづまりを起こしてるからって安易に extra を増やすと、 fetch される web に負荷が一時的にスライドして問題を起こす』です。なんで、外部配送の増強時はその後にくる問い合わせに合わせて Rails も増やさないとダメなんだなーと思っています
@rosylilly おぉ……知見だ……。
一般に、ボトルネックは解消すると別の場所に移動するので、動かしながらどこでバランスするか見極めておかないといけませんね。
pumaの方は、2台のVPS(先程のsidekiqと同居)にWEB_CONCURRENCY=4 がそれぞれ置かれていて、別の入口になるサーバから、HAProxyでラウンドロビンしている。(ロードバランサー)
最近、その外側にCloudflareが加わっている。これはあっても無くても良い。以前はCloudflareでロードバランシングしていたんだけど、そこそこ金が掛かるので切り替えた。
pumaとsidekiqは、ともにPostgreSQLに接続するので、pgbouncerで接続数を制御するのと、PostgreSQLを2台動かしてレプリケーションし、読み出しだけで良いアクセスについてはレプリカ側にアクセスさせている(リードレプリカという手法)。
(オーバースペックなのでこのへんは真似しなくて良いです)