архитектура синхронизации на основе облака

Я подумываю создать решение для базовой облачной синхронизации (что-то вроде Dropbox):

  1. Как будет выглядеть надежная архитектура?

  2. Какие технологии вам понадобятся для поддержки различных платформ например, Windows, Mac, Linux и мобильные устройства?

  3. Какие эффективные алгоритмы синхронизации вы бы использовали?

Я знаю, что наивная архитектура / решение будет выглядеть следующим образом:

  1. Сделайте сетевой вызов в облачное хранилище и получите синхронизацию папка древовидная структура (только информация о метаданных).

  2. Иметь монитор файловой системы на клиенте для создания локальной синхронизации древовидная структура папок (я думаю, вы бы использовали что-то вроде lsyncd для монитор файловой системы?)

  3. Получить структуру папки синхронизации из предыдущей синхронизации. Теперь ваша очередь иметь 3 структуры дерева папок на клиенте. Использование этих трех деревьев может определить, что нужно сделать в локальной папке и что нужно делать в удаленной папке на сервере. Например, добавить, удалить, редактировать, разрешать конфликты и т. д. с использованием заранее определенных правил. это зависит от приложения.

Эта архитектура может быть достаточной, но дьявол кроется в деталях. Что делать, если дерево папок синхронизации очень большое (то есть очень широкое и очень глубокое). Очевидно, потребуется эффективный алгоритм для определения различий. Что делать, если сетевое соединение разорвано, и вы не получили или не отправили все дерево должным образом? Также отправка только различий файлов, чтобы уменьшить нагрузку на сеть и т. Д.

Я знаю, что это вещи, для которых я спроектировал, но мой вопрос в том, достаточно ли этой архитектуры и следует ли мне тратить время на детали? Как устроен Dropbox и какие технологии и алгоритмы они используют, чтобы сделать синхронизацию больших структур папок и размера данных настолько эффективной? Есть ли какие-нибудь ресурсы / книги, которые я могу проконсультировать по созданию чего-то подобного?

Заранее спасибо.

7
задан Java Devil 18 October 2013 в 01:50
поделиться