-
El sharding es una herramienta que permite fragmentar datos en un servidor diferente.
-
Este método sirve para optimizar la escalabilidad en sistemas descentralizados.
-
Actualmente, Bitcoin no utiliza sharding para dividir sus datos.
-
Ethereum 2.0. ha ido incorporando un sistema de sharding.
-
Aunque es un método muy útil, a algunos especialistas les preocupa la seguridad de los “shards”.
El “sharding” es un método de partición horizontal que divide los datos en múltiples «fragmentos» o shards, cada uno almacenado en un servidor o nodo diferente. Fue creado con la finalidad de promover la escalabilidad en sistemas descentralizados y distribuidos. Actualmente, su aplicación en las redes de criptomonedas podría solventar los problemas de escalabilidad que enfrentan tecnologías como Ethereum y Bitcoin.
Vale resaltar que el sharding es uno de los muchos métodos de escalabilidad que existen en la actualidad para las redes de criptomonedas. Entre los más conocidos están, por ejemplo, la red paralela a Bitcoin conocida como Lightning Network, que permite realizar transacciones “off-chain”, mientras que Ethereum cuenta con los rollups, que básicamente acumulan “colecciones” de transacciones.
Ahora bien, ¿en qué se diferencia el sharding de las transacciones “tradicionales”? Pues, en redes como Bitcoin, las transacciones se llevan a cabo en un solo nivel. Esto significa que los usuarios firman sus operaciones comerciales, estas llegan a una mempool o sala de espera, y luego son seleccionadas por los nodos mineros para su posterior verificación y registro. Cada una de estas transacciones, luego de ser verificadas, se registran en un libro único contable digital, también conocido como blockchain.
Este proceso, en líneas generales, aumenta los niveles de seguridad puesto que cada transacción debe ser verificada por un exhaustivo proceso de Prueba de Trabajo (PoW) y monitoreo de nodos, los cuales evitan la posibilidad de doble gasto dentro de la red. No obstante, también ralentiza el tiempo de procesamiento de la criptomoneda, ya que existe una capacidad límite de cantidad de transacciones que se pueden registrar por minuto.
En cambio, el sharding, permite dividir la información que se registrará en la red en elementos más pequeños, mejor conocidos como los shards). Cada uno de estos shards funciona como una red menor, la cual tiene su propio libro contable y nodos encargados de verificar la autenticidad de los datos. A su vez, estos shards se comunican entre sí para mantener la coherencia de información en toda la red.
¿Bitcoin utiliza sharding?
Hoy en día, Bitcoin no utiliza sharding como parte de su arquitectura ni de su funcionamiento. Sin embargo, el término «sharding» ha surgido en discusiones sobre cómo mejorar la escalabilidad de Bitcoin o en comparaciones con otras redes de criptomonedas que lo implementan, como Ethereum 2.0. Asimismo, Bitcoin maneja la escalabilidad a través de soluciones como Lightning Network, que realiza transacciones fuera de la cadena principal (off-chain), evitando la necesidad de dividir la red mediante sharding. Es importante resaltar que la comunidad bitcoiner siempre ha sido cautelosa con respecto a cambios significativos en su protocolo central, y el sharding requeriría una reestructuración profunda.
¿Qué blockchains utilizan sharding?
Varias redes de criptomonedas han adoptado el sharding como una solución para mejorar la escalabilidad y el rendimiento, sin embargo, a veces lo aplican desde enfoques diferentes. Por ejemplo, Ethereum migró a un sistema de Prueba de Participación (Proof of Stake), donde el sharding forma parte de sus actualizaciones.
Por otro lado, Polkadot utiliza un diseño que incluye «parachains», que son cadenas independientes que pueden considerarse similares al concepto de shards. Vale destacar que las parachains funcionan en paralelo y están conectadas a una cadena principal llamada «Relay Chain», que asegura la red y facilita la comunicación entre shards.
También encontramos el ejemplo de Zilliqa, que fue una de las primeras redes en implementar sharding de manera efectiva. Zilliqa divide la red en shards, cada uno procesando un subconjunto de transacciones en paralelo. Luego, los resultados se combinan en la cadena principal.
Podemos mencionar a Near Protocol (NEAR), que utiliza un sharding dinámico conocido como Nightshade. Este, en lugar de dividir completamente la red en fragmentos independientes, cada shard contribuye al estado global de la cadena de bloques. En este caso, los nodos no necesitan almacenar toda la blockchain, solo los datos del shard relevante.
La platafoma Elrond (EGLD) también implementó un sharding que combina la fragmentación de transacciones, estado y red. De este modo, se divide de forma dinámica la red en shards según la demanda. Su objetivo es lograr altos rendimientos de transacciones con bajas latencias y eficiencia energética. De hecho, Elrond puede alcanzar las 15.000 transacciones por segundo.
Por último, encontramos Harmony (ONE), una plataforma que utiliza sharding tanto a nivel de estado como de transacciones. Los nodos se agrupan en shards, los cuales procesan los datos y las transacciones en paralelo.
A continuación, te mostramos un cuadro comparativo donde puedes ver los objetivos y las diferencias de cada una de estas plataformas en cuanto al uso e implementación del sharding:
Blockchain | Tipo de Sharding | Propósito Principal |
Ethereum | Sharding de estado y transacciones | Escalabilidad y reducción de costos |
Polkadot | Parachains (similar a sharding) | Interoperabilidad y escalabilidad |
Zilliqa | Sharding puro | Alto rendimiento de transacciones |
Near Protocol | Sharding dinámico | Escalabilidad eficiente |
Elrond | Adaptive State Sharding | Rendimiento extremo |
Harmony | Sharding de estado y transacciones | Escalabilidad y validación rápida |
¿Cuál es la diferencia entre sharding y particionamiento?
La diferencia principal entre sharding y particionamiento radica en su contexto de aplicación y en la forma en que manejan la distribución de datos o carga. Ambos conceptos implican dividir un sistema en partes más pequeñas, pero se aplican de manera diferente según el entorno y los objetivos.
Podemos decir que el sharding es una forma avanzada de particionamiento diseñada principalmente para sistemas distribuidos. Como explicamos anteriormente, divide un sistema en fragmentos más pequeños llamados shards, donde cada fragmento es autónomo y puede operar de manera independiente, procesando transacciones o almacenando datos.
En cambio, el particionamiento es un concepto más general que divide datos en partes más pequeñas llamadas particiones según reglas específicas, como rangos de valores o atributos. Las particiones no siempre son autónomas y, en muchos casos, dependen de un servidor o nodo central.
Asimismo, el sharding está diseñado para manejar transacciones de forma distribuida, sobre todo en sistemas con alta concurrencia. Además, puede requerir protocolos avanzados de consenso, como sucede con Ethereum 2.0. En contraste, las transacciones en el particionamiento suelen ser más simples porque las particiones no están diseñadas para ser del todo indepenientes.
Aspecto | Sharding | Particionamiento |
Definición | Divide un sistema en shards autónomos que operan de forma independiente. | Divide datos en particiones según criterios lógicos o físicos. |
Propósito | Mejorar la escalabilidad horizontal y el procesamiento paralelo. | Organizar datos para optimizar el almacenamiento y las consultas. |
Autonomía | Cada shard es autónomo y puede procesar transacciones o datos por sí mismo. | Las particiones son dependientes de un sistema centralizado. |
Aplicación Principal | Sistemas distribuidos como blockchain y bases de datos escalables. | Bases de datos relacionales y sistemas centralizados. |
Escalabilidad | Escala horizontalmente al distribuir datos y procesamiento. | Escala principalmente en términos de almacenamiento. |
Procesamiento Paralelo | Permite procesar transacciones en paralelo entre shards. | Menos enfocado en el procesamiento paralelo. |
Manejo de Transacciones | Requiere protocolos avanzados para garantizar consistencia global. | Más simple, pero lento en transacciones que abarcan varias particiones. |
Complejidad Técnica | Alta complejidad debido a la necesidad de coordinación entre shards. | Baja complejidad en comparación con el sharding. |
Ejemplo de Uso | – Blockchain: Ethereum 2.0, Zilliqa. – Bases de datos distribuidas como MongoDB. | – Bases de datos relacionales: MySQL, PostgreSQL con particionamiento por rangos. |
¿Cuál es la diferencia entre sharding horizontal y vertical?
La principal diferencia entre el sharding horizontal y el vertical radica en cómo se divide el sistema, ya sea separando filas o columnas, respectivamente. Ambos enfoques buscan mejorar el rendimiento, la escalabilidad y la organización de datos, pero tienen usos distintos dependiendo de las necesidades del sistema.
El sharding horizontal consiste en dividir los datos fila por fila, creando múltiples fragmentos o shards, donde cada uno contiene un subconjunto de las filas de la tabla original. En cambio, el vertical divide los fragmentos por columnas.
Ahora bien, ¿cuándo es conveniente usar cada uno de ellos? Se recomienda el sharding horizontal cuando se espera un crecimiento significativo en el número de filas (registros), si se necesita una alta disponibilidad y tolerancia a fallas o cuando la distribución de los datos es relativamente uniforme.
A su vez, es conveniente usar el sharding vertical cuando algunas columnas crecen mucho más rápido que otras, si se necesita optimizar el rendimiento de consultas que acceden a un subconjunto de columnas o si se tienen tablas muy anchas con muchas columnas.
Vale destacar que la escalabilidad horizontal permite distribuir las filas de datos en múltiples nodos, lo que es ideal para manejar grandes volúmenes de registros (por ejemplo, millones de usuarios). En este caso, cada shard maneja una parte del tráfico, lo que evita la sobrecarga en un solo servidor.
Por otro lado, el sharding vertical optimiza las consultas al dividir las columnas según su uso y ofrece un mayor aprovechamiento de recursos, dado que reduce el tamaño de las tablas en cada shard. Esto mejora el rendimiento en sistemas con columnas extensas.
Podemos comprenderlo de forma más sencilla si le echamos un vistazo a este cuadro:
Característica | Sharding Horizontal | Sharding Vertical |
Forma de división | Filas (subconjuntos de registros) | Columnas (atributos o propiedades) |
Estructura de shards | Todos los shards tienen las mismas columnas pero diferentes filas | Todos los shards tienen las mismas filas pero diferentes columnas |
Casos de uso | Grandes volúmenes de registros | Tablas con muchas columnas |
Ventajas | Escalabilidad para manejar grandes volúmenes de datos | Optimización de consultas específicas |
Desventajas | Requiere balancear la distribución de filas entre shards | Complejidad para reconstruir datos completos |
¿Es seguro el sharding?
La fragmentación de bases de datos, si bien ofrece ventajas, puede que esté ligada a nuevos retos o desafíos. En este sentido, la seguridad es uno de los temas que más preocupa a los interesados, pues cada fragmento, al operar de manera independiente, se convierte en un objetivo potencial para ataques.
Además, la complejidad de esta técnica exige una planificación exhaustiva. Las transacciones que abarcan varios fragmentos son especialmente desafiantes, ya que requieren una coordinación precisa para garantizar la consistencia de los datos. Recordemos que los sistemas distribuidos requieren comunicación constante entre shards. Si esta comunicación no está cifrada o autenticada adecuadamente, puede ser interceptada o manipulada.
Asimismo, un riesgo que preocupa a los especialistas es la posibilidad de que se realicen ataques a shards específicos. Esto quiere decir que, si un shard maneja una parte desproporcionada de datos sensibles o transacciones críticas, puede convertirse en un objetivo atractivo para los atacantes.
Por ejemplo, se podría dirigir un ataque a un shard que contenga cuentas de alto valor. Además, una distribución de shards mal diseñada puede facilitar la predicción de ubicaciones de datos, haciendo más fácil un ataque.
En resumen, el sharding puede ser seguro si se diseñan mecanismos adecuados para proteger la comunicación, la distribución de datos y la consistencia entre shards. Sin embargo, su complejidad introduce riesgos específicos que requieren un enfoque riguroso en términos de seguridad. La clave está en implementar estándares robustos de seguridad y monitoreo continuo.