Dropboxのエンジニアは最近、1秒ごとにスケジュールされる数万の非同期タスクを処理できる分散非同期タスクフレームワーク(ATF)をどのように設計したかを公開した。
Dropboxのエンジニアはシステム内のすべてのタスクスケジューリング要件を強化できるインフラストラクチャシステムを必要としていた。「ファイルをDropboxフォルダーにドラッグすることから、マーケティングキャンペーンをスケジュールすることまで」様々なことに対してである。彼らのスケーリングのニーズを満たすことができるオープンソースや既製のソリューションがなかったため、社内システムを設計することにした。
導入から1年後、ATFは現在1秒あたり9,000の非同期タスクを処理し、Dropboxの内部で28のエンジニアリングチームによって使用されている。
DropboxのソフトウェアエンジニアであるArun Sai Krishnan氏は、InfoQに次のように語っている。
ATFに置き換えられた2つの社内システムがありました。1つはCapeの上に構築された即時タスク実行用のシステムであり、もう1つは遅延タスク実行用に使われていたシステムでした。ATFはこれらを置き換えて、より優れた機能(専用の実行レイヤーの制御など)とシステムによる保証(ラムダの分離など)を得ました。さらに、非常に類似した役割を果たしていた、これらのシステムを統合することで、メンテナンスのオーバーヘッドが削減されました。
ATFの主な機能は、開発者がコールバックを定義し、これらの事前定義されたコールバックに対して実行されるタスクをスケジュールできるようにすることである。同じタスクインスタンスを同時に複数回実行しないことを保証しながら、少なくとも1回はコールバックを呼び出す。エンジニアは、同時実行性と競合状態を処理するためにユーザがコールバックを設計する必要がないように、そのように動作することを選択した。また、ATFは可用性が高く、スケジューリング要求の受信に99.9%の可用性がある。
次の図は、ATFのアーキテクチャを示している。
出典: https://dropbox.tech/infrastructure/asynchronous-task-scheduling-at-dropbox
この図は、次のプロセスを示している。
- ATFフロントエンドサービスは、gRPCを介してタスクをスケジュールする要求を受信する。
- フロントエンドサービスはタスクストアにタスクを登録する。タスクストアは、Dropbox社内のEdgestoreデータストアによって実装されている。
- Store Consumerサービスは、定期的にタスクストアをポーリングする。実行可能なタスクをキューにプッシュする。
- キューは、AWS Simple Queue Service(SQS)を使用して実装されている。各コールバックと優先度のペアには、専用のキューが使用される。この設定により、登録するコールバックごとに、より重要なタスクにより高い優先順位を付けることができる。
- コントローラは、担当するコールバックのタスクをプルし、ローカルキューに格納する。このレイヤーでも、エグゼキュータ向けに作業に対して優先順位が付けられる。
- 次に、コントローラごとに複数のエグゼキュータが、処理するためにメッセージ処理ループの中で、コントローラをポーリングして、必要なタスクを実行する。
- コントローラとエグゼキュータの両方が、進行状況に関してHeartBeat & Status Controller(HSC)を更新する。次に、HSCは各タスクの状態と共にタスクストアを更新する。これによって、クライアントはさまざまなタスクの進行状況を照会できるようになる。
Dropboxのエンジニアは、Dropboxのすべての開発者にとって、セルフサービスのフレームワークとなるようにATFを設計した。このアプローチを促進するために、彼らはすべてのワーカークラスター(コントローラとエグゼキュータ)がコールバックの所有者によって完全に所有され、管理されることを決定した。この明確な責任の分離により、消費者によるATFの使いやすさが向上し、ATFチームはコアシステムパーツに集中できるようになる。
Krishnan氏は、消費者からフィードバックを得るプロセスに関して次のように述べている。
設計プロセス中にシステムを使用するチームからフィードバックを収集しました。また、設計レビュープロセス中に広く精査されました。さらに、メンテナンスコスト、アラート、ホスト管理などの問題について、クライアントから継続的なフィードバックを受けられるように仕組み化しています。
ATFに対する将来の拡張には、定期的なタスクの実行、タスクチェーンのサポートの改善、問題のあるタスク向けのデッドレターキューのサポートなどがある。