Desarrolladores
Autor
Marta Lokhava
Fecha de publicación
TL;DR Este blog es parte de nuestra serie continua sobre el progreso realizado en el plan de ruta 2025 de SDF y las iniciativas clave que estamos impulsando para mejorar la usabilidad, expandir la adopción y fortalecer el Ecosistema Stellar. Esta publicación se basa en los planes introducidos en Escalando Stellar Core: Planes para 2025.
En Stellar Development Foundation, nuestro enfoque está en apoyar casos de uso del mundo real y satisfacer las demandas evolutivas del ecosistema Stellar. Históricamente, los validadores, quienes determinan las configuraciones de la red, acordaron límites de libro mayor basados en el uso observado, logrando un equilibrio entre la aceptación razonable del libro mayor y tarifas justas para los participantes de la red.
Con la introducción de Soroban, hemos visto nuevos usuarios y casos de uso emergentes. En los últimos meses, el uso de Soroban ha crecido significativamente, y es probable que los validadores decidan ajustar los límites de la red en respuesta. Sin embargo, aumentar estos límites no es tarea simple: debemos asegurar que la red se mantenga saludable bajo una carga aumentada. Mirando hacia adelante, nuestros objetivos a corto y mediano plazo son alcanzar teóricamente 5000 transacciones por segundo y reducir el tiempo de bloque de los actuales 5 segundos a 2.5 segundos.
Para apoyar esta evolución, SDF comenzó una serie de mejoras importantes en Stellar Core el año pasado destinadas a mejorar la escalabilidad y allanar el camino para un mayor rendimiento y tiempos de bloque más bajos. Diseñamos estos cambios para aprovechar la capacidad de CPU ya presente en la mayoría de las computadoras modernas. La mejor parte: no se necesitan mejoras de hardware, Stellar Core simplemente hace un uso más inteligente de los núcleos de CPU existentes.
En una serie de publicaciones de blog próximas, repasaremos las mejoras de rendimiento, algunas ya implementadas y otras planificadas, y cómo ayudan a preparar a Stellar para el futuro.
Primero, permítanos articular la visión para un Stellar Core escalable. ¿Cómo queremos que se vea Stellar Core una vez que todos los cambios planificados estén completos?
Conceptualmente, el trabajo de Stellar Core se puede agrupar en tres corrientes de trabajo:
Si fuéramos a visualizar estas tres corrientes, se vería como la Figura 1a, siendo la flecha azul el hilo principal.
Antes de la v22.1.0, Stellar Core ejecutaba las tres corrientes de trabajo en el hilo principal. La Figura 1b da una idea de cómo este trabajo puede ser ejecutado en el hilo principal. ¡Puede estar ocupado!
Un par de observaciones importantes de estos diagramas:
Para remediar esta situación, primero hicimos dos cambios importantes (ilustrados en la Figura 2):
Nota que todavía hay algunas dependencias con este nuevo flujo: específicamente, el consenso y la ejecución de bloques siguen siendo secuenciales. Para lograr altos rendimientos y tiempos de bloque bajos, esto no es ideal por dos razones:
Bajo condiciones normales, el hilo principal que realiza el Stellar Consensus Protocol está esencialmente inactivo mientras un hilo separado ejecuta el bloque más reciente. De manera similar, mientras los validadores ejecutan el Stellar Consensus Protocol para acordar en un bloque, sus CPUs están mayormente inactivas, no ejecutando ningún bloque nuevo. Por supuesto, los validadores aún realizan algo de trabajo de CPU mientras ejecutan SCP (como procesar votos, verificar firmas de votos, etc), pero la cantidad es mínima comparada con la ejecución que consume mucha CPU.
Entra el juego final: verdadero encadenamiento de votación y ejecución de bloques, ver Figura 3.
Inicialmente propuesto por el CTO de SDF, Nico Barry, este diseño presenta varias propiedades interesantes:
Entonces, ¿cómo logramos esta visión? El resto de esta publicación de blog detallará el primer conjunto de cambios que hicimos y habilitamos en Stellar Core v22.1.0 para apoyar la diseminación paralela de transacciones. Las publicaciones de blog subsiguientes se centrarán en la nueva característica experimental de ejecución paralela, y los cambios planificados para lograr la visión descrita anteriormente.
La diseminación de transacciones es, lógicamente, un componente bastante aislado, por ejemplo, el consenso y la ejecución no dependen directamente de él. Durante la diseminación, Stellar Core realiza una cantidad significativa de trabajo criptográfico costoso, incluyendo verificación de firmas, hashing, autenticación personalizada y procesamiento de bytes entrantes y salientes. Este trabajo es intensivo en CPU pero desacoplado de la lógica de negocio de la aplicación.
Debido a que estas cargas de trabajo están tanto particionadas como independientes, son adecuadas para la paralelización. Por eso abordamos esta área primero. Conjuntos de datos particionados eliminan preocupaciones sobre carreras de datos y bloqueos, permitiéndonos escalar el rendimiento de manera más segura y eficiente.
Más allá de la carga de trabajo criptográfica, Stellar Core ahora también realiza deduplicación de tráfico en segundo plano, algo posible gracias a su nueva infraestructura paralela. Esto elimina la mayor parte de la carga del hilo principal y contribuye a un rendimiento general más suave, como se observa en la Figura 4.
Para habilitar el procesamiento paralelo en tu Stellar Core, necesitarás configurar una nueva bandera especial, `BACKGROUND_OVERLAY_PROCESSING`. A partir de Stellar Core v22.1.0, BACKGROUND_OVERLAY_PROCESSING ya está activado por defecto, lo que significa que puedes disfrutar automáticamente de los beneficios de la paralelización.
Desplegando v22.1.0 resultó en una notable disminución de la presión en el hilo principal – en otras palabras, la cantidad de trabajo que el hilo principal tiene en su cola en cualquier momento ha disminuido significativamente. La Figura 4 ilustra la caída, como se observó en los validadores de SDF así como en las instancias de Horizon.
Comenzando con v22.3.0, Stellar Core aprovechará completamente el procesamiento de transacciones en segundo plano realizando la verificación de firmas en el fondo (para hacerlo, activa la nueva bandera EXPERIMENTAL_BACKGROUND_TX_SIG_VERIFICATION).
Esto es solo el comienzo del viaje hacia un Stellar Core completamente paralelizado. En la próxima entrega de esta serie de blogs, nos adentraremos en la segunda mejora principal: aislamiento de la ejecución. ¡Mantente atento!