Se ha lanzado la versión 2.0 del sistema de sincronización automática de archivos Syncthing, en la que los datos sincronizados no se cargan en almacenes en la nube, sino que se replican directamente entre los sistemas del usuario cuando aparecen simultáneamente en línea, utilizando el protocolo BEP (Block Exchange Protocol) desarrollado por el proyecto. El código de Syncthing está escrito en Go y se distribuye bajo la licencia MPL. Se han preparado compilaciones para Linux, Windows, macOS y FreeBSD.
Además de resolver problemas de sincronización de datos entre varios dispositivos de un mismo usuario, Syncthing permite crear grandes redes descentralizadas para el almacenamiento de datos compartidos, distribuidos entre los sistemas de los participantes. Se proporciona un medio para controlar el acceso y crear excepciones para la sincronización. Es posible definir hosts que solo recibirán datos, es decir, los cambios en esos hosts no se reflejarán en las instancias de datos almacenadas en otros sistemas. Se admiten varios modos de versionado de archivos, donde se mantienen las versiones anteriores de los datos modificados.
Al sincronizar, un archivo se divide lógicamente en bloques, que son indivisibles durante la transferencia de datos entre los sistemas del usuario. Cuando se sincroniza con un nuevo dispositivo, si hay bloques idénticos en varios dispositivos, la copia de bloques se realiza desde diferentes nodos, de manera similar al funcionamiento del sistema BitTorrent. Cuantos más dispositivos participen en la sincronización, más rápida será la replicación de nuevos datos gracias a la paralelización. En el proceso de sincronización de archivos modificados, solo se transfieren los bloques de datos que han cambiado a través de la red, y al renombrar o cambiar permisos de acceso, solo se sincronizan los metadatos.
Los canales de transmisión de datos se forman utilizando TLS, todos los nodos se autentican mutuamente mediante certificados e identificadores de dispositivos, y se aplica SHA-256 para el control de integridad. Para identificar nodos de sincronización en la red local, se puede utilizar el protocolo UPnP, el cual no requiere entrada manual. direcciones IP dispositivos sincronizados. Para configurar el sistema y monitorear, se incluye una interfaz web integrada, un cliente CLI y una GUI basada en la biblioteca GTK, en la que también se proporcionan herramientas para gestionar nodos de sincronización y repositorios.
Cambios clave en la nueva rama:
- El backend de almacenamiento se ha trasladado de la base de datos LevelDB a SQLite. La migración de datos se realiza automáticamente en el primer inicio después de la actualización. Se espera que el uso de SQLite facilite el mantenimiento y el análisis de datos, así como reduzca el número de errores.
- Se ha modificado el formato de registro, que ahora se genera de manera estructurada (mensaje + parámetros en formato clave-valor). Se ha agregado un nuevo nivel de registro: WARNING, que no es tan detallado como INFO, pero cubre más información en comparación con el nivel ERROR. Se proporciona la posibilidad de asignar diferentes niveles de registro a diferentes paquetes.
- Se ha dejado de almacenar indefinidamente elementos eliminados en la base de datos; dichos elementos ahora se eliminan después de 6 meses (el tiempo se puede cambiar a través de la opción "—db-delete-retention-interval").
- Se ha mejorado el código para analizar las opciones de la línea de comandos y se ha dejado de soportar el formato obsoleto con un solo guion (es decir, en lugar de "-home" se debe usar "—home"). Algunas opciones se han renombrado o trasladado a la categoría de subcomandos.
- Se ha detenido la creación del directorio por defecto en el primer inicio.
- Se ha habilitado la configuración de múltiples conexiones de red entre dispositivos que utilizan Syncthing 2.x. Por defecto, se establecen tres conexiones: una para metadatos de índice y dos para intercambio de datos.
- Se ha cambiado el algoritmo de resolución de conflictos en situaciones de eliminación de archivos.
- Debido a dificultades en la compilación cruzada de SQLite, se ha dejado de generar archivos ejecutables listos para las plataformas dragonfly/amd64, illumos/amd64, solaris/amd64, linux/ppc64, netbsd/*, openbsd/386, openbsd/arm y windows/arm.
Fuente: opennet.ru
