Actualización de Safe Network Dev 🇪🇸 10 de febrero de 2022

Esta es una traducción automática. El original en inglés está aquí: Update 10 February, 2022

Como la mayoría sin duda sabrá, los adultos son nodos que almacenan datos y los entregan a pedido. Pero, ¿qué sucede si comienzan a actuar de manera infantil, se niegan a almacenar o entregar datos, o al menos lo hacen más lentamente de lo esperado? Por el bien de la red, necesitamos degradar o expulsar esos nodos rebeldes, pero antes de hacerlo debemos redistribuir los datos que contienen. También debemos proporcionar mensajes de error significativos a los clientes y otros nodos que intenten almacenar datos cuando eso falle. Eso es en lo que estamos profundizando esta semana.

Progreso general

@bochaco ha estado trabajando en la caja fuerte. Si escribe seguro en la consola (una vez que safe_network está instalado, por supuesto), ingresa al shell, lo que significa que no necesita escribir seguro cada vez a partir de entonces. Con todas las actualizaciones recientes de CLI, este aspecto se ha quedado un poco atrás, por lo que lo ha estado corrigiendo. Además de atender algunos arreglos y refactorizaciones en el código del nodo en preparación para los próximos cambios de membresía.

En los laboratorios de DBC, @danda está trabajando en la integración de Ring CT en la red, lo que incluye hacer que los DBC sean más fáciles de usar para usar con los dos tipos de claves: una clave de propietario base de larga duración para interactuar con terceros, como para donaciones , y una clave derivada de un solo uso para interactuar con las mentas y el libro de gastos. También está trabajando en funciones de prueba que se pueden activar o desactivar para la depuración y optimización, y ha reducido la cantidad de llamadas necesarias para iterar sobre el libro de gastos.

En las tareas de replicación de datos, @yogesh ha avanzado en un modelo de extracción en el que se les indicará a los adultos qué datos deben tener y comenzarán a extraer datos de la red automáticamente para garantizar que se mantenga la cantidad correcta de copias por redundancia. Más sobre eso a continuación.

Y @joshuef y @Qi_ma han estado analizando los problemas de conexión de los clientes generados por el patio de recreo y la red de comunicaciones. Es posible que hayamos eliminado un error de uso intensivo de la CPU (al menos ya no podemos reproducirlo en este momento), por lo que buscaremos verificarlo en un próximo patio de juegos.

Replicación de datos preventiva y errores de adultos

Los adultos que funcionan correctamente son la columna vertebral de la red, y es imperativo que, si un adulto comienza a portarse mal, se reemplace y los datos que contiene se reubiquen sin problemas. Esto se llama replicación de datos preventiva y se detalla en PR #976.

Comprobaciones de vida

Los ancianos deben asegurarse de que los adultos se desempeñen correctamente. Realizan controles de actividad regulares en los que se compara el rendimiento de un nodo con sus 3 vecinos más cercanos. Si el recuento de operaciones pendientes en un nodo es 5 veces mayor que en sus vecinos, se degradará y sus datos se redistribuirán. Para prepararse para esta eventualidad, una vez que el recuento de operaciones pendientes de un nodo es 2,5 veces mayor que el de sus vecinos (estos parámetros se optimizarán durante las pruebas), se inicia la replicación preventiva, y los ancianos actualmente inician esta replicación.

Cuando hay rotación en una sección (nodos que se van y se unen), debemos asegurarnos de que los datos se repliquen y distribuyan a los nodos recién promovidos. Cuando un adulto está lleno, también necesita decirles a los mayores que almacenen el trozo en otro adulto.

Todo esto requiere cierta autoconciencia por parte del nodo adulto en cuanto a qué tan lleno está. Verificar el espacio requiere muchos recursos, por lo que solo lo hacemos en pasos de aproximadamente el 10% del espacio disponible.

Errores de adultos

Necesitamos generar errores para avisar a los clientes, y al sistema en su conjunto, cuando los datos no se almacenan como deberían. Esto puede suceder por una variedad de razones. Estos errores formarán parte del protocolo de red que todos los nodos deben cumplir para permanecer en la red.

A continuación se muestra una lista de errores que pueden surgir en un nodo adulto durante las operaciones PUT/GET (sin contar los errores AE y DKG) y las respuestas en las que estamos trabajando.

CouldNotStoreData: el adulto cometió un error durante el almacenamiento debido al mecanismo de almacenamiento del adulto. Esto es culpa del adulto. Las posibles causas son una falla al crear directorios, problemas con el sistema de archivos o la base de datos utilizada para almacenar registros, registros dañados o rutas de archivos incorrectas.

DataError: el nodo no se almacenó debido a un error de datos. Esto es culpa del cliente o posiblemente porque el mensaje se ha dañado. De cualquier manera (no podemos saberlo) esto debe devolverse al cliente.

NodeFull: ¡el nodo está lleno! Se devuelve un mensaje de error al anciano que solicita el almacenamiento. Posiblemente podríamos penalizar a los adultos que no nos hayan informado de antemano que sus niveles de almacenamiento están bajando.

Error de correo no deseado

Además de informar a los clientes, también podemos hacer uso de estas fallas como señal de que algo salió mal. Al mismo tiempo, debemos evitar abrumar a los ancianos con demasiados mensajes de ida y vuelta.

Al manejar estos errores, debemos asegurarnos de que no estamos abriendo nuevos vectores de ataque, lo que permite que los usuarios malintencionados sepanngly realizar operaciones ilegales para DDoS en la red generando masas de mensajes de error. Como medida futura, es posible que podamos incluir en la lista negra a los clientes que se observe que se comportan de esta manera.


Enlaces útiles

No dude en responder a continuación con enlaces a las traducciones de esta actualización para desarrolladores y los moderadores las agregarán aquí.

Como proyecto de código abierto, siempre estamos buscando retroalimentación, comentarios y contribuciones de la comunidad, así que no sea tímido, únase y creemos la red segura juntos.