Autor
Simon Chow
Fecha de publicación
Datos
Hubble
Bienvenido a la última entrega de nuestra serie sobre la Plataforma de Datos Componible (CDP), la próxima generación de plataforma de acceso a datos en Stellar. Hoy, estamos emocionados de presentar nuestro primer estudio de caso: refactorizar el marco de movimiento de datos de Hubble, Stellar ETL, para usar CDP.
Ahora que tenemos un entendimiento básico de CDP desde la introducción y Galexie publicaciones, nos adentraremos en una aplicación del mundo real, Stellar ETL, que ha sido refactorizada para usar el conjunto completo de beneficios de CDP. Al final del artículo verás cuán rápido, barato, y fácil de usar realmente es CDP!
Hubble es un conjunto de datos de código abierto, disponible públicamente que proporciona un registro histórico completo de la red Stellar. Stellar ETL es la aplicación que Hubble usa para ingerir datos de la red Stellar. Para saber más sobre Hubble y Stellar ETL revisa nuestra Documentación para Desarrolladores y entrada de blog.
El diseño original de Stellar ETL acoplaba estrechamente la extracción y transformación de datos en una sola aplicación. Esto significa que Stellar ETL instancia un nuevo Captive Core para extraer datos para cada rango de ledger procesado (resaltado en rojo). En última instancia, esto funciona, pero viene con muchos puntos dolorosos:
Captive Core tarda mucho en iniciar, aproximadamente 15 minutos. Esto significa que estás perdiendo 15 minutos de tiempo cada vez que ejecutas Stellar ETL. Imagina todo el tiempo perdido si quieres procesar continuamente datos de la red Stellar en lotes de 30 minutos. Eso es ~12 horas por día de tiempo de inicio de Captive Core! Sin mencionar que los datos que extraes tendrán al menos 15 minutos de antigüedad en relación con el ledger actual de la red. Esto solo empeora si imaginas rellenar un gran rango de datos históricos. La naturaleza de un solo hilo de Stellar ETL significa que rellenar la historia completa de los datos de la red Stellar tomaría meses, o incurrir en costos prohibitivos para trabajadores paralelos adicionales costosos.
Stellar ETL es una aplicación simple, ligera que transforma los datos crudos de la red Stellar en un formato legible por humanos. Esto es como usar grep
y sed
para buscar y formatear datos en texto legible. Realmente querrías que tu grep
y sed
requirieran ser ejecutados en una máquina de 4 núcleos y 16 GB? Esperemos que no. Ese monstruo de máquina es todo para Captive Core. Captive Core representa la mayoría de los requisitos de recursos y costos de Stellar ETL.
Además de mantener Stellar ETL, necesitamos mantener una instancia de Captive Core actualizada. Eso significa mantener un archivo de configuración de Captive Core adicional así como la imagen de Captive Core en sí. Así que ahora necesitas ser un experto en tu aplicación así como en las complejidades de Captive Core. Las actualizaciones de versión de Captive Core y las mejoras de protocolo requieren que vuelvas a desplegar tu aplicación, incluso si no hay cambios en tu código subyacente.
Otro tema candente es la depuración. Digamos que había un bug en Stellar ETL que procesaba incorrectamente un rango de ledger definido. Para probar realmente la corrección del bug en este rango de ledger necesitaríamos ejecutar Captive Core cada vez que quisiéramos probar el cambio de código (de nuevo, eso es 15+ minutos de tiempo de inicio por ejecución). Cuando el bug se corrige, corregir los datos malos también requiere una instancia de Captive Core.
Claramente, el problema con la arquitectura original de Hubble es Captive Core. Entonces, ¿cómo solucionamos esto? Eliminando Captive Core y reemplazándolo con componentes de CDP!
CDP fue muy fácil de insertar y reemplazar Captive Core. En esencia, desacoplamos Captive Core de Stellar ETL usando Galexie y un nuevo Backend de Ledger. Como recapitulación, Galaxie es una aplicación simple, ligera que agrupa datos de la red Stellar, los procesa y los escribe en un almacén de datos externo. Luego podemos usar este almacén de datos en lugar de Captive Core. El almacén de datos se convierte en la fuente de registro para los datos de la red Stellar. El Backend de Ledger que se interfaz con la red Stellar es en gran medida el mismo, solo que se interfaz con el Almacén de Metadatos de Ledger en GCS en lugar del flujo de datos de Captive Core.
Comparemos la nueva versión de Stellar ETL con la antigua:
Sin la necesidad de ejecutar una instancia de Captive Core, ahora estamos limitados solo por el rendimiento de nuestro código de aplicación. En lugar de 15+ minutos para ingerir un rango de ledger definido de datos, ahora toma menos de 1 minuto. Ejecutar Stellar ETL en el mismo intervalo de lote de 30 minutos toma solo 48 minutos por día VS 12 horas por día. Eso es una reducción del tiempo del 93%! Ahora también podemos ejecutar Stellar ETL más frecuentemente, incluso como micro-lotes, para que Hubble contenga datos casi en tiempo real.
El rellenado ahora es realmente viable. Rellenar la historia completa de los datos de la red Stellar toma menos de 4 días vs meses. Acceder a datos preprocesados desde un Almacén de Metadatos de Ledger es significativamente más rápido que extraer datos iterativamente de Captive Core. Además, puedes paralelizar la lectura de datos desde un almacén de datos. No puedes paralelizar la lectura desde una sola instancia de Captive Core.
Sin Captive Core, hemos disminuido nuestros costos en ~90%. Esto se debe a que ahora podemos dimensionar adecuadamente nuestras máquinas para ajustarse a nuestra aplicación. Originalmente nuestros pods de kubernetes necesitaban ser ejecutados con 3.5 vCPU y 20 GiB de memoria. Ahora solo necesitamos 0.5 vCPU y 1 GiB de memoria. Esto resulta en ~10$/mes vs ~100$/mes en costos de recursos.
Sin Captive Core, la carga de mantenimiento se ha desacoplado. No hay necesidad de actualizar la versión de tu aplicación solo porque Captive Core tuvo una actualización de versión no relacionada. No hay necesidad de mantener un archivo de configuración separado que es completamente ajeno a tu aplicación. Todo esto conduce a menos código, menos complejidad mientras se mantiene la misma interfaz fácil de usar de Ledger Backend.
Hablando de depuración, ahora es muy fácil volver a ejecutar cosas localmente. La depuración y el desarrollo iterativos ya no están limitados por largos tiempos de inicio. Las pruebas de integración ahora son realmente viables. ¡El desarrollo solo está limitado por tu imaginación!
Estamos trabajando en mostrarte cómo otros productos de la plataforma, como Horizon y Stellar RPC, usan CDP. ¡Estate atento a esos blogs en el futuro cercano!
Ahora mismo, nuestro equipo está creando una biblioteca que analizará los Metadata del Ledger crudos a un formato más amigable para el usuario. La biblioteca incluirá un flujo de streaming de eventos intuitivo que consiste en un productor de ledger público y transformaciones de datos bien definidas. El productor de ledger público transmitirá automáticamente los Metadata del Ledger desde CDP. Las transformaciones de datos, o procesadores, tomarán el flujo de datos y lo analizarán a un formato amigable para el usuario.
Nuestro objetivo es hacer que el desarrollo de aplicaciones sea más rápido y fácil porque podrás transmitir, transformar y filtrar los datos de la red Stellar como veas conveniente en lugar de meterte en los detalles crudos de los Metadata del Ledger.
Los Boletines
Entérate de nosotros primero. Suscríbete para obtener información en tiempo real sobre noticias, funcionalidades y recursos del ecosistema Stellar.
Artículo
• Molly Karcher
Herramienta para Desarrolladores
Datos
Este artículo es el primero de una serie expansiva sobre la Plataforma de Datos Componible, la próxima generación de plataforma de acceso a datos en…
Artículo
• Urvi Savla
Datos
Herramienta para Desarrolladores
Galexie es el primer componente de la Plataforma de Datos Componible de Stellar, la próxima generación de plataforma de acceso a datos. Galexie es…
Artículo
• Molly Karcher
A partir del 1 de agosto de 2024, las instancias de Mainnet de Horizon de Stellar Development Foundation proporcionarán un año de datos históricos,…