堅牢でスケーラブルなアプリケーションを構築するには、多くの場合、複数のサーバーまたはスレッドで効率的に処理できるタスクを処理する必要があります。画像の処理、電子メールの送信、またはデータ量の多い計算の実行のいずれであっても、これらのタスクをタスク キューにオフロードすることがベスト プラクティスです。 AI を活用したインフォグラフィック ジェネレーターである Text2Infgraphic の課題は明らかでした。スムーズなユーザー エクスペリエンスを維持しながら、多数の同時送信ジョブを効率的に処理する必要がありました。このため、強力な分散タスク キューである Celery とプロセス管理システムである Supervisord を採用することにしました。これらはすべて、次の機能を使用して AWS Elastic Beanstalk にシームレスにデプロイされました。 .ebextensions.
これは、Elastic Beanstalk で Supervisord を使用して Celery ワーカーを設定する方法のステップバイステップのガイドです。まず最初に、このセットアップの主要なコンポーネントと、それらが不可欠な理由を明らかにしましょう。
Celery の核心は、時間のかかるタスクを別のプロセスまたはサーバーにオフロードできる分散タスク キュー システムです。これは、バックグラウンド ジョブを非同期またはスケジュールに従って実行するために、Python アプリケーションで広く使用されています。 Text2Infgraphic にとって、Celery は、ユーザー入力からカスタム インフォグラフィックを生成する計算集約的なプロセスを処理するための完璧なソリューションでした。
セロリを使用する利点:
非同期実行: メイン アプリケーションをブロックすることなく、タスクをバックグラウンドで実行できます。
スケーラビリティ: 負荷の増加に対処するためにワーカーを簡単に追加します。
拡張性: RabbitMQ や Redis などのさまざまなメッセージ ブローカーと統合します。
Celery ワーカーなどのプロセスを手動で管理するのは、特にクラッシュ後やデプロイ中にプロセスを自動的に再起動する必要がある場合に面倒になる可能性があります。 Supervisord は、プロセスを監視し、プロセスが確実に稼働し続けるようにすることで、この問題を解決する軽量のプロセス制御システムです。
Supervisord を使用すると、次のことが可能になります。
Celery ワーカーが失敗した場合は自動的に再起動します。
単一の構成ファイルでプロセス管理を簡素化します。
デバッグと監視を改善するために、プロセス アクティビティをログに記録します。
AWS Elastic Beanstalk は、アプリケーションのデプロイ、スケーリング、管理を自動化するフルマネージド サービスです。これにより、インフラストラクチャ管理の複雑さの多くが抽象化され、開発者はサーバーの構成ではなくコードの作成に集中できるようになります。 Elastic Beanstalk は、単純な Web サーバーから Celery ワーカーのようなより複雑なセットアップまで、さまざまな環境をサポートします。
Text2Infographic にとって、Elastic Beanstalk のスケーラビリティとシンプルさは非常に貴重でした。ユーザーの需要が変動しても、ワーカー インスタンスを動的にスケールできる機能により、ピーク時であってもジョブが効率的に処理されます。
.ebextensions は、デプロイ中に環境をカスタマイズできる Elastic Beanstalk の機能です。 .ebextensions 構成ファイルを使用すると、次のことが可能になります。
必要なソフトウェアと依存関係をインストールします。
Supervisord や Celery ワーカーなどのサービスを構成します。
環境変数を追加し、権限を管理します。
これにより、デプロイのたびに手動で介入することなく、Celery と Supervisord を Elastic Beanstalk デプロイにシームレスに統合できるようになります。
Text2Infgraphic は、マーケティング担当者やコンテンツ作成者がブログ投稿を魅力的なインフォグラフィックに変換できるように設計されています。各インフォグラフィック生成リクエストは、AI ベースのトピック調査、デザインの最適化、ベクター グラフィックの調達など、大量の計算を必要とします。シームレスなユーザー エクスペリエンスを維持するには、これらのタスクを、複数のリクエストを同時に処理できるバックグラウンド ワーカーにオフロードする必要があります。 Celery の非同期タスク処理とスケーラビリティにより、Celery は当然の選択となりました。
Elastic Beanstalk は Web サーバーをネイティブに管理できますが、Celery ワーカーのようなバックグラウンド プロセスのサポートは組み込まれていません。スーパーバイザーを入力します。 Celery ワーカー プロセスのスーパーバイザーとして機能し、継続的に実行され、失敗した場合には自動的に再起動されるようにします。この信頼性は、インフォグラフィック生成リクエストを中断なく処理するために非常に重要です。
準備が整ったところで、Elastic Beanstalk で Celery、Supervisord、eb_extensions を設定してアプリケーション用のスケーラブルで効率的なタスクキューを作成する技術的な詳細を見ていきましょう。
このセクションでは、Elastic Beanstalk で Supervisord を使用して Celery をセットアップするために必要な .ebextensions ファイルについて説明します。各ステップは、よくある落とし穴を回避するためのヒントとともに詳細に説明されています。
1. Supervisord
をインストールしています
ファイル: 01_install_supervisord.config
このファイルは Supervisord をインストールし、プロセスを安全に実行するための非 root ユーザーをセットアップします。
commands: 01_install_pip: command: "yum install -y python3-pip" ignoreErrors: true 02_install_supervisor: command: "/usr/bin/pip3 install supervisor" 03_create_nonroot_user: command: "useradd -r -M -s /sbin/nologin nonrootuser || true" ignoreErrors: true
説明:
Install pip: Python のパッケージ マネージャーが利用可能であることを確認します。
Supervisor のインストール: pip を使用して、軽量で強力なプロセス マネージャーである Supervisord をインストールします。
非 root ユーザーの作成: ログイン シェルやホーム ディレクトリを持たない制限付きユーザー (非 root ユーザー) を追加します。非 root ユーザーとしてプロセスを実行することは、セキュリティのベスト プラクティスです。
? ヒント: 繰り返しのデプロイメント中にコマンドが失敗する可能性がある場合は、常にignoreErrors: true を使用してください。これにより、ユーザーまたはパッケージがすでに存在する場合でもデプロイメントが失敗することがなくなります。
2.古いプロセスのクリーンアップ
ファイル: 02_cleanup_existing_supervisord.config
このファイルは、デプロイメント間で残る可能性のある古い Supervisord インスタンスとソケット ファイルのクリーンアップを処理します。
commands: kill_existing_supervisord: command: "pkill supervisord || true" ignoreErrors: true remove_stale_socket: command: "rm -f /tmp/supervisor.sock" ignoreErrors: true
説明:
既存の Supervisord を強制終了します: 迷走している Supervisord プロセスが実行されていないことを確認します。 || true の部分は、プロセスが見つからない場合にこのコマンドがエラーをスローしないことを保証します。
古いソケットの削除: Supervisord の起動を妨げる可能性がある古い Supervisord ソケット ファイルを削除します。
? ヒント: Elastic Beanstalk のような環境では、デプロイメントにより以前の設定の残骸が残る場合があるため、ソケットとプロセスのクリーンアップが不可欠です。
3. Supervisord
を使用した Celery の構成
ファイル: 03_celery_configuration.config
このファイルは Supervisord 構成ファイルを作成し、Celery ワーカー プロセスを開始します。
files: "/etc/supervisord.conf": mode: "000644" owner: root group: root content: | [unix_http_server] file=/tmp/supervisor.sock chmod=0770 chown=root:nonrootuser [supervisord] logfile=/var/log/supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=info pidfile=/tmp/supervisord.pid nodaemon=false minfds=1024 minprocs=200 user=root [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock [program:celery] command=celery -A application.celery worker --loglevel=INFO directory=/var/app/current autostart=true autorestart=true startsecs=10 stopwaitsecs=600 stdout_logfile=/var/log/celery_worker.log stderr_logfile=/var/log/celery_worker.err.log environment=PATH="/var/app/venv/staging-LQM1lest/bin:$PATH" user=nonrootuser
説明:
制御用の Unix ソケット: unix_http_server セクションは、Supervisord と対話するための安全なソケットを作成します。
ログ: ログは /var/log/supervisord.log に保存され、ディスク使用量が制御不能になるのを防ぐローテーション ポリシーが適用されます。
Celery プログラム ブロック:
コマンド: アプリケーション構成を使用して Celery ワーカーを実行します。
自動起動と自動再起動: デプロイ時に Celery が自動的に起動し、失敗した場合には再起動します。
ログ: Celery の出力を /var/log/celery_worker.log および /var/log/celery_worker.err.log に記録します。
環境: 正しい Python 仮想環境が使用されていることを確認します。
? ヒント: directory=/var/app/current を使用して、Supervisord がアプリケーションのデプロイメント ディレクトリを指すようにします。このディレクトリは、Elastic Beanstalk のデプロイメントごとに更新されます。
4.スーパーバイザーを開始します
ファイル: 03_celery_configuration.config (続き)
container_commands: 01_start_supervisor: command: "supervisord -c /etc/supervisord.conf"
説明:
コンテナ コマンド: これらは、アプリケーションがデプロイされた後、環境が準備完了としてマークされる前に実行されます。ここで Supervisord を開始すると、アプリが公開されたときに Celery ワーカーが確実に実行されます。
? ヒント: Elastic Beanstalk はコンテナコマンドをアルファベット順に処理するため、実行順序を制御するにはコマンドの前に 01_ などの数字を付けます。
デバッグが簡単に: 何かが機能しない場合は、一時コンテナ コマンドを追加して、環境変数を出力するか、ディレクトリの内容をリストします:
commands: 01_install_pip: command: "yum install -y python3-pip" ignoreErrors: true 02_install_supervisor: command: "/usr/bin/pip3 install supervisor" 03_create_nonroot_user: command: "useradd -r -M -s /sbin/nologin nonrootuser || true" ignoreErrors: true
/var/log/eb-activity.log のログを確認します。
共通構成の再利用: 共有構成スニペットを別の YAML ファイルに保存し、include ディレクティブ (非公式にサポートされています) を使用して複数の .ebextensions ファイルに組み込みます。
このセットアップにより、Celery ワーカーが Supervisord で効率的に管理され、Elastic Beanstalk アプリケーションと並行して拡張できるようになります。インフォグラフィックの生成やその他のバックグラウンド タスクを処理する場合でも、このアプローチは信頼性、拡張性、安心感を提供します。
以上が.ebextensions を介して Elastic Beanstalk で Supervisord を使用して Celery Worker をセットアップするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。