Engineering from Scratch

エンジニア目指してます

2022/06/01

PumaとUnicorn

Unicorn

  • blocking
  • マルチプロセス
  • forkを使ったmaster-slave
      • unicorn-masterが起動するとunicorn-childをforkして生産する。暇になった,unicorn-childがunicorn-masterにリクエストを要求する。masterは要求のあったchildに処理を行わせるだけでよく,重い処理を行っているchildが処理を担当することがなくなる
    • メモリ効率がいい
    • プロセスが死ぬわけでないので,ダウンタイムが発生しない
    • デプロイが早くダウンタイムが発生しない
  • スロークライアント(リクエストが遅いクライアント)に弱い
    • スロークライアントが来た場合,workerが待ちのまま止まってしまう
    • リバースプロキシを挟んで,スロークライアントをバッファしてもらう必要がある

Puma

  • マルチプロセス
  • マルチスレッド
    • I/O waitが発生したときに,別スレッドの処理を進められる
    • スレッドセーフな実装をする必要がある
  • スロークライアントが来ても1つのスレッドが埋まるだけ

参考

blog.kasei-san.com

blog.willnet.in

techracho.bpsinc.jp

qiita.com