„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Langlebiges Python: Erstellen kugelsicherer, lang laufender Arbeitsabläufe, einfach gemacht

Langlebiges Python: Erstellen kugelsicherer, lang laufender Arbeitsabläufe, einfach gemacht

Veröffentlicht am 05.11.2024
Durchsuche:678

Durable Python: Building Bullet-Proof Long-Running Workflows, Made Simple

In der modernen Softwareentwicklung ist die Erstellung robuster Workflows, die APIs verschiedener Dienste verbinden und sowohl synchrone als auch asynchrone Ereignisse verarbeiten, eine häufige Herausforderung. Der herkömmliche Ansatz beinhaltet die Verwendung einer Mischung aus Warteschlangen, Mikrodiensten und Zustandsverwaltungssystemen, um skalierbare Anwendungen zu erstellen. Diese Architektur ist zwar effektiv, bringt jedoch einen erheblichen Mehraufwand mit sich: Einrichten und Warten von Infrastruktur wie Nachrichtenwarteschlangen, Ausführen von Servern oder Lambda-Funktionen, Verwalten des Status in Datenbanken und Implementieren komplexer Fehlerbehandlungsmechanismen.

Was wäre, wenn es eine einfachere und zuverlässigere Möglichkeit gäbe, lang laufende Arbeitsabläufe zu bewältigen, ohne sich den Aufwand für die Verwaltung dieser gesamten Infrastruktur leisten zu müssen? Das ist das Ziel von Durable Python. Um es auszuprobieren, registrieren Sie sich für die Beta.

Das Problem mit naiven Lösungen für lang laufende Prozesse

Stellen Sie sich vor, Sie möchten Pull Requests (PRs) in GitHub überwachen. Jedes Mal, wenn ein neuer PR geöffnet wird, möchten Sie einen speziellen Slack-Kanal für Diskussionen erstellen und tägliche Erinnerungen senden, bis der PR geschlossen oder zusammengeführt wird. Das klingt einfach, also denken Sie vielleicht, dass Sie es mit einer einfachen Python-Funktion lösen können (hier ist eine einfache Python-Funktion, die von ChatGPT generiert wurde):

@app.route('/webhook', methods=['POST'])
def github_webhook():
    data = request.json
    if 'pull_request' in data and data['action'] == 'opened':
        pr_number = data['pull_request']['number']
        pr_url = data['pull_request']['html_url']
        # Create a new Slack channel for the PR
        channel_id = create_slack_channel(pr_number)
        send_slack_notification(channel_id, pr_number, pr_url)
        # Periodically check the PR status and send reminders until it's closed or merged
        while True:
            time.sleep(3600)  # Wait for 1 hour before checking the status again
            pr_status = check_pr_status(pr_number)
            if pr_status == 'open':
                send_slack_notification(channel_id, pr_number, pr_url)
            else:
                break
    return jsonify({'status': 'ok'})

Dieses Code-Snippet scheint die Aufgabe zu bewältigen, ist aber nur für das „Happy Flow“-Szenario geeignet. In realen Anwendungen reicht dieser naive Ansatz nicht aus. Die while-Schleife basiert auf einer kontinuierlichen Serververfügbarkeit, die nicht garantiert werden kann. Prozesse können abstürzen, Server können neu gestartet werden und plötzlich ist Ihr Workflow unterbrochen.

Lösung aus der Praxis: Ereignisgesteuerte Anwendungen

Ein zuverlässigerer Ansatz besteht darin, eine ereignisgesteuerte Anwendung zu erstellen. Hier würden Sie Warteschlangen verwenden, um auf GitHub-Ereignisse zu warten, Cron-Jobs, um Erinnerungen zu senden, Datenbanken, um den PR- und Kanalstatus zu speichern, und Funktionen, um diese Ereignisse zu verarbeiten. Normalerweise läuft dieses Setup auf einer Cloud-Infrastruktur und nutzt Dienste wie AWS Lambda für die Bereitstellung und Ausführung.

Obwohl diese Methode machbar und robust ist, erfordert sie auch erhebliche Einrichtung, Wartung und Fachwissen. Die Verwaltung der Infrastruktur, die Sicherstellung der Betriebszeit und die Behandlung von Fehlerzuständen erfordern erhebliche Ressourcen und ein kompetentes Team.

Hier kommt Durable Python ins Spiel: Einfachheit trifft auf Zuverlässigkeit

Was wäre, wenn Sie die Einfachheit des naiven Python-Codes mit der Zuverlässigkeit eines asynchronen Designs kombinieren könnten? Was wäre, wenn Python garantieren könnte, dass selbst wenn ein Prozess abstürzt oder der Server neu startet, er genau dort weitermachen würde, wo er aufgehört hat?

AutoKitteh begegnet genau dieser Herausforderung mit Durable Python. Mithilfe von Durable Python schreibt der Benutzer Python-Code, während das System sicherstellt, dass ein Prozess bei einem Neustart an derselben Stelle weiterläuft. Obwohl es Einschränkungen gibt (z. B. ist eine lange Ausfallzeit möglicherweise nicht ideal), funktioniert diese Lösung für die meisten Anwendungsfälle perfekt.

Was Durable-Python bietet

Durable-Python erspart Ihnen die manuelle Statusverwaltung und ermöglicht Ihnen, Ihren Workflow als kontinuierlichen Fluss zu schreiben und nicht als ereignisgesteuerte Zustandsmaschine, deren Erstellung und Fehlerbehebung schwierig sein kann. AutoKitteh verfügt als Infrastruktur über integrierte Warteschlangen und Integrationen mit externen Anwendungen und APIs, was die schnelle Entwicklung robuster Arbeitsabläufe in Python erleichtert.

Wie es funktioniert

Es ist keine Magie im Spiel – nur solide Technik. AutoKitteh basiert auf Temporal, einem Framework zum Aufbau dauerhafter Arbeitsabläufe. Temporal erfordert eine bestimmte Art der Codierung, einschließlich eines Verständnisses von Determinismus, Idempotenz und anderen Konzepten, um Zuverlässigkeit sicherzustellen. AutoKitteh abstrahiert diese Komplexität und ermöglicht Entwicklern das Schreiben von Standard-Python-Code. Unter der Haube wird jede Funktion mit Nebenwirkungen in eine zeitliche Aktivität umgewandelt. Als Entwickler müssen Sie sich um diese Details keine Gedanken machen – konzentrieren Sie sich einfach auf das Schreiben der Geschäftslogik.

Weitere technische Details finden Sie in der AutoKitteh-Dokumentation.

Gibt es Kosten?

Natürlich hat jede Abstraktion einen Preis. Unter der Haube zeichnet Durable Python den Ablauf des Workflows auf, um die Wiederherstellung nach einem Fehler zu ermöglichen, der einige Speicher- und Leistungskosten verursacht.

Durable Python ist eher für die Orchestrierung von APIs als für die Erstellung von Datenanwendungen konzipiert. Wenn Sie Hochleistungsanwendungen benötigen, sollten Sie den Aufbau einer maßgeschneiderten Lösung in Betracht ziehen. Wenn Sie jedoch schnell zuverlässige Arbeitsabläufe mit minimalen Entwicklungs- und Infrastrukturinvestitionen entwickeln möchten, könnte Durable Python eine gute Option sein.

Anwendungen aus der Praxis

Durable Python kann auf eine Vielzahl von Arbeitsabläufen angewendet werden, insbesondere in Bereichen, in denen Zuverlässigkeit von entscheidender Bedeutung ist, wie zum Beispiel:

  • API-Orchestrierung – Erstellen Sie interne zuverlässige Arbeitsabläufe.
  • DevOps-Automatisierung: Automatisieren Sie Bereitstellungspipelines oder Code-Review-Automatisierung mit garantierter Wiederherstellung nach Fehlern.
  • ChatOps: Integration mit Chat-Plattformen, um Teambenachrichtigungen zu automatisieren und Arbeitsabläufe zu verwalten.
  • MLOps: Stellen Sie sicher, dass lang andauernde Machine-Learning-Workflows trotz Unterbrechungen nahtlos fortgesetzt werden.

Beispiele zu Worflows finden Sie hier.

Fazit: Weniger Code, weniger Aufwand

Durable Python-Konzept, implementiert mit AutoKitteh, ermöglicht Entwicklern die Erstellung, Bereitstellung und Verwaltung zuverlässiger Workflow-Automatisierung mit minimalem Code. Die dauerhafte Ausführung und die nahtlose Wiederherstellung erfolgen im Hintergrund, sodass Sie sich auf das Wesentliche konzentrieren können: Ihre Geschäftslogik.

Während es viele hervorragende Tools zum Erreichen von Dauerhaftigkeit gibt (wie Temporal und Restate), bietet Durable-Python eine schnelle, einfache und kostengünstige Möglichkeit, die gleichen Ergebnisse zu erzielen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/haimzlato/durable-python-building-bullet-proof-long-running-workflows-made-simple-49h4?1 Bei Verstößen wenden Sie sich bitte an Study_golang@163 .com, um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3