Heim >Backend-Entwicklung >Python-Tutorial >Richten Sie Celery Worker mit Supervisord auf der elastischen Bohnenstange über .ebextensions ein

Richten Sie Celery Worker mit Supervisord auf der elastischen Bohnenstange über .ebextensions ein

Patricia Arquette
Patricia ArquetteOriginal
2024-12-17 12:40:24933Durchsuche

Setup Celery Worker with Supervisord on elastic beanstalk via .ebextensions

Einführung: Das Rückgrat skalierbarer Anwendungen

Das Erstellen einer robusten, skalierbaren Anwendung bedeutet oft, dass man sich mit Aufgaben befassen muss, die mehr erfordern, als ein einzelner Server oder Thread effizient bewältigen kann. Unabhängig davon, ob es um die Verarbeitung von Bildern, das Versenden von E-Mails oder die Durchführung datenintensiver Berechnungen geht, ist das Auslagern dieser Aufgaben in eine Aufgabenwarteschlange eine bewährte Vorgehensweise. Für Text2Infographic, meinen KI-gestützten Infografik-Generator, war die Herausforderung klar: Ich musste zahlreiche gleichzeitige Auftragsübermittlungen effizient bearbeiten und gleichzeitig ein reibungsloses Benutzererlebnis gewährleisten. Dies veranlasste mich, Celery, eine leistungsstarke verteilte Aufgabenwarteschlange, und Supervisord, ein Prozessmanagementsystem, einzuführen, die alle nahtlos auf AWS Elastic Beanstalk mithilfe der Leistungsfähigkeit von bereitgestellt wurden .ebextensions.

Hier ist eine Schritt-für-Schritt-Anleitung, wie ich einen Celery-Worker mit Supervisord auf Elastic Beanstalk einrichte. Aber lassen Sie uns zunächst die Schlüsselkomponenten dieses Setups erläutern und erklären, warum sie wichtig sind.

Was ist Sellerie?

Im Kern ist Celery ein verteiltes Aufgabenwarteschlangensystem, mit dem Sie zeitaufwändige Aufgaben auf separate Prozesse oder Server verlagern können. Es wird häufig in Python-Anwendungen verwendet, um Hintergrundjobs asynchron oder nach einem Zeitplan auszuführen. Für Text2Infographic war Celery die perfekte Lösung, um den rechenintensiven Prozess der Generierung benutzerdefinierter Infografiken aus Benutzereingaben zu bewältigen.

Einige Vorteile der Verwendung von Sellerie:

Asynchrone Ausführung: Aufgaben können im Hintergrund ausgeführt werden, ohne die Hauptanwendung zu blockieren.
Skalierbarkeit: Fügen Sie ganz einfach weitere Mitarbeiter hinzu, um die erhöhte Last zu bewältigen.
Erweiterbarkeit: Integriert sich in verschiedene Nachrichtenbroker wie RabbitMQ oder Redis.

Was ist Supervisord?

Die manuelle Verwaltung von Prozessen wie Celery-Workern kann mühsam werden, insbesondere wenn sie nach einem Absturz oder während der Bereitstellung automatisch neu gestartet werden müssen. Supervisord ist ein leichtes Prozesskontrollsystem, das dieses Problem löst, indem es Ihre Prozesse im Auge behält und sicherstellt, dass sie am Laufen bleiben.

Mit Supervisord können Sie:

Sellerie-Worker automatisch neu starten, wenn sie ausfallen.
Vereinfachen Sie die Prozessverwaltung mit einer einzigen Konfigurationsdatei.
Protokollieren Sie die Prozessaktivität zur besseren Fehlerbehebung und Überwachung.

Was ist AWS Elastic Beanstalk?

AWS Elastic Beanstalk ist ein vollständig verwalteter Dienst, der die Bereitstellung, Skalierung und Verwaltung von Anwendungen automatisiert. Es abstrahiert einen Großteil der Komplexität des Infrastrukturmanagements und ermöglicht es Entwicklern, sich auf das Schreiben von Code zu konzentrieren, anstatt Server zu konfigurieren. Elastic Beanstalk unterstützt verschiedene Umgebungen, von einfachen Webservern bis hin zu komplexeren Setups wie Celery Workern.

Für Text2Infographic waren die Skalierbarkeit und Einfachheit von Elastic Beanstalk von unschätzbarem Wert. Wenn die Benutzernachfrage schwankt, stellt die Möglichkeit zur dynamischen Skalierung von Worker-Instanzen sicher, dass Aufträge auch in Spitzenzeiten effizient verarbeitet werden.

Was sind .ebextensions?

.ebextensions ist eine Funktion von Elastic Beanstalk, mit der Sie Ihre Umgebung während der Bereitstellung anpassen können. Mit .ebextensions-Konfigurationsdateien können Sie:

Installieren Sie die erforderliche Software und Abhängigkeiten.
Konfigurieren Sie Dienste wie Supervisord und Celery Worker.
Fügen Sie Umgebungsvariablen hinzu und verwalten Sie Berechtigungen.
Dadurch ist es möglich, Celery und Supervisord nahtlos in Ihre Elastic Beanstalk-Bereitstellung zu integrieren, ohne bei jeder Bereitstellung manuell eingreifen zu müssen.

Warum Sellerie für Text2Infographic?

Text2Infographic wurde entwickelt, um Vermarktern und Content-Erstellern dabei zu helfen, Blog-Beiträge in beeindruckende Infografiken umzuwandeln. Jede Anfrage zur Generierung einer Infografik ist rechenintensiv und umfasst KI-basierte Themenrecherche, Designoptimierung und die Beschaffung von Vektorgrafiken. Um ein nahtloses Benutzererlebnis zu gewährleisten, müssen diese Aufgaben an einen Hintergrundarbeiter verlagert werden, der mehrere Anfragen gleichzeitig bearbeiten kann. Die asynchrone Aufgabenabwicklung und Skalierbarkeit von Celery machten es zur offensichtlichen Wahl.

Warum Supervisord?

Obwohl Elastic Beanstalk Webserver nativ verwalten kann, bietet es keine integrierte Unterstützung für Hintergrundprozesse wie Celery-Worker. Geben Sie Supervisord ein. Es fungiert als Supervisor für den Celery-Worker-Prozess und stellt sicher, dass dieser kontinuierlich ausgeführt wird und automatisch neu gestartet wird, wenn er ausfällt. Diese Zuverlässigkeit ist entscheidend für die unterbrechungsfreie Bearbeitung von Infografik-Erstellungsanfragen.

Sobald die Bühne bereit ist, tauchen wir in die technischen Details der Konfiguration von Celery, Supervisord und eb_extensions auf Elastic Beanstalk ein, um eine skalierbare und effiziente Aufgabenwarteschlange für Ihre Anwendung zu erstellen.

Schritt-für-Schritt: Sellerie mit Supervisord auf Elastic Beanstalk einrichten

In diesem Abschnitt gehen wir durch die .ebextensions-Dateien, die zum Einrichten von Celery mit Supervisord auf Elastic Beanstalk erforderlich sind. Jeder Schritt wird ausführlich erklärt und enthält Tipps, die Ihnen helfen, häufige Fallstricke zu vermeiden.

1. Supervisord installieren
Datei: 01_install_supervisord.config

Diese Datei installiert Supervisord und richtet einen Nicht-Root-Benutzer für die sichere Ausführung von Prozessen ein.

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

Erklärung:

Pip installieren: Stellt sicher, dass der Paketmanager von Python verfügbar ist.
Supervisor installieren: Verwendet pip, um Supervisord zu installieren, einen leichten und leistungsstarken Prozessmanager.
Nicht-Root-Benutzer erstellen: Fügt einen eingeschränkten Benutzer (Nicht-Root-Benutzer) ohne Login-Shell oder Home-Verzeichnis hinzu. Das Ausführen von Prozessen als Nicht-Root-Benutzer ist eine bewährte Sicherheitsmethode.

? Tipp: Verwenden Sie immer „ignoreErrors: true“, wenn Befehle bei wiederholten Bereitstellungen möglicherweise fehlschlagen. Dadurch wird sichergestellt, dass Ihre Bereitstellung nicht fehlschlägt, wenn der Benutzer oder das Paket bereits vorhanden ist.

2. Bereinigen veralteter Prozesse
Datei: 02_cleanup_existing_supervisord.config

Diese Datei übernimmt die Bereinigung alter Supervisord-Instanzen und Socket-Dateien, die möglicherweise zwischen Bereitstellungen verbleiben.

commands:
  kill_existing_supervisord:
    command: "pkill supervisord || true"
    ignoreErrors: true
  remove_stale_socket:
    command: "rm -f /tmp/supervisor.sock"
    ignoreErrors: true

Erklärung:

Vorhandenen Supervisord töten: Stellt sicher, dass keine verirrten Supervisord-Prozesse ausgeführt werden. Das || Der True-Teil stellt sicher, dass dieser Befehl keine Fehler auslöst, wenn kein Prozess gefunden wird.
Veralteten Socket entfernen:Löscht alle alten Supervisord-Socket-Dateien, die den Start von Supervisord verhindern könnten.

? Tipp: Das Bereinigen von Sockets und Prozessen ist in Umgebungen wie Elastic Beanstalk unerlässlich, in denen Bereitstellungen manchmal Reste früherer Konfigurationen hinterlassen können.

3. Sellerie mit Supervisord konfigurieren
Datei: 03_celery_configuration.config

Diese Datei erstellt die Supervisord-Konfigurationsdatei und startet den Celery-Worker-Prozess.

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

Erklärung:

Unix-Socket zur Steuerung: Der Abschnitt unix_http_server erstellt einen sicheren Socket für die Interaktion mit Supervisord.
Protokollierung: Protokolle werden in /var/log/supervisord.log gespeichert, mit einer Rotationsrichtlinie, um zu verhindern, dass die Festplattennutzung außer Kontrolle gerät.
Sellerie-Programmblock:
Befehl: Führt den Celery-Worker mit der Anwendungskonfiguration aus.
Autostart und automatischer Neustart: Stellt sicher, dass Celery bei der Bereitstellung automatisch startet und neu startet, wenn die Bereitstellung fehlschlägt.
Protokolle: Protokolliert die Ausgabe von Celery in /var/log/celery_worker.log und /var/log/celery_worker.err.log.
Umgebung: Stellt sicher, dass die richtige virtuelle Python-Umgebung verwendet wird.

? Tipp: Verwenden Sie „directory=/var/app/current“, um Supervisord auf das Bereitstellungsverzeichnis der Anwendung zu verweisen, das bei jeder Elastic Beanstalk-Bereitstellung aktualisiert wird.

4. Beginn Supervisord
Datei: 03_celery_configuration.config (Fortsetzung)

container_commands:
  01_start_supervisor:
    command: "supervisord -c /etc/supervisord.conf"

Erklärung:

Containerbefehle: Diese werden ausgeführt, nachdem Ihre Anwendung bereitgestellt wurde, aber bevor die Umgebung als bereit markiert wird. Wenn Sie Supervisord hier starten, stellen Sie sicher, dass Ihr Celery-Worker läuft, wenn die App live geht.

? Tipp: Elastic Beanstalk verarbeitet Containerbefehle in alphabetischer Reihenfolge. Stellen Sie Ihren Befehlen daher Zahlen wie 01_ voran, um die Ausführungsreihenfolge zu steuern.

Lustige Tricks mit eb_extensions

Debuggen leicht gemacht: Wenn etwas nicht funktioniert, fügen Sie einen temporären Containerbefehl hinzu, um Umgebungsvariablen zu drucken oder Verzeichnisinhalte aufzulisten:

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

Überprüfen Sie die Protokolle in /var/log/eb-activity.log.

Gemeinsame Konfigurationen wiederverwenden: Speichern Sie gemeinsam genutzte Konfigurationsausschnitte in einer separaten YAML-Datei und fügen Sie sie dann mithilfe der Include-Direktive in mehrere .ebextensions-Dateien ein (inoffiziell unterstützt).

Dieses Setup stellt sicher, dass Ihre Celery-Mitarbeiter effizient mit Supervisord verwaltet werden und zusammen mit Ihrer Elastic Beanstalk-Anwendung skaliert werden. Unabhängig davon, ob Sie sich mit der Erstellung von Infografiken oder anderen Hintergrundaufgaben befassen, bietet dieser Ansatz Zuverlässigkeit, Skalierbarkeit und Sicherheit.

Das obige ist der detaillierte Inhalt vonRichten Sie Celery Worker mit Supervisord auf der elastischen Bohnenstange über .ebextensions ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn