Представен е релиз на системата за автоматична синхронизация на файлове Syncthing 2.0, в която синхронизираните данни не се качват в облачни хранилища, а директно се репликират между системите на потребителя при тяхното едновременно появяване онлайн, използвайки разработваното от проекта протокол BEP (Block Exchange Protocol). Кодът на Syncthing е написан на езика Go и се разпространява под свободната лицензия MPL. Готови сборки са подготвени за Linux, Windows, macOS и FreeBSD.
Освен за решаване на задачите по синхронизация на данни между няколко устройства на един потребител, с помощта на Syncthing е възможно създаване на големи децентрализирани мрежи за съхранение на споделени данни, които са разпределени по системите на участниците. Предоставят се средства за контрол на достъпа и създаване на изключения за синхронизация. Възможно е определяне на хостове, които само ще получават данни, т.е. промените на тези хостове няма да се отразяват на инстанциите на данни, съхранявани на други системи. Поддържат се няколко режима на версиониране на файловете, при които се запазват предишните версии на променените данни.
При синхронизация файлът логически се разделя на блокове, които не могат да бъдат разделени при предаването на данни между системите на потребителя. При синхронизация на ново устройство, в случай на наличие на идентични блокове на няколко устройства, копирането на блоковете се извършва от различни възли, подобно на работата на системата BitTorrent. Колкото повече устройства участват в синхронизацията, толкова по-бързо ще протича репликацията на новите данни за сметка на паралелизацията. В процеса на синхронизация на променените файлове, по мрежата се предават единствено променените блокове на данни, а при преименуване или промяна на права на достъп се синхронизират само метаданните.
Каналите за предаване на данни се формират с помощта на TLS, всички възли аутентифицират един друг по сертификати и идентификатори на устройства, за контрол на целостта се прилага SHA-256. За определяне на възлите за синхронизация в локалната мрежа може да бъде използван протоколът UPnP, при който не се изисква ръчно въвеждане. IP адреси синхронизирани устройства. За настройка на системата и мониторинг е предвиден вграден уеб интерфейс, CLI клиент и GUI на базата на библиотеката GTK, в който допълнително са предоставени средства за управление на узлите за синхронизация и хранилищата.
Ключови промени в новата версия:
- Бекендът за съхранение е прехвърлен от БД LevelDB на SQLite. Миграцията на данните се извършва автоматично при първото стартиране след обновлението. Предполага се, че използването на SQLite ще опрости поддръжката и анализа на данните, както и ще намали количеството на грешките.
- Форматът за водене на логове е променен, като сега те се форматират в структурирана форма (съобщение + параметри във формат ключ-стойност). Добавен е нов уровень на логовете — WARNING, който не е толкова подробен като INFO, но обхваща повече информация в сравнение с уровня ERROR. Предоставена е възможност за назначаване на различни нива на логовете на различни пакети.
- Спирането на вечната съхранение на изтрити елементи в БД е прекратено, подобни елементи сега се изтриват след 6 месеца (времето може да се промени чрез опцията „—db-delete-retention-interval“.
- Кодът за обработка на опции от командния ред е подобрен и поддръжката на остарелия формат с едно тире е прекратена (т.е. вместо „-home“ трябва да се указва „—home“). Някои опции са променени или преведени в подкоманди.
- Създаването на директория по подразбиране при първото стартиране е прекратено.
- Активирано е установяването на множество мрежови връзки между устройства, използващи Syncthing 2.x. По подразбиране се създават три връзки — една за метаданни на индекса и две за обмен на данни.
- Алгоритъмът за разрешаване на конфликти в ситуация на изтриване на файлове е променен.
- Поради трудности с крос-компилацията на SQLite, спирането на изграждането на готови изпълними файлове за платформите dragonfly/amd64, illumos/amd64, solaris/amd64, linux/ppc64, netbsd/*, openbsd/386, openbsd/arm и windows/arm.
Източник: opennet.ru
