Solana: Cloudbreak

Tal vez te hayas preguntado en d贸nde almacena una Blockchain su informaci贸n. A medida que se validan transacciones, a cada segundo el peso de toda esa informaci贸n aumenta.

Bases de datos en una Blockchain

En la actualidad, tanto la Blockchain de Bitcoin como la de Ethereum rondan los 350 GB de informaci贸n almacenada. Un n煤mero que sin dudas continuar谩 creciendo con el tiempo.

Toda esta informaci贸n tiene que estar siendo escrita y le铆da continuamente, por lo que se necesita de un proceso r谩pido que permita esto.

La Blockchain de Bitcoin y Ethereum utilizan una base de datos NoSQL clave/valor llamada LevelDB para almacenar la informaci贸n. Se trata de un popular sistema para el guardado y acceso r谩pido a la informaci贸n que es desarrollado y mantenido por Google y otras importantes bases de datos como IndexedDB lo utilizan.

Pero LevelDB, a pesar de sus interesantes prestaciones, no es lo suficientemente 贸ptima para el prop贸sito de una Blockchain. Permite aproximadamente 5000 transacciones por segundo (TPS), no permite hacer escrituras y lecturas en simult谩neo.

Otra opci贸n podr铆a ser almacenar la informaci贸n en memoria RAM, pero no es lo m谩s 贸ptimo trat谩ndose de muchos gigas de informaci贸n.

Tal vez una buena opci贸n ser铆a guardar la informaci贸n en una memoria SSD, si bien es m谩s lenta que una RAM, pero SSD modernos pueden alcanzar los 32 subprocesos simult谩neos, lo que significa 370.000 lecturas por segundo o 185.000 TPS.

Si bien tanto GPU como SSD son r谩pidas, el problema siempre se encuentra en la CPU que suele ser m谩s lenta formando as铆 un cuello de botella.

Manejo de informaci贸n en Solana

Solana se diferencia de otras Blockchains al no utilizar una base de datos como LevelDB. En su lugar, implementa una l贸gica de guardado de la informaci贸n utilizando tanto de memoria RAM como la SSD para diferentes prop贸sitos, el cual se denomin贸 como Cloudbreak.

La informaci贸n se registra utilizando dos t茅cnicas:

  • Archivos mapeados en memoria.
  • Operaciones secuenciales en vez de aleatorias.
    • El 铆ndice de cuentas y bifurcaciones se almacena en la RAM.
    • Las cuentas se almacenan en archivos en memoria de hasta 4 MB de tama帽o.
    • Cada mapa de memoria solo almacena cuentas de una 煤nica bifurcaci贸n propuesta.
    • Los mapas se destruyen aleatoriamente en tantos SSD como est茅n disponibles.
    • Se utiliza sem谩ntica de copy on writes.
    • Las escrituras se agregan a un mapa de memoria aleatorio para la misma bifurcaci贸n.
    • El 铆ndice se actualiza despu茅s de que se completa cada escritura.

Todos estos procesos permiten que las actualizaciones de la cuenta se copien en la escritura y se agreguen a un SSD aleatoria, escalando tanto serialmente como horizontalmente.

Otra optimizaci贸n que implementa Solana es un Garbage Collector o recolector de basura que libera los espacios en memoria de las bifurcaciones que no fueron confirmadas y llevan mucho tiempo de retraso con respecto al estado actual de la red.

Enti茅ndase por bifurcaci贸n a la cadena de transacciones que continuamente los nodos crean al validar nuevas transacciones y proponen a la red para alcanzar el consenso sobre cu谩l de todas ellas es la correcta. La gran mayor铆a de las bifurcaciones se descartan y ese espacio en memoria debe liberarse para no consumir recursos de la red.

Conclusi贸n

Tal vez uno de los temas m谩s complicados de comprender sobre el funcionamiento de Solana. Su base de datos y persistencia de los mismos. En s铆ntesis, Solana hace uso de todos los recursos disponibles en el sistema entre todos los nodos de la red para poder registrar la informaci贸n.

La misma se encuentra en todo momento replicada en las memorias RAM o SSD de los nodos de la red y se busca optimizar la lectura a esta informaci贸n mapeando la misma y de manera secuencial.


Post creado en colaboraci贸n con el Curso de Solana de Platzi.