Доступен значительный релиз системы синхронизации файлов Syncthing, решающей задачи, сходные с проприетарной системой BitTorrent Sync. Syncthing позволяет организовать автоматическую синхронизацию файлов пользователя на нескольких устройствах. Синхронизированные данные не загружаются на транзитные облачные хранилища, а напрямую реплицируются между системами пользователя при их одновременном появлении в online.

Для обмена данными применяется развиваемый проектом протокол BEP (Block Exchange Protocol), который находится в активном развитии и после стабилизации позволит создавать сторонние реализации систем синхронизации данных, совместимые с Syncthing. При синхронизации файл логически разбивается на блоки, которые являются неделимой частью при передаче данных между системами пользователя. При наличии идентичных блоков на нескольких устройствах, при синхронизации на новое устройство копирование осуществляется с распределением отдачи трафика по узлам, по аналогии с работой системы BitTorrent. Чем больше устройств участвуют в синхронизации, тем быстрее будет проходить репликация новых данных за счёт распараллеливания. Возможно создание больших сетей совместно используемых данных, в которых принимают участие разные пользователи. Предоставляются гибкие средства контроля доступа и создания исключений для синхронизации.

Синхронизируется содержимое файлов, время модификации и, в зависимости от операционной системы, права доступа и символические ссылки. Не переносятся между системами информация о владельце/группе, специализированные файлы (fifo, сокеты), расширенные атрибуты и ACL. Такие операции как переименование или изменение прав доступа синхронизируются на уровне обновления метаданных, без необходимости повторной передачи содержимого. Похожим способом синхронизируются изменения файлов - по сети передаются только изменившиеся блоки данных. Каналы передачи данных формируются при помощи TLS, все узлы аутентифицируют друг друга по сертификатам и идентификаторам устройств, для контроля целостности применяется SHA-256. Для определения узлов синхронизации в локальной сети может быть использован протокол UPnP, при котором не требуется ручной ввод IP-адресов синхронизируемых устройств.

В версии 0.11 добавлены средства для выявления и устранения конфликтов синхронизации, например, когда файл был изменён одновременно на двух устройствах. Ранее, частичным решением проблемы с конфликтами было включение режима версионирования, при котором ведётся сохранение изменений и предоставляется возможность отката состояния файла на определённый момент времени. Теперь в случае конфликта, активным остаётся более новый файл, а другой сохраняется под именем "file.sync-conflict-YYYMMDD-HHMMSS.ext".

В новом выпуске также реализованы многочисленные оптимизации, например, вместо периодического опроса сервера, графический интерфейс теперь в push-режиме принимает обновления состояния со стороны сервера. Изменены настройки сборщика мусора для снижения нагрузки на CPU во время синхронизации больших файлов. Проведена оптимизация синхронизации большого числа мелких файлов и сканирования содержимого больших файлов. Из-за изменения формата БД ветка Syncthing 0.11.x не является совместимой с ранее установленными выпусками Syncthing 0.10.x, поэтому требуется явное ручное инициирование обновления или выполнение команды "syncthing -upgrade". При первом запуске новой версии БД будет перестроена.

Код Syncthing написан на языке Go и распространяется под свободной лицензией MPL. Поддерживается работа в Linux, Android, Windows, OS X, FreeBSD и Solaris. Для настройки системы и мониторинга предусмотрен встроенный web-интерфейс, CLI-клиент и GUI Syncthing-GTK, в котором дополнительно предоставляются средства управления узлами синхронизации и репозиториями. Для упрощения поиска узлов Syncthing развивается сервер координации обнаружения узлов, для которого также имеется готовый образ для запуска в Docker.



Источник: http://www.opennet.ru/opennews/art.shtml?num=42093