ファイル共有クラウドプラットフォームのDropboxは最近、多様なユースケースをサポートし、毎分3,000万以上のタスクを処理する同社のメッセージングシステムモデル(MSM)について議論した。
Dropboxのソフトウェアエンジニア Dmitry Kopytkov氏とDeepak Gupta氏がブログ投稿でこの道のりを要約している。2021年までにDropboxの非同期システムは断片化し、特定の製品ニーズに合わせて調整されていたが一貫性に欠けていた。これらのシステムはファイルアップロード、機械学習、検索インデックスなど様々なユースケースをサポートしていたが、いくつかの限界に直面していた。
開発者は学習と管理に多大な労力を必要とする複雑なシステムに苦戦し、生産性を低下させていた。可用性とレイテンシーに関するサービスレベル目標(SLO)が変化するため信頼性が一定でなく、マルチホーミングの欠如によりデータセンター障害時のリスクが増大していた。KafkaやRedisのような外部キューイングソリューションの混在により運用の複雑さが高くなり、コストも増加していた。
システムが毎日300億を超えるリクエストを処理していたが、遅延イベントスケジューラーなどの重要コンポーネントでスループット要求を満たすのに苦労し、スケーラビリティの問題が発生した。さらに既存のlambdaインフラストラクチャはDropboxのサービス指向アーキテクチャ(SOA)から逸脱していたため、問題の診断や他のシステムとの統合が困難だった。また、自動スケーリング機能の欠如により、容量調整には手作業が必要だった。さらにインフラストラクチャの柔軟性がなく、新しいワークフローへの適応やDropboxの新ファイルシステムアーキテクチャ Cypressとの統合が困難だった。
これらの問題に対処するため、Dropboxはまったく新しいシステムをスクラッチ開発するのではなく、段階的なアプローチを採用した。このアプローチは、非同期インターフェースを簡素化し、リグレッションを検出してロールバックをトリガーできる自動リリース手法を通じて運用負担を軽減することで、開発速度の向上を目指していた。
イベントのバックログをより効率的に処理するために、自動計算スケーリングが導入された。新システムは非同期システム全体でパターンを統一し、最小限の変更で新しいユースケースをサポートできる拡張可能なコンポーネントとAPIを提供することで、堅牢な基盤の構築も目指していた。冗長なシステムの段階的廃止とlambdaインフラストラクチャのDropbox SOAスタックへの移行により、計算効率、自動スケーリング、マルチホーミング、モニタリングの向上を図り、コスト効率も優先事項としていた。
出典:Dropboxにおけるメッセージングシステムモデルを通じたインフラストラクチャの進化
この変革の重要な部分としてMessaging System Model(MSM)が導入された。ネットワークにおけるOSIモデルにインスパイアされたMSMは、Dropboxの非同期システムを5つの論理層に整理している。フロントエンド層はエンジニアやデータベースなどの他のシステムとのインターフェースとして機能し、イベントコンプライアンスのためのスキーマ検証を管理し、イベントの耐久性を確保しながらメッセージフォーマットを標準化されたプロトコルバッファフォーマットに変換する。
Dropboxは最近、Dropbox Vaultを廃止したことでニュースになった。この決定は技術コミュニティを驚かせ、Hacker NewsのあるユーザーはVaultに依存していたため、今後は同様のセキュアなPINでファイルアクセスできる他のクラウドストレージオプションを探す必要があると不満を表明した。
DropboxのユーザーはVault機能の廃止決定についてコミュニティフォーラムで説明を求めたが、明確な説明は得られなかった。Dropboxは「セキュリティを損なう可能性のある技術的リスク」と既存のセキュリティ機能の強化に注力したいという理由を挙げたが、この理由ではユーザーを満足させることはできなかった。
メッセージングシステムモデルに話を戻すと、スケジューラー層は変更データの取り込みや遅延実行などのユースケース要件に基づいてイベントのディスパッチを管理し、実行順序を保証する。フロー制御層はサブスクライバーの可用性、優先順位、またはスロットリングに基づいてタスクの分配を処理し、ステータスを追跡して失敗したタスクを再試行する。デリバリー層は、パブリッククラウドやプライベートクラウドのサービスにイベントをルーティングし、再試行、フィルタリング、同時実行を管理する。実行層はサーバーレス関数またはリモートプロセスによってタスクを処理し、自動スケーリングを活用し、マルチクラウド運用全体での信頼性を確保する。
このレイヤーアーキテクチャによりDropboxは安定性を損なうことなく、非同期プラットフォームを段階的に再構築することが可能になった。その結果、Dropboxはワークフローを簡素化し、自動スケーリングによって開発者の生産性を向上させ、マルチホーミングによって信頼性を高め、新たな需要により容易に適応できるようになった。さらにインフラコンポーネントを統合することでコスト効率も達成した。