Artículo de Blog
Autor
Veronica Irwin
Fecha de publicación
Modo Pull
Tps
TPS, o “transacciones por segundo”, es uno de los puntos de datos más comentados en blockchain. Los periodistas clasifican diferentes blockchains usándolo. Los responsables de políticas especulan sobre ello. Los degenerados de Twitter van a la guerra por ello.
Es una métrica de cuánto trabajo pueden gestionar realmente las blockchains, y una alta tasa de TPS hace que transaccionar a través de una blockchain sea más deseable que usar los carriles financieros tradicionales. Lo que hace a Stellar óptimo para pagos es en parte debido a su competitiva tasa de TPS. Mantener esa tasa, e incluso mejorarla, ha sido desde hace tiempo un foco de la comunidad de Stellar.
Stellar actualmente no está limitado por TPS. La tasa máxima de la red está establecida en 200 TPS, aunque eso podría aumentarse si la comunidad votara por ello. Y aunque las transacciones ocasionalmente alcanzan esa tasa de 200 TPS, la blockchain aún es capaz de resolver transacciones en espera de validación en unos pocos segundos — solo que, ya sabes, no justo en ese preciso segundo.
Pero como siempre, Stellar sigue alcanzando las estrellas. Siempre es preferible que la tecnología pueda manejar más flujos de datos de los que necesita, por eso tantas versiones principales y actualizaciones de protocolo se centran en aumentar las capacidades de velocidad de transacción. Una de esas versiones, 19.4.0, introdujo el Modo Pull, una característica que todos los validadores comenzaron a usar después de la versión 19.7.0. Estas versiones prepararon la red para una importante actualización del protocolo para aumentar la capacidad de la red.
Es importante que todos los validadores entiendan lo que estas versiones se propusieron lograr. De esa manera, pueden verificar que la versión realmente logró su objetivo, y ofrecer mejoras o señalar fallos. Así que vamos a profundizar en cómo fue diseñado el Modo Pull, y cómo ayuda a mejorar el TPS de Stellar.
Si eres más de aprender visualmente, también puedes ver la presentación sobre el Modo Pull del ingeniero de SDF, Hidenori Shinohara, en Meridian el año pasado:
Hay mucha complejidad en el Protocolo de Consenso de Stellar (si no entiendes cómo funciona, te recomiendo encarecidamente que leas el documento técnico antes de continuar). Pero en resumen: los validadores de la red deben mantener un registro histórico completo de cada operación que ha ocurrido en la red de Stellar para mantener las cosas funcionando. También deben llegar a un acuerdo entre ellos para — ya lo adivinaste — validar una nueva transacción y cerrar el libro mayor.
Para hacer esto, los validadores necesitan contarse unos a otros sobre las transacciones. Lo hacen a través de algo llamado “transmisión de transacciones”, que también se refiere a veces como transmisión “multicast”, o “inundación”. No te equivoques — aunque la transmisión implica que una entidad central está enviando datos a todos los demás, eso no es lo que sucede aquí. En cambio, cada nodo está transmitiendo datos sobre transacciones a otros nodos en la red, sin que ningún nodo sea el diseminador central de la información.
Debido a que no hay solo un nodo transmitiendo información sobre transacciones, el poder está descentralizado. La descentralización es algo bueno, porque significa que ningún nodo único tiene el poder de bloquear transacciones. Sin embargo, el inconveniente es que hay una cantidad excesiva de información redundante siendo diseminada entre nodos. Hay tantos nodos contándose unos a otros sobre las transacciones, que a veces a un solo nodo se le informa sobre una transacción más de 30 veces.
La redundancia puede ayudar a hacer un sistema estable, pero ese nivel de redundancia es innecesario. Se necesita una cantidad excesiva de CPU, memoria y ancho de banda para funcionar, lo que ralentiza la velocidad de la red. En otras palabras, la transmisión de transacciones era un factor limitante en el TPS de Stellar antes de que la versión principal 19.7.0 mandara el Modo Pull para todos los validadores.
Imagina que quieres enviarle a alguien que no conoces tan bien todavía — tal vez un colega de oficina en tu nuevo trabajo — un regalo para su cumpleaños. No sabes si ya tienen el pequeño squishmallow que quieres comprar en su colección de peluches. Ni siquiera estás seguro si les gustan los peluches grandes en absoluto. Entonces, ¿qué haces?
Haces unas preguntas antes de salir a comprar ese squishmallow y dárselo.
Ese es el concepto detrás del Modo Pull: “preguntar antes de enviar”. Aunque parece bastante obvio para los humanos, no es tan obvio para los validadores en una red descentralizada. Pero después de la implementación del Modo Pull, los validadores comenzaron a enviarse unos a otros una representación de una transacción para verificar si un validador ya sabe sobre ella antes de enviar la transacción en sí.
Esa representación de la transacción es un hash: una notación abreviada para la transacción que se usa en este contexto porque toma menos poder de cómputo para transmitir y leer. La transacción en sí entonces solo se envía si el nodo receptor no tiene ya un registro de ella, y si acepta la solicitud.
El Modo Pull fue probado en Stellar Supercluster, una plataforma de simulación diseñada por SDF para evaluar cambios en Stellar Core. Puedes leer más sobre cómo está diseñado aquí. En resumen, simula una red distribuida dentro de unos pocos ordenadores, pero con más sofisticación que ejecutar una simple prueba en solo un portátil. Está diseñado para ser un entorno para probar cómo se comportará el código en Mainnet, sin empujarlo directamente a Mainnet y arriesgar cualquier interrupción.
El Modo Pull fue probado de tres maneras: en una versión de Stellar Supercluster destinada a comportarse como una red realista, en una versión de Stellar Supercluster con otras configuraciones potenciales, y una versión que permitió pruebas de límite, inundando la red con transacciones hasta que se rompe para determinar un máximo absoluto de TPS.
Aunque los resultados de Stellar Supercluster son todos relativos — es decir, se pueden comparar con otras simulaciones hechas en Stellar Supercluster, pero no con Mainnet u otras blockchains públicas — los resultados mostraron que el Modo Pull aumentaba el TPS máximo en un 72%. Esto es probable porque el Modo Pull disminuye el poder computacional necesario para validar una transacción.
Entonces, ¿qué deberías hacer con esta información? Bueno, como dije, el Modo Pull ya está disponible — se introdujo el otoño pasado, y se activó para todos los nodos validadores con una versión principal la semana pasada. Eso significa que si ejecutas un nodo validador, tu nodo está usando el Modo Pull. Y si simplemente estás transaccionando en la red o construyendo sobre ella, simplemente estás cosechando los beneficios (Felicidades. Además, de nada!).
Pero una comunidad de blockchain próspera no es pasiva. Es importante mantenerse comprometido con las actualizaciones, así que cuando estás mirando el código, realmente entiendes lo que logra. Por ejemplo, debido al Modo Pull, deberías ver que ejecutar un nodo requiere menos ancho de banda, memoria y CPU que antes.
¿Tienes ideas sobre cómo mejorar el Modo Pull, u otros aspectos de Stellar Core? Comunícate con comentarios en Github.