图片

En esta serie de tres partes, revelaremos los logros técnicos que pueden mejorar significativamente el procesamiento de datos en aplicaciones que se ejecutan en el Protocolo de Computación de Internet (ICP).

Esta actualización es un hito en la hoja de ruta de ICP y se está implementando en toda la red. Stellarator representa un avance en el almacenamiento de datos en cadena, permitiendo a cada subred albergar más de 1TB de memoria, lo que brinda oportunidades para aplicaciones ricas en datos que anteriormente estaban limitadas por el almacenamiento.

Este avance permite a los desarrolladores construir aplicaciones complejas que requieren procesamiento masivo de datos, llevando a la tecnología blockchain a nuevos niveles prácticos.

Sin más preámbulo, empecemos esta serie y veamos cómo ICP ahora utiliza las actualizaciones de Stellarator para almacenar datos.

Persistencia de datos en Internet Computer

Esta publicación proporciona una visión general de cómo funciona el almacenamiento en las máquinas de réplica de Internet Computer, con un enfoque particular en los cambios recientes introducidos por la capa de almacenamiento basada en el árbol de fusión de registros (LSMT), que incluye una mayor implementación de almacenamiento replicado en las subredes de Internet Computer y les permite manejar mejor las cargas de trabajo pesadas.

Internet Computer consiste en subredes y máquinas virtuales, donde estas máquinas virtuales realizan la misma replicación en 13-40 máquinas de copia. Cada copia es responsable de ejecutar todos los mensajes enviados al contenedor en esa subred y almacenar todos los datos del contenedor, por lo tanto, todas las copias tienen el estado completo y el mismo de la subred.

Los desarrolladores pueden desplegar contenedores en Internet Computer, que son similares a los contratos inteligentes en otras cadenas de bloques, pero pueden realizar cálculos más generales y almacenar órdenes de magnitud más datos que los contratos inteligentes en otras cadenas.

Los datos almacenados en un contenedor eventualmente necesitan ser almacenados en algún hardware físico. Gracias a la reciente introducción de la capa de almacenamiento basada en LSMT y muchas otras optimizaciones y mejoras, las subredes en Internet Computer pueden almacenar hasta 1TB de datos de contenedor.

La mayor parte de los datos de un contenedor se almacenan en su memoria de pila (hasta 4GB al escribir) o en su memoria estable (hasta 500GB al escribir), y hay otras formas de datos relacionadas con el contenedor, como el código del contenedor, mensajes en vuelo y diversas informaciones, como listas de controladores y saldos de ciclos.

La capa de almacenamiento de ICP cierra la brecha entre el almacenamiento de contenedores (como memoria de pila y memoria estable) y el hardware de almacenamiento subyacente de las máquinas de réplica (como disco y RAM).

Como parte del hito Stellarator, la capa de almacenamiento ha sido rediseñada y reimplementada exhaustivamente para permitir que ICP enfrente los desafíos de escalabilidad futuros y aborde los cuellos de botella de escalabilidad más importantes de la antigua capa de almacenamiento. Todos los cambios relevantes se han completado recientemente, y Internet Computer ha estado ejecutando la nueva implementación de la capa de almacenamiento durante varios meses.

El resto de esta publicación describe el proceso de rediseñar la capa de almacenamiento como una estructura de datos de árbol de fusión de registros, cuyo objetivo es eliminar los cuellos de botella relacionados con el almacenamiento y ofrecer una mejor experiencia a los usuarios y desarrolladores de contenedores intensivos en almacenamiento.

Para los usuarios de ICP, lo más notable es que este trabajo ha permitido que el estado replicado en un solo subred recientemente aumente a 1TB. Además, el rediseño también ha permitido a Internet Computer manejar mejor los contenedores que escriben grandes cantidades de datos.

Punto de control

En general, la capa de almacenamiento de Internet Computer utiliza almacenamiento persistente en disco en combinación con almacenamiento temporal en RAM. Un concepto clave sobre cómo Internet Computer almacena su estado es lo que se llama puntos de control, que son puntos lógicos en el tiempo en los que el estado completo de la subred se guarda en el disco.

Los puntos de control se crean de manera determinista cada 500 bloques o cada pocos minutos, lo que significa que todas las réplicas escribirán el mismo punto de control a la misma altura. Los puntos de control se almacenan en el disco de cada nodo de réplica en forma de directorio de archivos, cuya estructura se simplifica enormemente a continuación:

图片

En esta estructura, cada contenedor se almacena en su propio subdirectorio, y cada directorio de contenedor contiene archivos separados para memoria de pila, memoria estable y otra información (como mensajes en vuelo). Las razones por las cuales los datos se guardan en forma de puntos de control en el disco son múltiples.

1. Persistencia de datos: Las máquinas de réplica pueden reiniciarse en cualquier momento, puede haber errores de software en el código de réplica, o el hardware puede fallar, o puede haber problemas de energía en el centro de datos. En caso de que ocurra esto, se puede volver a cargar el último punto de control.

Ten en cuenta que aunque los puntos de control solo se crean cada 500 rondas, las réplicas pueden recrear el estado para alturas no de puntos de control. Las réplicas solo necesitan el último punto de control y todos los bloques finales entre el punto de control y el estado más reciente. Dado que toda la ejecución es determinista, estos bloques pueden reproducirse, garantizando que el estado recreado sea idéntico. Los bloques necesarios pueden ser almacenados por separado en el disco del punto de control o pueden ser obtenidos de otras réplicas.

2. Sincronización: Todos los mensajes (replicados) son ejecutados por todas las réplicas, por lo que para cualquier altura dada h, todas las réplicas deben tener el mismo estado. El protocolo evita la divergencia (es decir, cuando algunas réplicas honestas terminan en un estado diferente al de consenso) al primero hashear el estado y luego firmar el hash generado con un umbral. Solo cuando al menos ⅔ (más precisamente, 2f + 1) de las réplicas están de acuerdo con el mismo hash se puede crear tal firma umbral, lo que permite que la subred continúe funcionando.

Sin embargo, las subredes de Internet Computer pueden tener un estado mayor. Al momento de escribir, el límite es de 1TB. Manteniendo una tasa de hasta 2.5 bloques por segundo (lo que la subred más rápida de Internet Computer logra actualmente), no es factible hashear tantos datos después de cada bloque, por lo que Internet Computer solo hashea partes seleccionadas del estado de alturas no de puntos de control, como información básica de cada contenedor, las respuestas recientes a los mensajes de entrada y los mensajes XNet enviados a otras subredes.

Para los puntos de control, el protocolo hashea todo el estado para obtener una estructura de datos llamada lista, que se calcula hasheando todos los archivos en el directorio del punto de control y contiene el hash de cada archivo individual dividido en bloques de 1MB. Al final del cálculo de la lista, se calculará el hash raíz de la lista que cubre todos los hashes individuales en la lista, que luego será firmado umbralmente por la subred. El cálculo de la lista puede llevar decenas de segundos, pero este trabajo solo se realiza cada 500 bloques y se ejecuta en paralelo con la ejecución del contenedor en segundo plano.

3. Sincronización de estado: Internet Computer permite cambios en la topología de la subred a través de propuestas de NNS. Cuando los nodos de réplica se unen a la subred, pueden obtener el último punto de control de otros nodos de réplica. Recordemos que un punto de control es un conjunto de archivos, por lo que, tras verificar la raíz hash de su estado y la firma umbral de la subred, el protocolo de sincronización de estado puede obtener archivos bloque a bloque, mientras compara el hash de los bloques obtenidos con los hashes en la lista, y si todas las comprobaciones son exitosas, la réplica puede concluir que el estado obtenido corresponde al estado acordado de las diversas subredes a la altura del punto de control. Si la réplica se queda atrás por otras razones y la brecha con el estado saludable es demasiado grande para ponerse al día mediante pura reproducción de bloques, también se activará la sincronización de estado.

4. Tamaño máximo del estado: Actualmente, el tamaño máximo del estado es de 1TB, mientras que la RAM de las máquinas de nodos de réplica es de 512GB, por lo que no es posible cargar todo el estado en la RAM. Internet Computer utiliza RAM principalmente para almacenar los últimos datos que aún no se han persistido, y para almacenar en caché datos para mejorar el rendimiento.

PageMap y alturas no de puntos de control

Dado que los puntos de control solo se crean cada 500 bloques, ICP necesita proporcionar diferentes espacios de almacenamiento para los estados de alturas no de puntos de control. La idea básica que sigue la capa de almacenamiento es que estos datos se almacenan en el disco en forma combinada del último punto de control, y cualquier cambio posterior se almacena en RAM.

PageMap es la implementación de la mayor parte del contenido del estado de la réplica para la subred. La mayor parte del estado de la subred es el estado del contenedor, en particular la memoria de pila y la memoria estable del contenedor.

En la actualidad, un contenedor puede tener hasta 4GB de memoria de pila, 500GB de memoria estable, y el límite total de estado de la subred es de 1TB, pero todos estos límites podrían cambiar en el futuro. Ambas formas de memoria se pueden leer mediante llamadas a contenedores de copia (actualización) y no copia (consulta), y también se pueden modificar mediante llamadas de copia.

La estructura de datos PageMap está diseñada para permitir la lectura y escritura eficiente en memoria, así como para soportar la escritura eficiente de puntos de control. Un objetivo particular es hacer que el rendimiento no dependa del tamaño total de la memoria. Nota que el nombre PageMap proviene del hecho de que todos los tamaños de lectura y escritura son de 4KB, lo que coincide con el tamaño de página utilizado por el sistema operativo subyacente.

PageMap almacena el estado en dos capas. La primera capa se llama almacenamiento y está compuesta por los archivos del último punto de control, que representan el estado a la altura del último punto de control. La segunda capa, es decir, los incrementos de página, representa todos los cambios desde ese punto de control y se almacena en RAM.

Al leer desde PageMap, los datos devueltos se obtienen ya sea de los incrementos de página o se leen desde los archivos de punto de control (si hay faltantes). Escribir en PageMap se realiza modificando los incrementos de página con nuevos datos.

图片

Ciclo de vida del punto de control

La tarea principal de la capa de almacenamiento es escribir los puntos de control en el disco y mantener todos los PageMap actualizados. Al escribir un nuevo punto de control, todos los incrementos de página se refrescan en el disco, actualizando así la parte de almacenamiento de todos los PageMap.

Para garantizar que todos los datos se guarden, las réplicas necesitan mantener siempre el último punto de control que ha sido firmado con umbral, lo que significa que no es posible simplemente sobrescribir los archivos de puntos de control antiguos, ya que cualquier modificación de este tipo cambiaría el anterior punto de control antes de que el nuevo punto de control se escriba completamente, lo que conllevaría el riesgo de pérdida de datos. Además, el costo de escribir un punto de control completo en el disco cada 500 rondas (hasta 1TB) sería muy alto. Por el contrario, crear un nuevo punto de control incluye 3 pasos básicos:

  • “Copiar” el antiguo punto de control a una carpeta temporal, llamada ‘tip’;

  • Modificar el tip para representar los datos del nuevo punto de control;

  • Renombrar el tip al nuevo directorio del punto de control (para crear un nuevo punto de control de forma atómica).

El primer paso puede ser el más costoso, ya que cuanto mayor sea el estado, más tiempo llevará copiar los archivos, lo que resulta en archivos de punto de control más grandes.

Sin embargo, aquí es donde entra en juego el formato de archivo de los puntos de control y el árbol de fusión de registros. Al utilizar LSMT, este paso es de bajo costo y no se expande con el tamaño del estado. En contraste, antes del rediseño de LSMT, este paso era lento e impredecible.

Árbol de fusión de registros

El árbol de fusión de registros (LSMT) es una estructura de datos ampliamente utilizada, especialmente en bases de datos. En Internet Computer, se utilizan como base para la parte de almacenamiento de PageMaps, un problema especial que puede resolver es que simplifica el paso de “copia” en el ciclo de vida del punto de control, ya que todos los archivos se escriben una sola vez y nunca se modifican.

Usando LSMT, modificar el estado (lógico) escribiendo archivos de sobrescritura adicionales. Para leer el valor de una página, el algoritmo primero revisa los archivos de sobrescritura escritos recientemente para ver si hay una página presente en ese archivo; si existe, se lee el valor de la página de ese archivo de sobrescritura; de lo contrario, revisa el siguiente archivo de sobrescritura más antiguo. En la implementación utilizada en Internet Computer, si la página no existe en ningún archivo de sobrescritura, se lee como cero.

La imagen a continuación muestra un conjunto de tres archivos de sobrescritura que representan el estado del contenedor. Las flechas verticales muestran las diferentes lecturas de los datos y los archivos de los que se lee finalmente los datos.

图片

El ciclo de vida del punto de control de LSMT se muestra a continuación:

  • Enlazar todos los archivos del punto de control anterior a una carpeta temporal, llamada tip;

  • Escribir un nuevo archivo de sobrescritura que contenga todos los cambios desde el último punto de control;

  • Renombrar el tip al nuevo directorio del punto de control (por razones de atomicidad).

La clave es que cada archivo de sobrescritura se escribe una sola vez y nunca se modifica, de modo que es seguro establecer múltiples puntos de control en el disco y compartir algunos archivos entre ellos mediante enlaces duros. Tenga en cuenta que si el ciclo de vida del punto de control intenta modificar cualquier archivo, este mismo proceso no funcionará. Si un archivo tiene múltiples enlaces duros, modificar cualquiera de ellos cambiará los datos en todos los enlaces duros, lo que alterará los puntos de control que ya han sido autenticados.

El árbol de fusión de registros puede almacenar múltiples versiones del mismo rango de datos, lo que resulta en un costo de almacenamiento definido como la proporción del tamaño de todos los archivos de sobrescritura al tamaño lógico de los datos representados; además, los datos pueden estar distribuidos en múltiples archivos.

A medida que aumentan los costos de almacenamiento o el número de archivos de sobrescritura, la implementación de la capa de almacenamiento programará una fusión, que reorganiza los datos al tomar un conjunto de archivos de sobrescritura y reemplazarlos por un solo archivo que contenga solo la última versión de cada dato. Las fusiones se programan para PageMap con costos de almacenamiento o número de archivos especialmente altos y se ejecutan en segundo plano para que no interfieran con la ejecución de mensajes del contenedor.

Diseño anterior que usaba Reflinks

La capa de almacenamiento original de Internet Computer no dependía de LSMT. Desde el nacimiento de Internet Computer en 2021 hasta 2024, la capa de almacenamiento dependía en gran medida del re-enlace.

Re-enlace, a veces llamado copia al escribir, es una operación de sistema de archivos utilizada para copiar archivos. Algunos sistemas de archivos admiten esta operación, y las réplicas de Internet Computer utilizan el sistema de archivos XFS que admite esta operación. La diferencia entre el re-enlace y la copia de archivos normal es que no copia todo el contenido del archivo. En cambio, el sistema de archivos recuerda qué datos son compartidos entre el archivo original y el nuevo archivo. Además, la diferencia entre el re-enlace y el enlace duro es que ambos archivos se pueden modificar de forma independiente entre sí.

En el diseño antiguo de la capa de almacenamiento, el ciclo de vida del punto de control funcionaba de la siguiente manera:

  • Reenlazar todos los archivos del último punto de control a una carpeta temporal, llamada tip;

  • Modificar los archivos en el tip según todos los cambios desde el último punto de control;

  • Renombrar el tip al nuevo directorio del punto de control.

Una posible ventaja es que PageMap estará representado en un solo archivo en el punto de control, evitando así el costo de almacenamiento. Sin embargo, para modificar un archivo para adaptarlo a una nueva altura de punto de control, es necesario re-enlazar los archivos correspondientes del punto de control anterior en lugar de usar enlaces duros.

Ventajas de LSMT sobre Reflinks

En principio, el re-enlace garantiza tanto la velocidad de los enlaces duros como la disponibilidad de la replicación. Desafortunadamente, a medida que aumenta la demanda de datos de Internet Computer (ya sea en rendimiento de I/O o en total de datos), el re-enlace se ha convertido en un cuello de botella de rendimiento por diversas razones.

1. Velocidad de re-enlace lenta: El tiempo requerido para re-enlazar archivos puede variar considerablemente. En algunos casos, puede tomar solo unos segundos, pero en experimentos, también hemos observado que re-enlazar 370GB puede tardar hasta 10 horas. En la lógica de puntos de control antigua de Internet Computer, el paso de re-enlace de 10 horas causaría que toda la subred se detuviera durante 10 horas.

La fragmentación puede dar lugar a velocidades de re-enlace deficientes. Internamente, el sistema de archivos XFS mantiene estructuras de datos que mapean las distintas partes de un archivo a bloques de datos reales en el disco. Cuando el costo de navegar por estas estructuras de datos se vuelve alto, se experimenta fragmentación y velocidades de re-enlace más lentas.

La fragmentación puede ser especialmente desencadenada por la siguiente secuencia: escribir en un archivo en gran cantidad, luego volver a enlazarlo, escribir en una de las copias en gran cantidad, volver a enlazarlo de nuevo, etc. Desafortunadamente, dado el flujo de trabajo de puntos de control en el Protocolo de Computación de Internet, el uso intensivo de contenedores tiende a desencadenar este comportamiento.

Por otro lado, los enlaces duros tienen un rendimiento consistente, sin verse afectados por problemas de fragmentación.

Antes de la introducción del árbol de fusión de registros, se implementaron muchas soluciones provisionales, que incluían desfragmentar archivos manualmente (leyendo archivos y reescribiéndolos) y escribir archivos en partes continuas más grandes, ambas con el costo de una mayor amplificación de escritura, y aún podían provocar pausas de hasta 30 minutos.

2. Tamaño máximo del estado: Además del tiempo de re-enlace muy largo debido a la excesiva fragmentación, incluso la fragmentación moderada hará que el tiempo de re-enlace sea proporcional al total de datos almacenados en la subred. En la implementación anterior de la capa de almacenamiento, Internet Computer estableció que la capacidad de almacenamiento de cada subred no debe exceder los 700GB, cifra que depende en gran medida de cuántos datos de fragmentación moderada se pueden re-enlazar en un máximo de 20-30 segundos.

Al usar enlaces duros, el tiempo de punto de control no se expande de la misma manera con el tamaño de los datos, eliminando así este cuello de botella.

3. Rendimiento de múltiples hilos deficiente: Uno de los objetivos de la lógica de puntos de control es evitar operaciones de sincronización tanto como sea posible, ya que durante el punto de control, la ejecución del contenedor se detiene. Naturalmente, surge la pregunta de si se puede re-enlazar en segundo plano mientras la ejecución continúa (incluso si es muy lenta). Desafortunadamente, la experiencia indica que no es posible re-enlazar y leer archivos al mismo tiempo, por lo que re-enlazar en paralelo con la ejecución solo ralentizará la ejecución.

En el nuevo diseño de la capa de almacenamiento, los enlaces duros se ejecutan en paralelo y no se ralentizan entre sí.

4. Caché: Como se mencionó, leer datos de la memoria del contenedor implica leer datos tanto de RAM como de los archivos de punto de control subyacentes. Leer repetidamente el mismo archivo generalmente no requiere múltiples lecturas de datos desde el disco duro o SSD real; en cambio, estos datos son almacenados en caché por el sistema operativo. Desafortunadamente, el re-enlace interfiere con la caché, ya que primero enlazar un archivo y luego leerlo desde la nueva réplica no utilizará la caché, por lo que, en Internet Computer, después de escribir un punto de control, se observa una gran cantidad (y lentitud) de picos en las lecturas del disco, ya que todas las lecturas cambiarán a los nuevos archivos. Además, los cálculos explícitos (es decir, calcular el hash de todos los archivos de punto de control para alcanzar consenso) también se benefician enormemente de una mejor caché.

Por el contrario, cuando se enlazan archivos duros, se mantiene toda la caché; cualquier dato leído o escrito recientemente, incluso si ocurrió dentro de un intervalo de puntos de control anterior, seguirá siendo almacenado en caché, por lo que puede ser recuperado rápidamente.

Resultados

La capa de almacenamiento LSMT se implementó en todas las subredes de Internet Computer durante varias semanas del segundo trimestre de 2024. La siguiente imagen muestra las métricas antes y después de la actualización del código de réplica, donde la línea vertical roja indica el momento en que se habilitó la capa de almacenamiento LSMT.

La primera imagen muestra el tiempo de punto de control de la subred w4rem, que alberga contenedores para la integración de Bitcoin. En comparación con muchas otras subredes, los contenedores de la subred de Bitcoin tienen cargas de trabajo intensivas en escritura tanto en su memoria de pila como en su memoria estable, por lo que la fragmentación es un problema particularmente preocupante para esta subred.

图片

Desde el punto de vista de las métricas, el tiempo de punto de control se ha reducido de más de 20 segundos a solo 1-2 segundos, lo que se debe principalmente a la eliminación del paso de re-enlace, que ocupaba la mayor parte de los 20 segundos.

Para los usuarios de contenedores de Bitcoin, la ventaja es que la velocidad de respuesta es más rápida. Durante el punto de control, la subred no procesará ninguna llamada de actualización o consulta de copia; si un usuario envía una llamada de actualización o consulta de copia al contenedor de Bitcoin al inicio del punto de control, se necesitarán al menos 20 segundos para recibir una respuesta. Usar la capa de almacenamiento LSMT puede eliminar prácticamente tales tiempos de respuesta inconsistentes.

La segunda imagen muestra la tasa de finalización en la subred k44fs. La tasa de finalización o tasa de bloques es el número de bloques producidos por la subred por segundo.

图片

Internet Computer limita el número de instrucciones ejecutadas en cada ronda a un valor que corresponde aproximadamente a la cantidad de trabajo que puede completar en un segundo, de modo que la tasa de finalización puede mantenerse en más de un bloque por segundo.

Antes de actualizar a la capa de almacenamiento LSMT, la tasa de finalización disminuía regularmente, lo que correspondía totalmente a los puntos de control. Dos son las razones principales por las cuales los puntos de control afectan la tasa de finalización: primero, el tiempo necesario para crear el punto de control, durante el cual no se ejecutan bloques. Después de la actualización, el impacto en este aspecto se reduce, porque el tiempo de punto de control suele ser mucho más corto.

La segunda razón es que el comportamiento de caché de la capa de almacenamiento LSMT es mejor. En particular, el paso de re-enlace en la implementación de la antigua capa de almacenamiento causaba fallos en la caché. Por lo tanto, después de un punto de control, cualquier contenedor que leyera desde su memoria causaría que la réplica obtuviera esos datos del disco, lo que es varios órdenes de magnitud más lento que los mismos datos disponibles en la caché en RAM. La nueva capa de almacenamiento LSMT no tiene este problema.

Como indican las métricas, la disminución en la tasa de finalización después de la actualización es notablemente menor, esto se debe a que los puntos de control en sí mismos son más rápidos, ya que ya no se necesita re-enlace, y la caché de archivos ya no se invalida.

Para los usuarios de contenedores en esta subred, esto significa tiempos de respuesta más rápidos y mayor rendimiento.

Conclusión

Rediseñar la capa de almacenamiento de Internet Computer alrededor de la estructura de datos de árbol de fusión de registros es una inversión importante en escalabilidad y rendimiento de la plataforma, ya que no solo permite ciertas cargas de trabajo intensivas en memoria, sino que también permite a Internet Computer ofrecer un estado mayor a los contenedores.

En el contexto de ejecutar modelos de lenguaje de gran tamaño en inteligencia artificial y en cadena, los contenedores que operan con grandes datos son especialmente interesantes, ya que dependen no solo de un gran almacenamiento de datos, sino también de un alto rendimiento de I/O.

Además, también sienta las bases para futuras mejoras, como aliviar la carga de trabajo pesada en el camino crítico mediante un mejor aprovechamiento de la concurrencia, lo que hace que Internet Computer sea más rápido en respuesta. La experiencia con la capa de almacenamiento original indica que evitar el re-enlace es crucial para lograr esto, y la estructura de datos LSMT puede hacerlo.

¿Te gustó este artículo? Comparte tus pensamientos en el canal DFINITY Developers X, únete mañana a nuestra segunda parte del viaje Stellarator, donde exploraremos la mejora de la persistencia ortogonal con Luc Bläser.

图片


#Stellarator #ICP #AI幣

Contenido de IC que te interesa

Avances tecnológicos | Información del proyecto | Eventos globales

Sigue el canal de IC en Binance

Mantente informado