クラウド ベースの同期ソリューション (Dropbox のようなもの) を構築することを考えています。
堅牢なアーキテクチャとはどのようなものでしょうか?
Windows、Mac、Linux、モバイル デバイスなどのさまざまなプラットフォームをサポートするには、どのようなテクノロジが必要ですか?
どの効率的な同期アルゴリズムを使用しますか?
私は単純なアーキテクチャ/ソリューションが次のようになることを知っています:
クラウド ストレージへのネットワーク呼び出しを行い、同期フォルダー ツリー構造 (メタデータ情報のみ) を取得します。
クライアントにファイルシステム モニターを配置して、ローカル同期フォルダー ツリー構造を構築します (ファイル システム モニターには lsyncd などを使用すると思いますか?)
前回の同期から同期フォルダー構造を取得します。これで、クライアントに 3 つのフォルダー ツリー構造ができました。これら 3 つのツリーを使用して、ローカル フォルダーで実行する必要があることと、サーバーのリモート フォルダーで実行する必要があることを判断できます。たとえば、アプリケーション固有の事前定義されたルールを使用して、追加、削除、編集、競合解決などを行います。
このアーキテクチャで十分かもしれませんが、問題は細部にあります。同期フォルダ ツリーが非常に大きい (つまり、非常に広くて深い) 場合はどうなりますか。差分を決定するための効率的なアルゴリズムが必要であることは明らかです。ネットワーク接続が切断され、ツリー全体を適切に取得または送信できなかった場合はどうなりますか? また、ネットワーク ペイロードなどを減らすために、ファイルの差分のみを送信します。
これらは私が設計したものであることは承知していますが、私の質問は、このアーキテクチャで十分かどうか、詳細に時間を費やすべきかどうかです。Dropbox はどのように設計されており、大きなフォルダ構造とデータ サイズの同期を非常に効率的にするために、どのような技術とアルゴリズムを使用していますか? このようなものを設計する際に参照できるリソース/書籍はありますか?
前もって感謝します。