Actualizaci√≥n de Safe Network Dev ūüá™ūüáł 28 de octubre de 2021

Esta es una traducción automática. El original en inglés está aquí: Update 28 October, 2021

Los errores pueden ser dif√≠ciles de encontrar, m√°s dif√≠ciles de eliminar y, a veces, incluso m√°s dif√≠ciles de explicar. En estas actualizaciones, intentamos presentar las √ļltimas noticias sobre el progreso que estamos logrando y nuestros planes para los pr√≥ximos pasos, pero de alguna manera eso es lo f√°cil. Como decir que estamos avanzando de manera constante por un determinado arroyo sin decir qu√© tan lejos est√° nuestro destino, cu√°ntos remos tenemos a nuestra disposici√≥n e ignorando los cocodrilos, los r√°pidos y otras cosas desagradables que se encuentran en el camino. Lo dif√≠cil es explicar esos errores sin perderse entre la maleza. Es un trabajo sucio, pero en aras de proporcionar un contexto muy necesario, alguien tiene que examinar los registros. @joshuef sac√≥ la pajita corta.

Progreso general

El código API y CLI ahora se ha fusionado en el repositorio principal de Safe Network, aunque todavía no hay una nueva versión, ya que hay algunas pruebas CLI fallidas. El proceso de lanzamiento también debe ajustarse para tener en cuenta las adiciones a este repositorio. @Chriso está en el caso.

También tentadoramente cerca está la eliminación de Connection Pool de qp2p, con esa funcionalidad llevada a Safe Network donde podemos ajustarla. El grupo de conexiones mantuvo abiertas las conexiones de los clientes, pero de una manera que fue difícil de refinar y configurar como lo deseamos. Eliminarlo simplifica qp2p y elimina muchos casos extremos, y es casi seguro que muchos errores.

Mientras tanto, @Joshuef eliminó un gran bloqueador esta semana logrando reducir la carga de mensajes en algunas circunstancias (entre los nodos buenos), de ~ 65,000 a ~ 500, todo está bien.

@bochaco y @yogesh han estado investigando cómo las secciones mantienen un registro de las demás, cómo este proceso puede hacerse más eficiente y dónde y en qué formato se almacena esta información.

Y @ Lionel.faber ha estado buscando priorizar los tipos de mensajes. Algunos mensajes son más importantes que otros. Los mensajes BLS DKG, que manejan la autorización, deben tener la máxima prioridad. No debe suceder nada importante sin el acuerdo de los ancianos. Liberar los canales para estos mensajes acelerará todo. En el otro extremo del espectro, las consultas, los comandos de datos y los mensajes de error pueden esperar felizmente su turno sin afectar el rendimiento.

Insectos

No creo que nadie haya dicho nunca que Safe sea simple. No es. Pero tampoco lo es. Tenemos las partes presentadas como la gente ha visto en varias redes de prueba. Y desde el √ļltimo (que, sabemos, se siente hace un tiempo), hemos estado martillando tratando de que todo sea m√°s estable.

Los errores detrás de la inestabilidad a menudo se mencionan en las actualizaciones, pero de una manera bastante técnica. Así que aquí queremos dar un poco más de una descripción general. Algo un poco más accesible para las personas a las que no les gusta bucear en un editor de texto durante horas.

Tienes tus errores cl√°sicos

2 + 2 = 5

O dejar mensajes entre nodos (tu publicación no llega).

O un problema de conexión, donde llega la mayor parte de lo que desea. Pero el tornillo que necesita no pasó. (Y ahora debe intentar que eso suceda nuevamente, para que pueda ver por qué ese tornillo no llega).

Condiciones de carrera, que es donde puede surgir un problema solo si alg√ļn c√≥digo o programa se completa m√°s r√°pido que otra parte del sistema. (Entonces, tal vez solo lo vea si su caballo LuckyProblems aparece justo antes de que lo haga otra vez y despu√©s de ThisAlreadyHappened; pero cualquier otro combo va bien).

Bucles. Las cosas siguen sucediendo porque desencadenan cosas al final. Posiblemente para siempre. A menudo har√°n que todo se cuelgue o se bloquee porque siguen consumiendo los recursos del programa.

Cuelga. También conocido como interbloqueo. Estos errores son el Catch 22 del mundo de los errores. Puede continuar solo si tiene number = 5, pero solo puede establecer number si tiene number = 5. Obviamente, esto es un síntoma de un error clásico, pero también suele ir de la mano con algo de carrera, por lo que no se da cuenta de esto hasta que es demasiado tarde (y ahora no está realmente seguro de por qué sucede esto …: pensando:.)

Entonces tienes algunos detalles m√°s seguros

Que a menudo son solo síntomas de lo anterior …

Amplificaci√≥n de mensajes. Aqu√≠ es cuando podr√≠amos esperar recibir 5 mensajes a trav√©s de nuestros nodos de almacenamiento, pero en su lugar obtener 500. Lo que a su vez hace que regresen otros 15000. Normalmente hay un error all√≠ (2 + 2 = 5) cuando vemos esto, o puede ser que el sistema no est√© haciendo lo que pensamos que har√≠a, por lo que necesitamos repensar el dise√Īo. (Recientemente, enviamos AE-reintentos ingenuamente a todos los ancianos. Para agravar esto, el siguiente conjunto de reintentos ser√≠a enviado por todos los ancianos ‚Ķ a todos los ancianos.: Chart_with_upwards_trend :slight_smile:

A veces tenemos una falta de rendimiento. Los mensajes no se eliminan. Pero las cosas van lentas. ¬Ņ¬°Por qu√©!? A veces, una combinaci√≥n de todo lo anterior.

Por el momento, después de algunas refactorizaciones, tenemos demasiado rendimiento. Ahora bien, esto no es un problema en sí mismo, pero a menudo puede exponer varios otros problemas … (¡elija entre cualquiera de los tipos de errores mencionados en esta publicación!)

¡Tenedores! Se bifurca en el camino del conocimiento de nuestra sección (quién vino antes que nosotros … quién engendró quién) … si los nodos noNo estoy de acuerdo por alguna razón (una razón con errores), bueno, entonces quizás podamos tener dos conjuntos de conocimientos válidos, pero no sabemos cuál es realmente relevante para nuestra situación actual.

Datos no encontrados. Es obvio ‚Ķ pero ¬Ņpor qu√©? Bueno, cualquiera de los anteriores podr√≠a llevar a que los datos no sean PUT en primer lugar. ¬°As√≠ que buena suerte para encontrar lo que no existe!

¡Sin división! Necesitamos divisiones para mantener la red en buen estado (para dividir la carga de trabajo más fácilmente y mantener la resistencia a los ataques, por ejemplo). No dividir podría ser un error en el algoritmo DKG (Generación de clave distribuida … O cómo damos a nuestros mayores su autoridad).

Elegir el objetivo equivocado. A veces, el sistema de mensajer√≠a parece funcionar y se entrega el paquete. Pero en realidad lo enviamos a la persona equivocada (¬Ņ¬°o lo enviamos a todo un vecindario / secci√≥n !?).

¬°Estar demasiado emocionado! A veces hacemos algo tan pronto como podemos. Pero la red, en su ruta necesaria hacia una eventual consistencia, a√ļn no est√° lista. (Imagina que PONTE un fragmento, pero a√ļn no se ha almacenado todo, pero ya ha intentado OBTENER). Puede parecer que hay un error. Pero en realidad, si vuelve a intentarlo en unos segundos, tal vez todo est√© bien. Pensaste que ten√≠as un error, pero estabas demasiado entusiasta.

Taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Entonces. Ese es un resumen aproximado de varias cosas que podemos ver y encontrar en el sistema. Eso puede ser por nodo, por cliente o por sección … Y solo a veces, o solo un martes en una compilación de Linux poco conocida. Y cuando vea el problema, es posible que se esconda más allá de 3 o 4 tipos de errores diferentes, antes de llegar a la raíz del problema.

Todo lo cual estamos viendo en un sistema de 45 nodos y m√ļltiples clientes (en promedio en este momento durante las pruebas internas).

Lo seguro no es tan complejo cuando lo piensas, al menos conceptualmente (compartir datos entre computadoras). Pero tampoco es tan simple como puede ser, por lo que todavía estamos solucionando problemas, refactorizando cosas (haciéndolas más simples) e implementando nuevas características (y a veces están destinadas directamente a ayudar a depurar).

Eliminar el código y la complejidad innecesarios nos ayuda a llegar a algo simpler, que, junto con la solución de los errores clásicos del sistema, suele ser una de las formas más importantes de resolver errores. Menos código, menos problemas .: bombilla:

¡Estamos llegando allí! No siempre se siente rápido, pero siempre se siente como si estuviéramos avanzando (incluso cuando a veces necesitamos retroceder un poco).


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.