Se presenta el lanzamiento del sistema de sincronización automática de archivos Syncthing 2.0. Este sistema replica directamente los datos sincronizados entre los sistemas de usuario cuando aparecen simultáneamente en línea, utilizando el protocolo BEP (Protocolo de Intercambio de Bloques) desarrollado por el proyecto. El código de Syncthing está escrito en Go y se distribuye bajo la licencia libre MPL. Se han preparado compilaciones listas para usar para Linux, Windows, macOS y FreeBSD.
Además de solucionar los problemas de sincronización de datos entre varios dispositivos de un mismo usuario, Syncthing permite crear grandes redes descentralizadas para almacenar datos compartidos distribuidos entre los sistemas participantes. Se proporciona control de acceso y la creación de excepciones para la sincronización. Es posible definir hosts que solo recibirán datos; es decir, los cambios en estos hosts no se reflejarán en las instancias de datos almacenadas en otros sistemas. Se admiten varios modos de control de versiones de archivos, en los que se guardan las versiones anteriores de los datos modificados.
Durante la sincronización, el archivo se divide lógicamente en bloques indivisibles al transferir datos entre sistemas de usuario. Al sincronizar con un nuevo dispositivo, si existen bloques idénticos en varios dispositivos, estos se copian desde diferentes nodos, de forma 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. Durante la sincronización de archivos modificados, solo se transfieren a través de la red los bloques de datos modificados, y al cambiar el nombre o los permisos de acceso, solo se sincronizan los metadatos.
Los canales de transmisión de datos se establecen mediante TLS, todos los nodos se autentican entre sí mediante certificados e identificadores de dispositivo, y se utiliza SHA-256 para el control de integridad. UPnP permite identificar nodos de sincronización en la red local, eliminando la necesidad de entrada manual. direcciones IP Dispositivos sincronizados. Para la configuración y monitorización del sistema, se proporciona una interfaz web integrada, un cliente CLI y una interfaz gráfica de usuario (GUI) basada en la biblioteca GTK, que también proporciona herramientas para la gestión de nodos y repositorios de sincronización.
Cambios clave en la nueva sucursal:
- El backend de almacenamiento se ha migrado de la base de datos LevelDB a SQLite. La migración de datos se realiza automáticamente durante el primer inicio tras la actualización. Se espera que el uso de SQLite simplifique el mantenimiento y el análisis de datos, además de reducir la cantidad de errores.
- Se ha modificado el formato de registro y ahora se genera de forma estructurada (mensaje + parámetros en formato clave-valor). Se ha añadido un nuevo nivel de registro, ADVERTENCIA, que no es tan detallado como INFO, pero abarca más información que el nivel ERROR. Ahora es posible asignar diferentes niveles de registro a distintos paquetes.
- Se ha detenido el almacenamiento eterno de elementos eliminados en la base de datos; dichos elementos ahora se eliminan después de 6 meses (el tiempo se puede cambiar mediante la opción "--db-delete-retention-interval").
- Se mejoró el código para analizar las opciones de la línea de comandos y se eliminó la compatibilidad con el formato antiguo de un solo guion (es decir, "-home" debería reemplazarse por "--home"). Algunas opciones se renombraron o se trasladaron a subcomandos.
- Dejó de crear el directorio predeterminado en la primera ejecución.
- Se establecen múltiples conexiones de red entre dispositivos que ejecutan Syncthing 2.x. De forma predeterminada, se crean tres conexiones: una para metadatos de índice y dos para intercambio de datos.
- Se ha cambiado el algoritmo para resolver conflictos en caso de eliminación de archivos.
- Debido a las dificultades en la compilación cruzada de SQLite, se ha discontinuado el ensamblaje de archivos ejecutables listos para usar para las plataformas dragonfly/amd64, illumos/amd64, solaris/amd64, linux/ppc64, netbsd/*, openbsd/386, openbsd/arm y windows/arm.
Fuente: opennet.ru
