検索
ホームページバックエンド開発Python チュートリアル.ebextensions を介して Elastic Beanstalk で Supervisord を使用して Celery Worker をセットアップする

Setup Celery Worker with Supervisord on elastic beanstalk via .ebextensions

はじめに: スケーラブルなアプリケーションのバックボーン

堅牢でスケーラブルなアプリケーションを構築するには、多くの場合、複数のサーバーまたはスレッドで効率的に処理できるタスクを処理する必要があります。画像の処理、電子メールの送信、またはデータ量の多い計算の実行のいずれであっても、これらのタスクをタスク キューにオフロードすることがベスト プラクティスです。 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 とは何ですか?

AWS Elastic Beanstalk は、アプリケーションのデプロイ、スケーリング、管理を自動化するフルマネージド サービスです。これにより、インフラストラクチャ管理の複雑さの多くが抽象化され、開発者はサーバーの構成ではなくコードの作成に集中できるようになります。 Elastic Beanstalk は、単純な Web サーバーから Celery ワーカーのようなより複雑なセットアップまで、さまざまな環境をサポートします。

Text2Infographic にとって、Elastic Beanstalk のスケーラビリティとシンプルさは非常に貴重でした。ユーザーの需要が変動しても、ワーカー インスタンスを動的にスケールできる機能により、ピーク時であってもジョブが効率的に処理されます。

.ebextensions とは何ですか?

.ebextensions は、デプロイ中に環境をカスタマイズできる Elastic Beanstalk の機能です。 .ebextensions 構成ファイルを使用すると、次のことが可能になります。

必要なソフトウェアと依存関係をインストールします。
Supervisord や Celery ワーカーなどのサービスを構成します。
環境変数を追加し、権限を管理します。
これにより、デプロイのたびに手動で介入することなく、Celery と Supervisord を Elastic Beanstalk デプロイにシームレスに統合できるようになります。

Text2Infographic にセロリを使用する理由

Text2Infgraphic は、マーケティング担当者やコンテンツ作成者がブログ投稿を魅力的なインフォグラフィックに変換できるように設計されています。各インフォグラフィック生成リクエストは、AI ベースのトピック調査、デザインの最適化、ベクター グラフィックの調達など、大量の計算を必要とします。シームレスなユーザー エクスペリエンスを維持するには、これらのタスクを、複数のリクエストを同時に処理できるバックグラウンド ワーカーにオフロードする必要があります。 Celery の非同期タスク処理とスケーラビリティにより、Celery は当然の選択となりました。

なぜスーパーバイザー付きなのか?

Elastic Beanstalk は Web サーバーをネイティブに管理できますが、Celery ワーカーのようなバックグラウンド プロセスのサポートは組み込まれていません。スーパーバイザーを入力します。 Celery ワーカー プロセスのスーパーバイザーとして機能し、継続的に実行され、失敗した場合には自動的に再起動されるようにします。この信頼性は、インフォグラフィック生成リクエストを中断なく処理するために非常に重要です。

準備が整ったところで、Elastic Beanstalk で Celery、Supervisord、eb_extensions を設定してアプリケーション用のスケーラブルで効率的なタスクキューを作成する技術的な詳細を見ていきましょう。

ステップバイステップ: Elastic Beanstalk で Supervisord を使用して Celery をセットアップする

このセクションでは、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_ などの数字を付けます。

eb_extensions を使った楽しいトリック

デバッグが簡単に: 何かが機能しない場合は、一時コンテナ コマンドを追加して、環境変数を出力するか、ディレクトリの内容をリストします:

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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonの実行モデル:コンパイル、解釈、またはその両方?Pythonの実行モデル:コンパイル、解釈、またはその両方?May 10, 2025 am 12:04 AM

pythonisbothcompiledinterted.whenyourunapythonscript、itisfirstcompiledintobytecode、これはdenepythonvirtualmachine(pvm).thishybridapproaChallowsforplatform-platform-denodent-codebutcututicut。

Pythonはラインごとに実行されますか?Pythonはラインごとに実行されますか?May 10, 2025 am 12:03 AM

Pythonは厳密に行ごとの実行ではありませんが、最適化され、インタープレーターメカニズムに基づいて条件付き実行です。インタープリターは、コードをPVMによって実行されるBytecodeに変換し、定数式または最適化ループを事前促進する場合があります。これらのメカニズムを理解することで、コードを最適化し、効率を向上させることができます。

Pythonの2つのリストを連結する代替品は何ですか?Pythonの2つのリストを連結する代替品は何ですか?May 09, 2025 am 12:16 AM

Pythonに2つのリストを接続する多くの方法があります。1。オペレーターを使用しますが、これはシンプルですが、大きなリストでは非効率的です。 2。効率的ですが、元のリストを変更する拡張メソッドを使用します。 3。=演算子を使用します。これは効率的で読み取り可能です。 4。itertools.chain関数を使用します。これはメモリ効率が高いが、追加のインポートが必要です。 5。リストの解析を使用します。これはエレガントですが、複雑すぎる場合があります。選択方法は、コードのコンテキストと要件に基づいている必要があります。

Python:2つのリストをマージする効率的な方法Python:2つのリストをマージする効率的な方法May 09, 2025 am 12:15 AM

Pythonリストをマージするには多くの方法があります。1。オペレーターを使用します。オペレーターは、シンプルですが、大きなリストではメモリ効率的ではありません。 2。効率的ですが、元のリストを変更する拡張メソッドを使用します。 3. Itertools.chainを使用します。これは、大規模なデータセットに適しています。 4.使用 *オペレーター、1つのコードで小規模から中型のリストをマージします。 5. numpy.concatenateを使用します。これは、パフォーマンス要件の高い大規模なデータセットとシナリオに適しています。 6.小さなリストに適したが、非効率的な追加方法を使用します。メソッドを選択するときは、リストのサイズとアプリケーションのシナリオを考慮する必要があります。

コンパイルされた通信言語:長所と短所コンパイルされた通信言語:長所と短所May 09, 2025 am 12:06 AM

compiledlanguagesOfferspeedandsecurity、foredlanguagesprovideeaseofuseandportability.1)compiledlanguageslikec arefasterandsecurebuthavelOnderdevelopmentsplat dependency.2)

Python:ループのために、そして最も完全なガイドPython:ループのために、そして最も完全なガイドMay 09, 2025 am 12:05 AM

Pythonでは、forループは反復可能なオブジェクトを通過するために使用され、条件が満たされたときに操作を繰り返し実行するためにしばらくループが使用されます。 1)ループの例:リストを通過し、要素を印刷します。 2)ループの例:正しいと推測するまで、数値ゲームを推測します。マスタリングサイクルの原則と最適化手法は、コードの効率と信頼性を向上させることができます。

Python concatenateリストを文字列に入れますPython concatenateリストを文字列に入れますMay 09, 2025 am 12:02 AM

リストを文字列に連結するには、PythonのJoin()メソッドを使用して最良の選択です。 1)join()メソッドを使用して、 '' .join(my_list)などのリスト要素を文字列に連結します。 2)数字を含むリストの場合、連結する前にマップ(str、数字)を文字列に変換します。 3) '、'などの複雑なフォーマットに発電機式を使用できます。 4)混合データ型を処理するときは、MAP(STR、Mixed_List)を使用して、すべての要素を文字列に変換できるようにします。 5)大規模なリストには、 '' .join(lage_li)を使用します

Pythonのハイブリッドアプローチ:コンピレーションと解釈を組み合わせたPythonのハイブリッドアプローチ:コンピレーションと解釈を組み合わせたMay 08, 2025 am 12:16 AM

pythonusesahybridapproach、コンコイリティレーショントビテコードと解釈を組み合わせて、コードコンピレッドフォームと非依存性bytecode.2)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター