Heim >Backend-Entwicklung >Python-Tutorial >Richten Sie Celery Worker mit Supervisord auf der elastischen Bohnenstange über .ebextensions ein
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.
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.
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.
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.
.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.
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.
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.
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.
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!