Hace poco, Gleb Naumenko y yo, junto con nuestro antiguo colega Greg Maxwell, presentamos Minisketch, una biblioteca de software que permite reducir el ancho de banda necesario para sincronizar datos entre nodos de sistemas distribuidos.
Originalmente, Minisketch fue desarrollado como componente de un proyecto que investigaba el uso de la conciliación de conjuntos para el intercambio de datos sobre transacciones entre nodos de Bitcoin, denominada “Retransmisión de Conciliación de Conjuntos” o SRR, por sus siglas en inglés. El objetivo de SRR es reducir considerablemente el ancho de banda necesario para ejecutar un nodo completo de Bitcoin.
El equipo decidió lanzar Minisketch aparte de SRR porque se espera que sea útil para muchas otras aplicaciones, tanto dentro como fuera del espacio Bitcoin.
¿Por qué elegir Minisketch?
Tradicionalmente, todos los sistemas distribuidos tienen dificultades para sincronizar datos entre nodos; en un sistema centralizado, es mucho más sencillo indicar a los nodos los datos que deberían tener y los que no.
Por ejemplo, un enfoque que se utiliza para sincronizar datos entre nodos de sistemas distribuidos es el de las tablas de búsqueda invertibles de Bloom (IBLT, por sus siglas en inglés), que, si bien tiene exigencias de CPU relativamente bajas, requiere mucho ancho de banda, especialmente cuando hay pocas diferencias. Minisketch usa un algoritmo de ancho de banda más eficiente conocido como PinSketch. En comparación con otros algoritmos de conciliación de conjuntos, como CPISync y la implementación original de PinSketch, Minisketch utiliza una potencia computacional mucho menor: es de 20 a 100 veces más rápido que PinSketch y, a veces, más de 1000 veces más rápido que CPISync.
¿Cómo se logran las mejoras?
La manera en que Minisketch implementa la conciliación de conjuntos es más eficiente en términos de ancho de banda que el simple envío de la lista entera de datos porque permite que los nodos produzcan un “boceto” matemático de la lista. Luego, los nodos se envían ese boceto para compararlo con las listas de los demás. El tamaño del boceto depende únicamente del número esperado de diferencias entre los nodos, en vez del tamaño total del conjunto. Pese a eso, permite que los nodos distingan con certeza qué datos requieren de los otros nodos.
Si simplificamos esta idea a una única diferencia, es más fácil entender cómo funciona. Digamos que yo tengo el conjunto {3,5,7,11}, y usted tiene el conjunto {3,5,7,9,11}. La única diferencia es {9}. Ambos calculamos la suma de nuestros elementos y obtenemos 3+5+7+11=26 y 3+5+7+9+11=35, respectivamente. Yo le envío mi suma de 26, y usted se la resta a su suma; la diferencia es 9. Esto funciona, pero está limitado a encontrar una única diferencia. Minisketch generaliza ese proceso enviando distintos tipos de “sumas” de los datos. El resultado es que, con una cantidad N de sumas distintas, se pueden encontrar N diferencias… En la medida en que el número de diferencias entre los conjuntos no sea mayor que el número de “sumas” enviadas, Minisketch siempre logrará encontrar todas las diferencias.
Minisketch en Bitcoin
La robustez de la red de Bitcoin depende de que se garanticen suficientes conexiones entre los nodos completos para impedir los ataques de Sybil y de partitionnement.
Desafortunadamente, la mayor parte de los datos que consume un nodo de Bitcoin (típicamente, entre el 40% y el 70%) no se destina a los datos sobre las transacciones, sino simplemente a anunciar las nuevas transacciones a los otros nodos para encontrar cuáles retransmitir. Hoy en día, aumentar el número de conexiones entre nodos aumenta proporcionalmente los gastos generales de ancho de banda. Eso limita el número de conexiones que admite cada nodo.
Al usar la conciliación de conjuntos, se puede distinguir eficazmente qué transacciones todavía no se retransmitieron sin tener que anunciar todas y cada una de las transacciones a todos los pares. Así, los gastos de ancho de banda para encontrar transacciones a retransmitir dejan de depender del número de conexiones, lo cual posiblemente aumente el número de conexiones que admite cada nodo. Lo bueno de esta solución es que no implica ningún cambio en las reglas de consenso de la red Bitcoin. SRR se habilitará cuando el software de ambas partes admita este protocolo y no tendrá ningún impacto negativo en los operadores de nodos que no lo implementen.
El protocolo SRR todavía se encuentra en las primeras fases de investigación y puede que falte mucho para que se lo adopte en la red de Bitcoin, pero los avances como Minisketch constituyen un paso importante para mejorar la adopción y la accesibilidad de los nodos completos de Bitcoin (así como también la optimización de otras redes distribuidas). ¡Visítenos regularmente para enterarse de todas las novedades de este proyecto!
Si desea obtener más información sobre Minisketch, visite el repositorio de GitHub de Minisketch.