現代のソフトウェア開発では、さまざまなサービスから 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 は、特に次のような信頼性が重要なドメインなど、幅広いワークフローに適用できます。
結論: コードが減れば手間も減る
耐久性を実現するための優れたツール (Temporal や Restate など) は数多くありますが、Durable-Python は、同じ結果を達成するための高速、シンプル、かつコスト効率の高い方法を提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3