Server
Overview
サーバサイドでの設計思想をまとめるセクション。
サーバーの起動プロセスについて
本番サーバーの起動ではプロセスマネージャーの使用が推奨されている。
- バックグラウンド実行が可能
通常、ターミナルから
node server.js
などで起動すると、そのプロセスはターミナルに依存する。
そのため、ターミナルを閉じるとプロセスが停止する。
PM2を使えば、アプリをバックグラウンドで動作させられるため、ターミナルを閉じてもプロセスは継続される。 - クラッシュ時の自動再起動
アプリケーションが何らかの理由でクラッシュした場合、手動で再起動が必要になる。
PM2はクラッシュを検知すると自動的にアプリを再起動するため、サービス停止の時間を最小限に抑えることができる。 - クラスターモードでのスケーリング
通常のnodeコマンドは1つのスレッドで動作する。
PM2のクラスターモードでは、CPUコア数に応じてプロセスを並列に生成でき、マルチスレッドのように処理できるようになる。
これにより、同時リクエスト処理数を向上させ、アプリのスケーラビリティを向上できる。 - ログ管理がしやすい PM2は標準出力/エラー出力のログをファイルに出力し、エラーの発生状況を可視化しやすくなる。 また、コマンドを使ってログの確認やプロセスの監視も簡単に行える。
- デプロイとプロセス管理の一元化 PM2にはエコシステムファイル(ecosystem.config.js)を作成しておくと、環境変数、リスタートポリシー、クラスターモード設定などを一元管理できる。 デプロイや環境設定の変更も容易になります。
Adonis.jsはシングルスレッドモデルのNode.jsを効率的に本番運用するために、PM2のようなプロセスマネージャーの利用を推奨しています。 特に、自動再起動・クラスターモード・ログ管理・バックグラウンド実行など、本番運用に必要な機能をまとめて提供してくれるため、冗長化や信頼性向上が簡単になります。 結果として、システムのダウンタイムを最小限に抑えることができます。
サーバーの起動プロセスについて(AWS Lambdaのようなサーバーレス環境)
AWS Lambdaのようなサーバーレス環境では、通常のサーバー起動プロセスやバックグラウンドでのプロセス管理は行われない。
- リクエストごとの関数実行
Lambdaは「イベント駆動型」であり、HTTPリクエストやS3イベントなどのトリガーが発生するたびに、関数が必要な分だけインスタンス化され実行される。
プロセスマネージャー の代わりに、AWS自体がインフラを管理し自動スケーリングを行う。 - AdonisJSをLambdaで利用する際のポイント Lambdaでは「常時稼働型サーバー」ではなく、リクエスト時にAPIエントリーポイントを即座に呼び出す形。 Express AdapterのようにHTTPリクエストを処理する専用のエントリーポイントを設け、AdonisJSのリクエスト処理部分をそのまま再利用する方法が一般的。
- Lambdaなどのサーバーレス環境では、プロセスマネージャーが不要で、イベント駆動型で関数が呼び出される。
- バックグラウンド実行や常時稼働の必要がないため、スケーリングやプロセス管理はAWS側が自動で行う。