名前

Mojo::Server::Hypnotoad - プロダクション環境のWebサーバー

使い方

use Mojo::Server::Hypnotoad;

my $hypnotoad = Mojo::Server::Hypnotoad->new;
$hypnotoad->run('/home/sri/myapp.pl');

説明

Mojo::Server::Hypnotoadは完全の機能を備えたUNIXに最適化された プリフォークの非同期IOのHTTPとWebSocketの組み込みのサーバーです。 とてもよく試験されて信頼性のある Mojo::Server::Preforkの上に 構築されており、IPv6, TLS, コメット(ロングポーリング), キープアライブ, コネクションポーリング、タイムアウト,クッキー, マルチパート, 複数のイベントループとホットデプロイメントがサポートされています。 サーバーはプロセス管理のためにシグナルを使用しているので シグナルハンドラーをアプリケーションの中で 修正するのは避けるべきです。

これを使ってアプリケーションをスタートするには、 hypnotoadスクリプトを使用してください。 MojoliciousMojolicious::Liteアプリケーションは、デフォルト でproductionモードで実行されます。

$ hypnotoad ./myapp.pl

自動的なホットデプロイメントをするには、同じコマンドをもう一度実行します。

$ hypnotoad ./myapp.pl
Starting hot deployment for Hypnotoad server 31841.

This second invocation will load the application again, detect the process id file with it, and send a "USR2" signal to the already running server.

この2回目の呼び出しはアプリケーションを再度ロードし、プロセスIDを検出します。 それをファイル化し、すでに動いているサーバに"USR2"シグナルを送ります。

よりよりスケーラビリティ(epoll, kqueue)と、ノンブロッキング名前解決、SOCKS5とTLSサポートは、 オプションのモジュールとしてEV(4.0+), Net::DNS::Native (0.15+) IO::Socket::SSL(2.009+), IO::Socket::Socks (0.64+)が 透過的にサポートされ、インストールされていれば利用されます。 個々の機能はMOJO_NO_IPV6MOJO_NO_TLS環境変数で無効にすることもできます。

hypnotoadスクリプトを使ってアプリケーションをスタートするためには以下のようにします。

$ hypnotoad myapp.pl
Server available at http://127.0.0.1:8080.

自動的なホットデプロイのために、もう一度まったく同じコマンドを実行することができます。

$ hypnotoad myapp.pl
Starting hot deployment for Hypnotoad server 31841.

二回目の実行は、プロセスIDファイルを検知して、 すでに実行されているサーバーにUSR2シグナルを送り 再びアプリケーションをロードします。

よりよいスケーラビリティ(epoll, kqueue)、ノンブロッキングの名前解決、 SOCK5、TLSサポートも以下のモジュールによってサポートされます。 オプションのモジュールとしてEV(4.0+), Net::DNS::Native (0.15+) IO::Socket::SSL(1.84+),IO::Socket::Socks (0.64+)、IO::Socket::SSL (1.94+)が 透過的にサポートされ、インストールされていれば利用されます。 個々の機能はMOJO_NO_NDNMOJO_NO_IPV6MOJO_NO_TLS環境変数で無効にすることもできます。

デプロイメントのレシピはMojolicious::Guides::Cookbookを見てください。

マネージャーシグナル

シグナルを使って実行中にhypnotoadを制御することができます。

INT, TERM

すぐにサーバーをシャットダウンします。

QUIT

緩やかにサーバーをシャットダウンします。

TTIN

ワーカープールをひとつ増やします。

TTOU

ワーカープールをひとつ減らします。

USR2

入ってくる接続をひとつも失うことなく、ゼロダウンタイムのソフトウェア アップグレード(ホットデプロイメント)を試みます。

Manager (old)
|- Worker [1]
|- Worker [2]
|- Worker [3]
|- Worker [4]
`- Manager
   |- Worker [1]
   |- Worker [2]
   |- Worker [3]
   `- Worker [4]

新しいマネージャは古いマネージャに自動的にQUITシグナルを送信し、 スタートアップに成功した後リクエストのサーブを引き継ぎます。

ワーカーシグナル

QUIT

緩やかにワーカーを停止します。

設定

Hypnotoadの設定ファイルはハッシュを返す通常のPerlスクリプトです。 サンプルはMojolicious::Guides::CookbookHypnotoadの 項目を見てください。

accepts

accepts => 100

ワーカーが緩やかに停止し、 新しく開始するワーカーで置き換えられる 前に受け入れることが可能な接続の最大数。 デフォルトはMojo::Server::Preforkacceptsの値。 この値を0に設定すると、ワーカーが新しい接続を無限に受け入れる ことを許可します。 この値の半分まではロードバランシングを改善するためにランダムに 減らされ、いったん限界に達すると、ワーカーはハートビートメッセージの送信を 停止することに注意してください。

backlog

backlog => 128

リッスンバックログサイズ。デフォルトはMojo::Server::Daemonbacklogの値。

clients

clients => 100

それぞれのワーカープロセスが、 新しくくる接続の受け入れを停止する前に、処理可能な 並列接続の最大数。デフォルトは、Mojo::IOLoopmax_connectionsの値。 アプリケーションがどれほどブロックするかどうかに依存して、 よりよりパフォーマンスのために、この値を減らし 代わりにワーカーを増やしたい場合があるかもしれない ことに注意してください。

graceful_timeout

graceful_timeout => 15

緩やかなワーカーの停止が、強制的なものになるまでの秒数。 デフォルトはMojo::Server::Preforkgraceful_timeoutの値。

heartbeat_interval

heartbeat_interval => 3

ハートビートの間隔の秒数。デフォルトはMojo::Servergroupの値。

heartbeat_timeout

heartbeat_timeout => 5

ハートビートのないワーカーが停止するまでの秒数。 デフォルトはMojo::Server::Preforkheartbeat_intervalの値。

inactivity_timeout

inactivity_timeout => 10

接続が閉じられるまでに非アクティブでいることができる最大の秒数。 デフォルトはMojo::Server::Daemoninactivity_timeoutの値。 この値を0に設定すると、永久に非アクティブにしておくことができます。

listen

listen => ['http://*:80']

ポートとリッスンのためのファイルのリスト。デフォルトはhttp://*:8080Mojo::Server::Daemonlistenに多くの例があります。

pid_file

pid_file => '/var/run/hypnotoad.pid'

PIDファイルのフルパス。デフォルトはアプリケーションと同じ ディレクトリのhypnotoad.pid。 この値はサーバーが停止したときにのみ変更されることに 注意してください。

proxy

proxy => 1

リバースプロキシのサポートを有効にします。 X-Forwarded-ForX-Forwarded-Protoヘッダを 自動的に認識します。 デフォルトはMojo::Serverreverse_proxyの値です。

requests

requests => 50

接続あたりのキープアライブを維持するリクエストの数。 デフォルトは、Mojo::Server::Daemonmax_requestsの値。

spare

spare => 4

必要に応じて、一時的に、この数の追加のワーカーを生み出します。 デフォルトはMojo::Server::Preforkの"spare"の値です。古いワーカーがまだ緩やかにシャットダウン中で、新しいワーカーが開始されているときに、ワーカーの再起動のパフォーマンスコストを、大幅に減らします。

upgrade_timeout

upgrade_timeout => 45

ゼロダウンタイムソフトウェアアップグレードが行われてから 失敗するまでの秒数。デフォルトは60秒です。

workers

workers => 10

ワーカープロセスの数。デフォルトはMojo::Server::Preforkworkersの値。 経験則では、ほとんどがノンブロックの処理の場合は、 CPUコアあたり2ワーカープロセスを設定するのがよいでしょう。 ブロックする処理ではより多くの値を設定し、 並列のclientsの値を減らすこと(1程度に小さく)で利益を受けられます。 ゼロダウンタイムソフトウェアアップグレードの間は、短い時間だけ、2倍のワーカーが存在することに注意してください。

属性

Mojo::Server::Hypnotoadは次の属性を実装しています。

prefork

my $prefork = $hypnotoad->prefork;
$hypnotoad  = $hypnotoad->prefork(Mojo::Server::Prefork->new);

このサーバーが管理するMojo::Server::Preforkオブジェクト。

upgrade_timeout

my $timeout = $hypnotoad->upgrade_timeout;
$hypnotoad  = $hypnotoad->upgrade_timeout(15);

Maximum amount of time in seconds a zero downtime software upgrade may take before getting canceled, defaults to 60.

キャンセルされる前に、停止時間ゼロのソフトウェアアップグレードに要する最大時間(秒)。デフォルトは60秒です。

メソッド

Mojo::Server::HypnotoadMojo::Baseからすべての メソッドを継承しており、 次の新しいメソッドを実装しています。

configure

$hypnotoad->configure('hypnotoad');

アプリケーションの設定を元にサーバーを設定します。

run

$hypnotoad->run('script/my_app');

サーバーを開始します。

参考

Mojolicious, Mojolicious::Guides, http://mojolicio.us.

(Mojolicious 8.12を反映。2019年5月28日更新)