[論文レビュー] Serverless Workflows with Durable Functions and Netherite
本論文では、開発者が任意の言語で標準的なコードを使用して複雑で状態保持型のワークフローを記述できるサーバessプログラミングモデル「Durable Functions」と、これらのワークフローを効率的にスケーリングする分散実行エンジン「Netherite」を提案する。Netheriteは、パーティショニング、リカバリーログ、非同期スナップショット、および予測的通信を活用することで、キーウェルクロークで既存のサーバessワークフロー解決策と比較して、数個のオーダーも上回る性能向上を達成する。
Serverless is an increasingly popular choice for service architects because it can provide elasticity and load-based billing with minimal developer effort. A common and important use case is to compose serverless functions and cloud storage into reliable workflows. However, existing solutions for authoring workflows provide a rudimentary experience compared to writing standard code in a modern programming language. Furthermore, executing workflows reliably in an elastic serverless environment poses significant performance challenges. To address these, we propose Durable Functions, a programming model for serverless workflows, and Netherite, a distributed execution engine to execute them efficiently. Workflows in Durable Functions are expressed as task-parallel code in a host language of choice. Internally, the workflows are translated to fine-grained stateful communicating processes, which are load-balanced over an elastic cluster. The main challenge is to minimize the cost of reliably persisting progress to storage while supporting elastic scale. Netherite solves this by introducing partitioning, recovery logs, asynchronous snapshots, and speculative communication. Our results show that Durable Functions simplifies the expression of complex workflows, and that Netherite achieves lower latency and higher throughput than the prevailing approaches for serverless workflows in Azure and AWS, by orders of magnitude in some cases.
研究の動機と目的
- 既存のサーバessワークフロー解決策の限界、特にプログラマビリティとパフォーマンスの低さを是正すること。
- 宣言的または非構造的な構成ではなく、馴染みのあるプログラミング構文を用いて、複雑で状態保持型のワークフローを表現可能にすること。
- 弾力的なスケーリングを可能にしつつ、永続状態のストレージI/Oコストを最小限に抑える、スケーラブルで信頼性の高い実行エンジンを構築すること。
- 依存するワークフローステップの原子的整合性を保証する、開発者にとって理解しやすい強い信頼性保証(因果的整合性コミット)を提供すること。
- 各ワークフローの状態永続化によるパフォーマンスボトルネックを軽減するため、効率的でバッチ処理可能かつ予測的な状態管理を導入すること。
提案手法
- Durable Functions は、C#、Python、JavaScript などのホスト言語で、細粒度で状態保持型の通信プロセスにワークフローを変換する。
- システムは、状態なしタスクと状態保持インスタンスの2つのプリミティブを持つ計算モデルを採用し、プログラミングモデルと実行を分離する。
- Netherite は、ノード間で状態を分散することで、スケーラブルなスケーリングを実現するパーティショニングを採用する。
- リカバリーログを用いることで、障害後の迅速な再開と進行の耐久性を確保する。
- 非同期スナップショットにより、タスクの完了後にチェックポイントを遅延させることで、状態永続化のコストを低減する。
- 予測的通信により、状態が完全に永続化される前でもメッセージ送信を進行させ、スループットの向上とレイテンシーの低減を実現する。
実験結果
リサーチクエスチョン
- RQ1どのようにすれば、標準的なプログラミング言語を用いて、プログラマビリティと組み合わせのしやすさを両立できるサーバessワークフローを表現できるか?
- RQ2状態保持型サーバessワークフローの効率的で弾力的なスケーリングを実現しつつ、ストレージI/Oのオーバーヘッドを最小限に抑える実行モデルは何か?
- RQ3因果的整合性コミットのような強い信頼性保証を、サーバess環境で効率的に実装するにはどうすればよいか?
- RQ4AWS Step Functions や Azure Durable Functions などの既存のサーバessワークフロー系と比較して、どの程度のパフォーマンス向上が達成可能か?
- RQ5パーティショニング、予測的通信、非同期スナップショットを併用することで、状態保持型サーバess実行におけるレイテンシー低減とスループット向上が実現可能か?
主な発見
- Durable Functions により、開発者は馴染みのある制御構造と言語エコシステムを用いて、複雑で状態保持型のワークフローを記述可能となり、宣言的または非構造的モデルと比較して、著しく高いプログラマビリティが実現された。
- Netherite は、既存のサーバessワークフロー解決策と比較して、より低いレイテンシーと高いスループットを達成し、特定のワークロードでは性能向上が数個のオーダーも上回った。
- パーティショニングと予測的通信の活用により、状態が完全に永続化される前からメッセージ処理を並列化できるため、エンドツーエンドのレイテンシーが低減された。
- 非同期スナップショットとリカバリーログの活用により、永続状態のI/Oコストが低減され、大規模クラスタでの効率的なスケーリングが可能になった。
- 因果的整合性コミット保証により、障害時でも部分的または不整合な状態変更が発生せず、依存するステップの原子的整合性が保証された。
- エンドツーエンドの評価では、Netherite が高負荷下でも効率的にスケーリングされ、ベースラインシステムと比較して低レイテンシーかつ高スループットを維持した。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。