Я подумываю создать решение для базовой облачной синхронизации (что-то вроде Dropbox):
Как будет выглядеть надежная архитектура?
Какие технологии вам понадобятся для поддержки различных платформ например, Windows, Mac, Linux и мобильные устройства?
Какие эффективные алгоритмы синхронизации вы бы использовали?
Я знаю, что наивная архитектура / решение будет выглядеть следующим образом:
Сделайте сетевой вызов в облачное хранилище и получите синхронизацию папка древовидная структура (только информация о метаданных).
Иметь монитор файловой системы на клиенте для создания локальной синхронизации древовидная структура папок (я думаю, вы бы использовали что-то вроде lsyncd для монитор файловой системы?)
Получить структуру папки синхронизации из предыдущей синхронизации. Теперь ваша очередь иметь 3 структуры дерева папок на клиенте. Использование этих трех деревьев может определить, что нужно сделать в локальной папке и что нужно делать в удаленной папке на сервере. Например, добавить, удалить, редактировать, разрешать конфликты и т. д. с использованием заранее определенных правил. это зависит от приложения.
Эта архитектура может быть достаточной, но дьявол кроется в деталях. Что делать, если дерево папок синхронизации очень большое (то есть очень широкое и очень глубокое). Очевидно, потребуется эффективный алгоритм для определения различий. Что делать, если сетевое соединение разорвано, и вы не получили или не отправили все дерево должным образом? Также отправка только различий файлов, чтобы уменьшить нагрузку на сеть и т. Д.
Я знаю, что это вещи, для которых я спроектировал, но мой вопрос в том, достаточно ли этой архитектуры и следует ли мне тратить время на детали? Как устроен Dropbox и какие технологии и алгоритмы они используют, чтобы сделать синхронизацию больших структур папок и размера данных настолько эффективной? Есть ли какие-нибудь ресурсы / книги, которые я могу проконсультировать по созданию чего-то подобного?
Заранее спасибо.