Noticia libtorrent 2.1: Redes híbridas WebTorrent y nuevo motor de disco

libtorrent es una implementación completa de BitTorrent en C++


El popular ecosistema de intercambio de archivos P2P libtorrent, dio a cononcer recientemente el lanzamiento de la nueva verison 2.1, una actualización, que consolida el trabajo de miles de confirmaciones de código (commits) a lo largo de los últimos meses, transforma radicalmente la forma en que se distribuye el contenido al integrar el protocolo WebTorrent por defecto, además de introducir un motor de lectura y escritura en disco completamente rediseñado para maximizar el rendimiento.

El mayor atractivo de esta versión es la compatibilidad nativa con WebTorrent. Esta tecnología extiende el protocolo BitTorrent tradicional dotándolo de capacidades para crear redes de distribución de contenido descentralizadas directamente desde el navegador web de los usuarios, utilizando WebRTC para el intercambio de datos. Esto significa que los desarrolladores de sitios web solo necesitan insertar un pequeño fragmento de código JavaScript para que sus visitantes compartan el contenido entre sí de forma transparente.

Lo más fascinante de esta integración es la creación de redes híbridas sin fronteras, ya que los clientes de escritorio tradicionales basados en libtorrent ahora pueden conectarse e intercambiar partes de archivos con usuarios que simplemente tienen una pestaña abierta en su navegador web.

A su vez, los clientes web podrán nutrirse del enorme ancho de banda de los enjambres (swarms) de usuarios de escritorio que operan mediante conexiones TCP y UDP convencionales. Cabe mencionar que, al habilitarse por defecto, la compatibilidad con WebRTC amplía la superficie de ataque de la biblioteca, por lo que los desarrolladores recomiendan encarecidamente desactivarla durante la compilación si la aplicación final no hará uso de esta función.

Rendimiento optimizado con el nuevo motor de entrada y salida​


El rendimiento físico del almacenamiento ha recibido la introducción de un nuevo motor subyacente denominado pread_disk_io. Este sistema utiliza las funciones del sistema pwritev y preadv para realizar operaciones atómicas de lectura y escritura en múltiples búferes simultáneamente. El equipo de desarrollo ha establecido este nuevo motor como el predeterminado, ya que resulta ser inmensamente más eficiente al trabajar con discos duros mecánicos, almacenamiento en red y sistemas de archivos montados mediante FUSE.

Para los usuarios y servidores equipados con unidades ultrarrápidas de estado sólido NVMe, el motor anterior, basado en la asignación de archivos en memoria (mmap), sigue estando disponible en el código. Esta arquitectura heredada continúa siendo la opción más óptima y veloz para el hardware de almacenamiento moderno de altísimo rendimiento, pudiendo activarse según la necesidad del cliente.

A nivel estructural y de dependencias, libtorrent 2.1 da un salto al exigir C++17 para su compilación, dejando atrás código heredado y adoptando una sintaxis mucho más segura y moderna. Además, ahora requiere como mínimo la versión 1.1.0 de OpenSSL con soporte para la indicación del nombre del servidor (SNI).

Por otra parte, entre las optimizaciones más destacadas se encuentra una mejora en el formato de los datos de reanudación (resume data) para ocupar menos espacio en el disco, el soporte nativo para el intercambio de pares en redes anónimas I2P y la eliminación definitiva del soporte para las antiguas semillas web bajo el obsoleto estándar BEP 17, priorizando el más robusto BEP 19.

Cómo instalar y compilar libtorrent 2.1 en Linux​


Para los que quieran implementar esta nueva versión en sus sistemas, el método más directo y actualizado es compilar la biblioteca desde su código fuente. Al ser una librería base de C++, necesitarás preparar tu entorno de desarrollo primero.

En distribuciones basadas en Debian o Ubuntu, debes abrir tu terminal y asegurarte de tener instaladas las herramientas de compilación, CMake y las dependencias de Boost y OpenSSL ejecutando el comando

sudo apt install build-essential cmake libssl-dev libboost-all-dev

Una vez preparadas las dependencias, es indispensable clonar el repositorio oficial desde GitHub asegurándote de descargar también los submódulos necesarios para WebTorrent, lo cual se logra con el comando

git clone --recurse-submodules https://github.com/arvidn/libtorrent.git

Posteriormente, ingresa a la carpeta descargada con cd libtorrent, crea un directorio específico para construir los binarios ejecutando

mkdir build && cd build

Y prepara el entorno de compilación escribiendo

cmake

Si prefieres desactivar el soporte de WebTorrent por motivos de seguridad o para mantener la biblioteca más ligera, puedes modificar el comando anterior usando la bandera

cmake -Dwebtorrent=OFF

Finalmente, compila el código ejecutando el comando make (puedes acelerarlo añadiendo -j4 o el número de núcleos de tu procesador) y, cuando termine el proceso, instálalo en tu sistema con privilegios de administrador mediante el comando

sudo make install

Tras esto, los clientes torrent que compiles en tu equipo utilizarán esta potente y renovada base.

Continúar leyendo...