「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 耐久性のある Python: 長期にわたって実行される防弾ワークフローを簡単に構築

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

2024 年 11 月 5 日に公開
ブラウズ:687

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 は、同じ結果を達成するための高速、シンプル、かつコスト効率の高い方法を提供します。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/haimzlato/durable-python-building-bullet-proof-long-running-workflows-made-simple-49h4?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3