En las cadenas de bloques tradicionales, la propagación de bloques se produce mediante una red peer-to-peer donde los nuevos bloques y transacciones se transmiten a todos los nodos que se propagan. Este proceso suele ocurrir secuencialmente o por inundación. Sin embargo, este método no es escalable, ya que se vuelve difícil de gestionar a medida que la red crece debido a la gran cantidad de comunicaciones.
Consideremos una red de 35 000 validadores. El líder necesita transmitir un bloque de 128 MB (aproximadamente 500 000 transacciones a 250 bytes por transacción) a los 35 000 validadores. La implementación tradicional de propagación de bloques requeriría que el líder tuviera una conexión única con cada validador y transmitiera los 128 MB completos 35 000 veces. Esto resultaría en una transmisión total de datos de 4,69 TB, que supera con creces las capacidades típicas de ancho de banda y sería inviable con tantas conexiones.
Para solucionar el problema de la lenta diseminación de bloques, Solana introdujo Turbine, un mecanismo de propagación de bloques multicapa que los clústeres utilizan para transmitir entradas del libro mayor a todos los nodos. En términos generales, Turbine divide los bloques en bloques más pequeños y los disemina a través de un orden de nodos, lo que reduce la carga en cada nodo.
¿Qué es la turbina?
La arquitectura de Turbine se inspiró en gran medida en la de BitTorrent. Ambas se basan en la fragmentación de datos (dividiendo grandes cantidades de datos en fragmentos más pequeños) y utilizan la red peer-to-peer para difundirlos. Turbine está optimizado para streaming. Transmite datos únicamente mediante UDP, lo que ofrece ventajas en latencia. Implementa una ruta aleatoria por paquete a través de la red a medida que los líderes (productores de bloques) transmiten sus datos. Esta alta velocidad de propagación de bloques permite a Solana mantener su alto rendimiento.
Además, Turbine aborda el problema de la disponibilidad de datos, garantizando que todos los nodos puedan acceder a los datos necesarios para validar las transacciones eficientemente. Esto se logra sin requerir un gran ancho de banda, un cuello de botella común en otras redes blockchain.
El proceso de propagación por bloques de la turbina
Antes de propagar un bloque, el líder lo construye y ordena según el flujo de transacciones entrante. Una vez construido, el bloque está listo para enviarse mediante Turbine al resto de la red. Este proceso se conoce como propagación de bloques . Los mensajes se transmiten entre validadores y se encapsulan en los datos del bloque para cumplir con el estado de compromiso "confirmado" o "finalizado".
Mientras los líderes construyen y proponen bloques completos, los datos reales se envían como fragmentos (bloques parciales) a otros validadores de la red. Los fragmentos son las unidades atómicas que se envían entre validadores. Este proceso de fragmentación y propagación garantiza una distribución rápida y eficiente de los datos de los bloques en Solana, manteniendo un alto rendimiento y la seguridad de la red.
Nota: Un bloque confirmado ha recibido una supermayoría de votos del libro mayor, mientras que un bloque finalizado ha sido confirmado y tiene más de 31 bloques confirmados construidos sobre el bloque objetivo.
Codificación de borrado
Antes de enviarse al Árbol de Turbinas, los fragmentos se codifican con la codificación de borrado Reed-Solomon, un método de protección de datos que utiliza tipos específicos de código de corrección de errores. Este método está diseñado para proteger contra la pérdida de datos en caso de fallos o errores. Divide los datos en bloques más pequeños y codifica cada bloque con información adicional.
Turbine depende en gran medida de la retransmisión de paquetes entre validadores, quienes podrían decidir retransmitir datos incorrectos o incompletos. Debido a la retransmisión, la pérdida de paquetes en toda la red se agrava y la probabilidad de que el paquete no llegue a su destino aumenta con cada salto. Por ejemplo, si un líder transmite el 20 % de los paquetes del bloque como códigos de borrado, la red puede descartar cualquier 20 % de los paquetes sin perder el bloque. Los líderes pueden ajustar dinámicamente este número (tasa de FEC) según las condiciones de la red, considerando variables como la pérdida de paquetes observada recientemente en toda la red y la profundidad del árbol.
En Solana, los fragmentos de datos son bloques parciales del bloque original generado por el líder, y los fragmentos de recuperación son los bloques codificados por borrado generados por Reed-Solomon. Los bloques en Solana suelen tener una FEC de 32:32 (32 de 64 paquetes pueden perderse sin necesidad de retransmisión).
Árbol de turbinas
Solana utiliza un Árbol de Turbina, una topología de red estructurada, para facilitar la propagación eficiente de fragmentos entre validadores. Una vez codificados correctamente en sus respectivos grupos, los fragmentos están listos para difundirse a través del Árbol de Turbina e informar a otros validadores de la red sobre su estado más actualizado.
El Árbol de Turbina, al ser conocido por todos, garantiza que cada validador sepa exactamente dónde es responsable de retransmitir ese fragmento. El Árbol de Turbina suele ser un árbol de 2 o 3 saltos (según el número de validadores activos), dado el valor actual de DATA_PLANE_FANOUT de 200.
Además, los nodos pueden recurrir a la interpelación y la reparación si no reciben suficientes fragmentos o si la tasa de pérdida supera la tasa de FEC. Con la implementación actual, un nodo que no tenga suficientes fragmentos para reconstruir el bloque envía una solicitud al líder para su retransmisión. Con el método determinista Turbine, cualquier nodo que reciba el bloque completo puede enviar los fragmentos de reparación que necesita el nodo solicitante, impulsando así la transmisión de datos hacia las áreas del árbol que los solicitan.
Conclusión
En este informe, examinamos el mecanismo de propagación de bloques Turbine de Solana, que fragmenta bloques grandes en fragmentos más pequeños para distribuir datos eficientemente por la red. Destacamos cómo la codificación de borrado garantiza la integridad de los datos y cómo el Árbol Turbine facilita la transmisión rápida entre validadores.