概要
puma/puma は簡単に言えば Ruby で Web アプリケーションを動作させるための Web Server です
単体では Web アプリケーションとして動作せず Rails や Sinatra と組み合わせて使います
今回は Sinatra と組み合わせて使い方を紹介します
環境
- Ruby 2.7.1p83
- Sinatra 2.0.8.1
- puma 4.3.3
インストール
bundle init
vim Gemfile
gem "puma"
gem "sinatra"
bundle config path vendor
bundle install
とりあえず動かしてみる
Sinatra は puma がインストールされている場合は WEBrick ではなく puma を優先的に使います
なので特に何も記載することなく自動的に puma を使ってくれます
vim config.ru
require './app.rb'
run WebApp
vim app.rb
require 'sinatra/base'
class WebApp < Sinatra::Base
get '/' do
'ok'
end
end
これで起動すると自動的に puma で Sinatra が起動します
bundle exec rackup config.ru
config/puma.rb を書いて puma をチューニングする
puma は config/puma.rb
を記載することで自分でいろいろとカスタマイズすることができます
例えば以下のように記載することで 3 つのワーカープロセスが動作することで cluster mode として動作させることができます
vim config/puma.rb
workers 3
preload_app!
bundle exec rackup config.ru
確かに先ほどと違って worker プロセスが 3 つほど起動しているのがわかります
マシンリソースとの相談ですが worker プロセスの数を増やすことで多くのリクエストを並列にさばくことができます
worker が起動する際に何か処理をさせたい場合
on_worker_boot
を定義することでワーカー起動時に何かしら処理をさせることができます
基本的には初期化処理になるのでロギングの設定やコネクションチェックなど行うと良いと思います
vim config/puma.rb
workers 3
preload_app!
on_worker_boot do
puts 'Before worker fork...'
end
bundle exec rackup config.ru
ちなみに定義できるハンドラは dsl.rb で確認できます
起動するポートを変更する
port
を使います
vim config/puma.rb
workers 3
preload_app!
on_worker_boot do
puts 'Before worker fork...'
end
port 9999
などなどいろいろ設定できるので dsl.rb を確認してみてください
最後に
Sinatra を使って puma のチューニング方法を簡単に紹介しました
プロファイリングや負荷テストなどしながらやるとベストな設定が見つけられると思います
リバースプロキシなどを挟んでいる場合はそちらのチューニングも見る必要があるので注意しましょう
基本的にはリバースプロキシが捌けるであろうリクエスト数よりも puma のほうが多くリクエストを捌ける必要があると思います
0 件のコメント:
コメントを投稿