[論文レビュー] Following the Data, Not the Function: Rethinking Function Orchestration in Serverless Computing
本論文は、関数呼び出しの依存関係ではなくデータフローに基づいてワークフローをモデル化することで、関数オ케ストレーションを再考するデータ中心のサーバesslessプラットフォームPheromoneを提案する。データバケット抽象化と細粒度のデータトリガープリミティブを導入することで、従来のプラットフォームと比較して、相互作用の遅延を桁違いに短縮する低遅延・高パフォーマンスな関数相互作用を実現するとともに、明示的なデータ消費と最適化されたスケジューリング・データ転送メカニズムにより、複雑なワークフロー開発を簡素化する。
Serverless applications are typically composed of function workflows in which multiple short-lived functions are triggered to exchange data in response to events or state changes. Current serverless platforms coordinate and trigger functions by following high-level invocation dependencies but are oblivious to the underlying data exchanges between functions. This design is neither efficient nor easy to use in orchestrating complex workflows -- developers often have to manage complex function interactions by themselves, with customized implementation and unsatisfactory performance. In this paper, we argue that function orchestration should follow a data-centric approach. In our design, the platform provides a data bucket abstraction to hold the intermediate data generated by functions. Developers can use a rich set of data trigger primitives to control when and how the output of each function should be passed to the next functions in a workflow. By making data consumption explicit and allowing it to trigger functions and drive the workflow, complex function interactions can be easily and efficiently supported. We present Pheromone -- a scalable, low-latency serverless platform following this data-centric design. Compared to well-established commercial and open-source platforms, Pheromone cuts the latencies of function interactions and data exchanges by orders of magnitude, scales to large workflows, and enables easy implementation of complex applications.
研究の動機と目的
- 現在のサーバesslessプラットフォームが、実際のデータ交換を追跡しない関数呼び出し依存関係に依存しているため、関数ワークフローのオーケストレーションに非効率さと複雑さが生じることを解消すること。
- 遅延に敏感なワークロードにおいて、蓄積される高遅延(数ミリ秒)を抱えるサーバessless関数チェーンの相互作用遅延を低減すること。
- MapReduce やストリーム処理などの複雑なワークフローの開発を、データ消費を明示的かつ組み合わせ可能にする統一インターフェースを通じて簡素化すること。
- 2段階スケジューリング階層を用いて、入力データに近い場所に下流関数をスケジューリングすることで、低遅延でスケーラブルな関数実行を可能にすること。
- ゼロコピー共有メモリオブジェクトストアとノード間直接転送を用いて、耐久性を犠牲にしてでもパフォーマンスを最適化するデータ交換パフォーマンスの最適化
提案手法
- 中間関数出力を保持するデータバケット抽象化を導入し、明示的かつ構成可能なデータ消費と下流関数のトリガーを可能にする。
- 2段階スケジューリング階層を採用:各ワーカーノードにローカルスケジューラを設け、データバケットを介してワークフローデータを管理し、可能な場合はローカルで関数をスケジューリング;必要に応じてグローバルコordinaterがノード間スケジューリングを処理。
- ノード内ではゼロコピー共有メモリオブジェクトストア、ノード間では直接データ転送を用いて、データ交換遅延を最小限に抑えるが、耐久性を犠牲にする。
- シャーディングされたグローバルコordinaterを導入し、水平スケーリングを可能にし、各コordinaterが排他的なワークフロー集合を管理することでボトルネックを回避。
- 低レベルのデータトリガーAPIと高レベルの関数指向インターフェースを提供し、開発者がバケット管理を直接行わなくても、または行なってもよいように柔軟に複雑なワークフローを表現可能。
- 動的グループ(DynamicGroup)や時刻ベース(ByTime)トリガーなどのプリミティブを用いて、MapReduce やストリーム処理などの高度なパターンをサポートし、データの可用性に応じて関数を自動的に起動可能。
実験結果
リサーチクエスチョン
- RQ1関数依存関係ベースのモデルと比較して、関数オーケストレーションにデータ中心のアプローチを採用することで、サーバesslessワークフローにおける相互作用遅延を低減できるか?
- RQ2中間データをどのように効率的に管理すれば、サーバessless環境における低遅延・高スループットな関数相互作用を実現できるか?
- RQ3明示的なデータ消費とトリガープリミティブを用いることで、MapReduce やストリーム処理のような複雑なワークフローの実装がどの程度簡素化できるか?
- RQ4ローカルとグローバルの協調を組み合わせた2段階スケジューリング階層は、大規模かつ複雑なワークフローにおいても低遅延を維持しながらスケーリング可能か?
- RQ5短命の中間データの耐久性を犠牲にしてでも、より速いデータ交換を実現するためのパフォーマンス上の妥当なトレードオフはどのようなものか?
主な発見
- Pheromoneは、商用およびオープンソースのサーバesslessプラットフォームと比較して、関数相互作用およびデータ交換の遅延を桁違いに低減した。
- 本プラットフォームは、低遅延スケジューリングとデータ転送を実現し、大規模なワークフローを効率的に実行可能であり、複雑でデータ集約的なアプリケーションの実行を可能にした。
- ゼロコピー共有メモリオブジェクトストアと直接データ転送の使用により、ノード内およびノード間のデータ交換遅延がそれぞれ低減された。
- Pheromoneにおけるガベージコレクションは、リクエスト完了後に不要なメモリ内データオブジェクトを即座に除外することで、メモリフットプリントを効果的に削減した。
- Pheromone上で実装されたMapReduceフレームワークPheromone-MRは、C++で380行、Pythonで120行で構築可能であり、AWS Lambda上のPyWrenと比較して、マップオンリーモードでも約6,000行に上るコード量を大幅に削減した。
- 関数指向インターフェースにより、開発者はバケットを直接管理せずに依存関係に基づいてワークフローを表現可能であり、同時に低レベルのデータトリガーAPIを介して複雑なワークフローもサポート可能である。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。