Skip to main content

Server

Overview

サーバサイドでの設計思想をまとめるセクション。

サーバーの起動プロセスについて

本番サーバーの起動ではプロセスマネージャーの使用が推奨されている。

  1. バックグラウンド実行が可能 通常、ターミナルから node server.js などで起動すると、そのプロセスはターミナルに依存する。
    そのため、ターミナルを閉じるとプロセスが停止する。
    PM2を使えば、アプリをバックグラウンドで動作させられるため、ターミナルを閉じてもプロセスは継続される。
  2. クラッシュ時の自動再起動 アプリケーションが何らかの理由でクラッシュした場合、手動で再起動が必要になる。
    PM2はクラッシュを検知すると自動的にアプリを再起動するため、サービス停止の時間を最小限に抑えることができる。
  3. クラスターモードでのスケーリング 通常のnodeコマンドは1つのスレッドで動作する。
    PM2のクラスターモードでは、CPUコア数に応じてプロセスを並列に生成でき、マルチスレッドのように処理できるようになる。
    これにより、同時リクエスト処理数を向上させ、アプリのスケーラビリティを向上できる。
  4. ログ管理がしやすい PM2は標準出力/エラー出力のログをファイルに出力し、エラーの発生状況を可視化しやすくなる。 また、コマンドを使ってログの確認やプロセスの監視も簡単に行える。
  5. デプロイとプロセス管理の一元化 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側が自動で行う。