現代のソフトウェア開発では、さまざまなサービスの 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 が保証できたらどうなるでしょうか?
AutoKitteh は、Durable Python を使用してまさにこの課題に対処します。 Durable Python を使用すると、ユーザーは Python コードを作成し、システムはプロセスが再起動された場合に同じポイントから実行を継続することを保証します。制限はありますが (長いダウンタイムは理想的ではない可能性があります)、ほとんどのユースケースでは、このソリューションは完全に機能します。
Durable-Python を使用すると、状態を手動で管理する必要がなく、構築やデバッグが困難なイベント駆動型のステート マシンではなく、継続的なフローとしてワークフローを作成できます。 AutoKitteh はインフラストラクチャとして、組み込みのキューと外部アプリケーションおよび API との統合を備えているため、Python で堅牢なワークフローを迅速に開発することが簡単になります。
魔法は必要ありません。ただ確かなエンジニアリングが必要です。 AutoKitteh は、耐久性のあるワークフローを構築するためのフレームワークである Temporal を利用しています。 Temporal では、信頼性を確保するための決定論、冪等性、その他の概念の理解など、特定のコーディング方法が必要です。 AutoKitteh はこれらの複雑さを抽象化し、開発者が標準の Python コードを作成できるようにします。内部では、副作用のある関数はすべて Temporal アクティビティに変換されます。開発者は、これらの詳細を気にする必要はありません。ビジネス ロジックの作成だけに集中してください。
技術的な詳細については、AutoKitteh のドキュメントを参照してください。
もちろん、あらゆる抽象化には代償が伴います。 Durable Python は内部的にワークフローのフローを記録して、障害後の回復を可能にします。これにより、ストレージとパフォーマンスのコストが発生します。
Durable Python は、データ アプリケーションを構築するのではなく、API のオーケストレーションを目的として設計されています。高性能アプリケーションが必要な場合は、カスタム ソリューションの構築を検討する必要があります。ただし、最小限の開発とインフラストラクチャ投資で信頼性の高いワークフローを迅速に開発したい場合は、Durable Python が良い選択肢になる可能性があります。
永続的な Python は、特に次のような信頼性が重要な領域で、幅広いワークフローに適用できます。
ワークフローの例はここにあります。
AutoKitteh を活用して実装された耐久性のある Python コンセプトにより、開発者は最小限のコードで信頼性の高いワークフローの自動化を構築、展開、管理できます。永続的な実行とシームレスなリカバリはバックグラウンドで処理されるため、本当に重要なこと、つまりビジネス ロジックに集中できます。
耐久性を実現するための優れたツール (Temporal や Restate など) は数多くありますが、Durable-Python は同じ結果を達成するための高速かつシンプルでコスト効率の高い方法を提供します。
以上が耐久性のある Python: 長期にわたって実行される防弾ワークフローを簡単に構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。