Heim  >  Artikel  >  Backend-Entwicklung  >  Langlebiges Python: Erstellen kugelsicherer, lang laufender Arbeitsabläufe, einfach gemacht

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

WBOY
WBOYOriginal
2024-09-06 06:01:311012Durchsuche

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 andauernde Arbeitsabläufe zu bewältigen, ohne sich um die Verwaltung dieser gesamten Infrastruktur kümmern 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 hört sich einfach an, 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 Arbeitsablauf 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 Einrichtungs-, Wartungs- und Fachkenntnisse. Die Verwaltung der Infrastruktur, die Sicherstellung der Betriebszeit und der Umgang mit 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 ein Prozess, selbst wenn er abstürzt oder der Server neu startet, genau dort weitermacht, wo er aufgehört hat?

AutoKitteh geht mit Durable Python genau diese Herausforderung an. 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 Zauberei 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: Integrieren Sie sich in 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

Das langlebige Python-Konzept, das von AutoKitteh implementiert wird, ermöglicht Entwicklern die Erstellung, Bereitstellung und Verwaltung zuverlässiger Workflow-Automatisierung mit minimalem Code. Die dauerhafte Ausführung und die nahtlose Wiederherstellung erfolgen hinter den Kulissen, 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.

Das obige ist der detaillierte Inhalt vonLanglebiges Python: Erstellen kugelsicherer, lang laufender Arbeitsabläufe, einfach gemacht. 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