Actualización de Safe Network Dev 🇪🇸 03 de noviembre 2022

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

Las actualizaciones recientes de cómo se procesan los eventos de abandono han llevado a darnos cuenta de que el proceso personalizado que teníamos para la sección de génesis de una red ya no era necesario. Menos complejidad equivale a menos rutas de código, lo que trae múltiples beneficios. @davidrusu explica con un poco más de profundidad a continuación.

Progreso general

Esta semana, hemos avanzado más con el uso de flujo bidireccional en los nodos, por lo que ahora tenemos el flujo dando un viaje completo de ida y vuelta… de ‘cliente a anciano a adulto a anciano a cliente’ para un mensaje ‘ACK’. Es decir, los ‘ACK’ ahora solo aparecerán después de que se hayan escrito los datos (mientras que ‘principal’ ha sido ‘ACK’ al recibir el mensaje en el anciano… los adultos no estaban involucrados). Esto evade perfectamente una clase de error completa durante las pruebas y nos da más confianza en lo que estamos viendo durante el almacenamiento de datos en el cliente.

También hemos estado trabajando arduamente para eliminar más complejidad del código. Un PR de @anselme arregló un poco más el trabajo de DKG. @roland ha limpiado más código de prueba y @bzee está trabajando arduamente para actualizar la última caja quinn y los cambios en torno al uso de streams en ella.

Hacer que la Sección Génesis sea menos especial

Hay algunas cosas que hacen que la primera sección de Safe Network sea especial, por ejemplo, es la única sección que no tiene una sección principal (obviamente). Pero cuando construimos sistemas complejos, especial no es algo que queremos. Es un caso más para pensar.

Antes de esta semana, la forma en que los nodos se unían a la sección de génesis tenía una peculiaridad en la que las edades de los nodos se inflaban artificialmente. Los nodos que se unieron temprano comenzaron con una edad alta y disminuyeron progresivamente las edades para cada nodo que se unía más tarde.

es decir.

  1. El nodo A intenta unirse con la edad predeterminada del nodo de 4
  2. La red responde con un Reintentar (edad=97)
  3. El nodo A vuelve a iniciar el proceso de unión a los 97 años.
  4. La red los acepta.
  5. El nodo B intenta unirse con la edad del nodo predeterminada de 4
  6. La red responde con un Reintentar (edad = 96) (la siguiente edad del nodo se reduce)

En una situación de rebaño en estampida, podría tener muchos nodos intentando unirse a la vez forzando mucha sincronización de edad:

  1. Los nodos A, B, C, D intentan unirse simultáneamente con las edades de nodo predeterminadas de 4
  2. La red responde con un Reintentar (edad=97) a todos ellos.
  3. Los nodos A,B,C,D comienzan el proceso de unión nuevamente con 97 años.
  4. Diga que la red acepta el Nodo A.
  5. Los nodos B, C, D seguirán intentando unirse con la edad de 97, deberán volver a ejecutar la lógica de sincronización de edad nuevamente.

La razón por la que hicimos esto fue para evitar reubicaciones excesivas al principio de la red. Si recuerda, los nodos se eligen al azar para ser reubicados en otras secciones cuando ocurre un evento de abandono. Cuanto más joven era un nodo, más probable era que fueran elegidos para su reubicación. Para evitar que el 80% de su sección se reubique a la vez, introdujimos este comportamiento de escalonamiento de edad para reducir la probabilidad de que se produzca una reubicación.

En algún momento, cambiamos la forma en que se procesan los eventos de abandono para limitar la cantidad de nodos que se pueden reubicar a la vez para que las secciones puedan mantener una cantidad saludable de adultos.

Entonces, ahora que las razones detrás del paso de edad ya no son válidas, podemos eliminar el protocolo de sincronización de edad cuando los nodos se unen a la sección de génesis. ¡Esto hace que la primera sección se comporte mucho más cerca de las secciones subsiguientes sin rutas de código especiales dedicadas a ella! También debería hacer que las uniones de nodos sean un poco más confiables y rápidas, ya que eliminamos un viaje de ida y vuelta de la red para sincronizar la edad de unión.


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.