耐久性のある Python: 長期にわたって実行される防弾ワークフローを簡単に構築

WBOY
リリース: 2024-09-06 06:01:31
オリジナル
1031 人が閲覧しました

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

現代のソフトウェア開発では、さまざまなサービスの API を接続し、同期イベントと非同期イベントの両方を処理する堅牢なワークフローを作成することが共通の課題です。従来のアプローチでは、キュー、マイクロサービス、状態管理システムを組み合わせて使用​​して、スケーラブルなアプリケーションを構築します。このアーキテクチャは効果的ではありますが、メッセージ キューなどのインフラストラクチャのセットアップと維持、サーバーやラムダ関数の実行、データベースの状態管理、複雑なエラー処理メカニズムの実装など、大きなオーバーヘッドが伴います。

このすべてのインフラストラクチャを管理する手間をかけずに、長時間実行されるワークフローを処理する、より簡単で信頼性の高い方法があったとしたらどうでしょうか?それが Durable Python の目標です。試すには、ベータ版に登録してください。

長時間実行されるプロセスに対する単純なソリューションの問題

GitHub でプル リクエスト (PR) を監視したいと想像してください。新しい PR が開かれるたびに、ディスカッション用の専用 Slack チャネルを作成し、PR が閉じられるか統合されるまで毎日リマインダーを送信したいと考えています。これは簡単そうに聞こえるので、基本的な Python 関数で解決できると思うかもしれません (これは ChatGPT によって生成された基本的な Python 関数です):

@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'})
ログイン後にコピー

このコード スニペットはタスクを処理しているように見えますが、「ハッピー フロー」シナリオにのみ適しています。実際のアプリケーションでは、この単純なアプローチでは不十分です。 while ループはサーバーの継続的な稼働時間に依存していますが、これは保証されていません。プロセスがクラッシュし、サーバーが再起動し、突然ワークフローが中断される可能性があります。

現実世界のソリューション: イベント駆動型アプリケーション

より信頼性の高いアプローチには、イベント駆動型アプリケーションの構築が含まれます。ここでは、キューを使用して GitHub イベントをリッスンし、cron ジョブを使用してリマインダーを送信し、データベースを使用して PR とチャネルの状態を保存し、関数を使用してこれらのイベントを処理します。通常、このセットアップはクラウド インフラストラクチャ上で実行され、展開と実行に AWS Lambda などのサービスを利用します。

この方法は実行可能で堅牢ですが、かなりのセットアップ、メンテナンス、専門知識も必要です。インフラストラクチャの管理、稼働時間の確保、エラー状態の処理には、多大なリソースと熟練したチームが必要です。

耐久性のある Python の登場: シンプルさと信頼性の融合

素朴な Python コードの単純さと非同期設計の信頼性を組み合わせられたらどうでしょうか?たとえプロセスがクラッシュしたりサーバーが再起動したりしても、中断したところから再開することを Python が保証できたらどうなるでしょうか?

AutoKitteh は、Durable Python を使用してまさにこの課題に対処します。 Durable Python を使用すると、ユーザーは Python コードを作成し、システムはプロセスが再起動された場合に同じポイントから実行を継続することを保証します。制限はありますが (長いダウンタイムは理想的ではない可能性があります)、ほとんどのユースケースでは、このソリューションは完全に機能します。

Durable-Python が提供するもの

Durable-Python を使用すると、状態を手動で管理する必要がなく、構築やデバッグが困難なイベント駆動型のステート マシンではなく、継続的なフローとしてワークフローを作成できます。 AutoKitteh はインフラストラクチャとして、組み込みのキューと外部アプリケーションおよび API との統合を備えているため、Python で堅牢なワークフローを迅速に開発することが簡単になります。

仕組み

魔法は必要ありません。ただ確かなエンジニアリングが必要です。 AutoKitteh は、耐久性のあるワークフローを構築するためのフレームワークである Temporal を利用しています。 Temporal では、信頼性を確保するための決定論、冪等性、その他の概念の理解など、特定のコーディング方法が必要です。 AutoKitteh はこれらの複雑さを抽象化し、開発者が標準の Python コードを作成できるようにします。内部では、副作用のある関数はすべて Temporal アクティビティに変換されます。開発者は、これらの詳細を気にする必要はありません。ビジネス ロジックの作成だけに集中してください。

技術的な詳細については、AutoKitteh のドキュメントを参照してください。

費用はかかりますか?

もちろん、あらゆる抽象化には代償が伴います。 Durable Python は内部的にワークフローのフローを記録して、障害後の回復を可能にします。これにより、ストレージとパフォーマンスのコストが発生します。

Durable Python は、データ アプリケーションを構築するのではなく、API のオーケストレーションを目的として設計されています。高性能アプリケーションが必要な場合は、カスタム ソリューションの構築を検討する必要があります。ただし、最小限の開発とインフラストラクチャ投資で信頼性の高いワークフローを迅速に開発したい場合は、Durable Python が良い選択肢になる可能性があります。

現実世界のアプリケーション

永続的な Python は、特に次のような信頼性が重要な領域で、幅広いワークフローに適用できます。

  • API オーケストレーション - 信頼できる内部ワークフローを構築します。
  • DevOps 自動化: 障害からの回復を保証して、デプロイ パイプラインまたはコード レビューの自動化を自動化します。
  • ChatOps: チャット プラットフォームと統合して、チーム通知を自動化し、ワークフローを管理します。
  • MLOps: 長時間実行される機械学習ワークフローが、中断があってもシームレスに継続されるようにします。

ワークフローの例はここにあります。

結論: コードが減れば手間も減る

AutoKitteh を活用して実装された耐久性のある Python コンセプトにより、開発者は最小限のコードで信頼性の高いワークフローの自動化を構築、展開、管理できます。永続的な実行とシームレスなリカバリはバックグラウンドで処理されるため、本当に重要なこと、つまりビジネス ロジックに集中できます。

耐久性を実現するための優れたツール (Temporal や Restate など) は数多くありますが、Durable-Python は同じ結果を達成するための高速かつシンプルでコスト効率の高い方法を提供します。

以上が耐久性のある Python: 長期にわたって実行される防弾ワークフローを簡単に構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート