Sharding, una oportunidad para la escalabilidad distribuida

José Maldonado
30 MAR 2020
Sharding, una oportunidad para la escalabilidad distribuida
1.

Introducción

Uno de los grandes problemas de la tecnología blockchain es la escalabilidad, o la capacidad de aumentar su potencial para adaptarse a un nivel cada vez mayor de usuarios y atender sus necesidades. El problema es largamente conocido y prácticamente ninguna blockchain hasta ahora ha podido escapar completamente.

Las consecuencias de la falta de escalabilidad ya ha afectado a las criptomonedas fuertemente. En Bitcoin por ejemplo, el hecho de que su red solo pueda procesar 7 transacciones por segundo, hace que esta red colapse rápidamente cuando sus usuarios comienzan a usarla de forma intensiva. Como resultado, las transacciones tardan horas en realizarse y las comisiones disparan su valor. Todo esto deja atrás las premisas de Bitcoin de hacer transacciones rápidas y económicas. Lo mismo sucede en Ethereum e incluso EOS ha caído víctima de este problema.

Por esa razón, los desarrolladores de criptomonedas se esfuerzan por buscar soluciones a este problema. Lighting Network en Bitcoin es una respuesta a esto. Pero es una solución construida sobre un protocolo de segunda capa. Una situación que no convence a muchos proyectos que buscan una solución que puedan integrar nativamente.

De esos esfuerzos, nace una alternativa para solucionar el problema de la escalabilidad, el sharding. Un revolucionario concepto informático que puede darle el impulso necesario a la blockchain para alcanzar cotas de escalabilidad que permitan la masificación de sus servicios en todo el mundo, sin que ello vaya en detrimento de aquello que promete.

Pero, ¿Qué es el sharding exactamente? ¿Cómo funciona? Y, no menos importante ¿Qué impacto tendría en la tecnología blockchain? Pues bien, examinemos todas estas interrogantes.

Relacionado: Tres plataformas Blockchain de 3era generación a tomar en cuenta para su portafolio

2.

¿Qué es el sharding?

El sharding es un proceso por el cual se segmenta un enorme conjunto de datos en varios grupos más pequeños. Cada uno de estos grupos más pequeños es totalmente independiente del resto. Sin embargo, la suma de todos estos pequeños grupos genera al final el mismo grupo de datos original. Todo ello sin que se pierda absolutamente nada de información. Un diseño sin duda interesante y que en la actualidad es exitosamente aplicado en bases de datos o sistemas de archivos.

Por ejemplo, podemos ver el uso de técnicas de sharding en sistemas de almacenamiento de datos como ZFS, RAID o LVM. En cada uno de estos sistemas, la información puede ser repartida en distintos dispositivos físicos (disco duros). Con ellos se puede almacenar grandes cantidades de información. En el proceso, cada disco duro aporta tanto una determinada cantidad de almacenamiento como potencia en términos de velocidad de lectura y escritura. Como resultado, la suma de todos los discos duros que forman parte el sistema ofrecen un mayor nivel de almacenamiento, velocidad de lectura y escritura, redundancia y seguridad.

Todo ello gracias al sharding. Pero ¿Cómo puede esto trasladarse al mundo de la blockchain y sus redes P2P? Pues bien veamos esto con un sencillo ejemplo.

Ejemplo de sharding aplicado a blockchain

Las redes P2P de una blockchain son creadas por la unión de varios nodos que comparten entre sí una misma copia de todo el historial de la blockchain, el ledger o libro de contabilidad. Este ledger puede ser visto como una base de datos donde está almacenado todo el historial de la blockchain.

Si aplicaramos el concepto de sharding esto cambiaría radicalmente. En lugar de que cada nodo tenga una misma copia de la blockchain, la realidad sería que cada nodo tendría una copia propia. Al mismo tiempo, cada nodo tendría la potestad de procesar transacciones de forma autónoma usando sus propios recursos computacionales. De esa manera, cada nodo podría usar de forma más eficientes sus recursos. Pero no solo eso, también permitiría que la red en su totalidad aumentará su potencial para responder a las transacciones que se originen en la misma.

Para evitar que un grupo de nodos puedan solapar las funciones o transacciones de otro grupo, estos solo responderían a las peticiones de un determinado grupo de usuarios previamente registrados. De esta forma, cada grupo de nodos tiene asignado un grupo de usuarios, direcciones o contratos inteligentes a los que responder. Fuera de este registro, las peticiones serán rechazadas o enrutadas a su verdadero nodo destino.  Adicionalmente otras medidas de seguridad pueden ser tomadas para evitar violaciones del protocolo del sharding blockchain.

Inevitablemente, el historial de cada uno de estos grupos se uniría luego al historial definitivo de la blockchain, el ledger original. De esa forma, cada uno de los pedazos de información de los nodos terminan formando la blockchain y historial que todos conocemos en este momento.

3.

¿Cómo funciona el sharding?

El ejemplo anterior seguramente ya te ha dado una idea de cómo funciona el sharding en la tecnología blockchain. Básicamente lo que hace es dividir la red en grupos de nodos más pequeños, para que estos se concentren en procesar transacciones de un grupo limitado de usuarios o smart contracts. Con ello el sharding logra usar de forma más eficiente el poder de los nodos de la red y ofrecer respuestas más rápidas a las transacciones.

Estos nodos se encuentran orquestados por un protocolo de funcionamiento, que evita que los grupos de nodos puedan solaparse en sus funciones. Una medida que agrega seguridad a la red y evita conflictos en su funcionamiento.  Finalmente, el aumento en la eficiencia tanto en el procesamiento de transacciones, como en la validación y almacenamiento de las mismas, repercute en la capacidad global de la red. Esto en forma de un aumento significativo en la escalabilidad, velocidad de procesamiento, almacenamiento, redundancia y funciones de la red en general.

4.

Sharding y los desafíos a superar

Sin duda el sharding es una opción poderosa para escalar la tecnología blockchain. Pero su aplicación tiene una serie de desafíos que deben resolverse en primer lugar.

En primer lugar, usar sharding hace que cada pequeño grupo de nodos sea más susceptible de ser atacado. Esto se debe a que cada pequeño grupo de nodos mantendría una copia de su sub-cadena y al ser más pequeño, un atacante puede dirigir un ataque a estos de forma más sencilla para reescribirla o realizar una denegación de servicio. Problemas como el Ataque de 51%, el Ataque de carrera o el Ataque de Vector 76 se hacen más sencillos de llevar a cabo. Después de todo, no atacas a una red con miles de nodos, sino algo mucho menor.

Por ejemplo, para realizar un ataque de 51% en una blockchain con sharding solo necesitamos tener bajo control el 5,1% de los nodos totales de la red. Esto se debe, a que las redes que usan sharding serían susceptibles al llamado Ataque del 1%. Lo que significa que solo baste con controlar el 1% de un grupo para controlar el poder un grupo de nodos en sharding. Esto es un enorme problema de seguridad. Uno que tiene que atenderse antes de poder aplicar el sharding en blockchains como Ethereum.

En segundo lugar, nos encontramos con el problema de la selección de nodos para la validación. Siendo usuarios de la blockchain podemos emitir una transacción y esperamos que esta sea atendida por algún nodo dentro del sharding. Sin embargo, la estructura del sharding abre las puertas para que un atacante que controle cierta cantidad de nodos pueda validar la transacción en diferentes segmentos de la red al mismo tiempo. Como resultado, el atacante podría llevar a cabo ataques de doble gasto.

Sin embargo, esto tiene ya una solución práctica. Esta pasa por crear un sistema que permite asignar las transacciones de forma aleatoria a los nodos que forman parte de la red. De esta forma, la red velará por asignar transacciones a distintos grupos de nodos y que estos procesan la transacción en su momento. El proceso sin embargo introduce una fuerte latencia y otros problemas de seguridad no estudiados a profundidad aún.

Relacionado: Vitalik Buterin revela la hoja de ruta de Ethereum 2.0 a Cointelegraph

5.

El impacto del sharding en la tecnología blockchain

El uso de sharding en blockchain puede significar una mejora sustancial en la escalabilidad de la blockchain. Permitiría pasar de unas pequeñas decenas de transacciones por segundo a miles de transacciones por segundo, y más dependiendo de la implementación de los protocolos de consenso de la misma.

Esto permitiría ofrecer a los usuarios de blockchain una excelente experiencia de uso, con transacciones rápidas y económicas. También permitiría mejorar la interactividad con las aplicaciones descentralizadas, todo gracias a que el sharding abre las puertas a la ejecución en paralelo de las mismas.

Todo esto tendría un gigantesco impacto en la usabilidad de la blockchain y todo lo que tiene para ofrecernos. Pero no solo eso, el sharding permitiría que la red se vuelva cada vez más poderosa a medida que crece. Todo lo contrario a lo que pasa ahora, donde el crecimiento de la red agrega más y más latencia a la misma.

En la actualidad el único proyecto que ha logrado llevar con éxito el sharding a la blockchain es Zilliqa. Como resultado ofrece una blockchain con alta escalabilidad. Otro

De allí el enorme interés de Ethereum por hacer del sharding una realidad en su red, un proyecto que comenzará a ser posible con la construcción de Ethereum 2.0. Por otro lado, Telegram Open Network, la blockchain de Telegram tiene ya capacidad para usar sharding en su red. Sin embargo, el proyecto se encuentra congelado debido a un problema legal con la SEC en los Estados Unidos. La misma historia pasa con Libra de Facebook, un proyecto que usaba un protocolo de consenso totalmente nueva aplicado con un concepto de sharding para garantizar transacciones instantáneas entre sus partes.

Por esta razón, seguramente veremos más esfuerzos en desarrollar sharding en otras blockchain, todas ellas buscando solucionar uno de los problemas fundamentales de la blockchain. Todo con el fin de ofrecer un rendimiento superior y una experiencia de uso sin igual para todos.