En lugar de imponer un orden global estricto a los eventos, no hay ningún orden. Y luego, se garantiza la escalabilidad. Al permitir operaciones concurrentes e independientes para proceder sin sincronización, la consistencia casual permite que estos sistemas se escalen de manera más efectiva. ¿Cómo? Porque los sistemas pueden agregar más nodos o recursos para manejar una carga de trabajo creciente sin introducir cuellos de botella o puntos de contención asociados con cualquier coordinación centralizada. Es lo mismo que la falta de coordinación centralizada para cosas concurrentes que no están relacionadas casualmente también puede mejorar la escalabilidad. Luego, la latencia, por supuesto, la mejor latencia cuando ocurren cosas en paralelo. Y la tolerancia a fallos, cómo la consistencia casual proporciona un marco flexible y resistente para manejar fallos y mantener la disponibilidad del sistema. Las operaciones independientes pueden continuar ejecutándose incluso durante la presencia de fallos parciales o particiones de red, lo que permite que el sistema tolere fallos y se recupere sin sacrificar el rendimiento. Ahora eso es todo acerca de la consistencia casual y el segundo aspecto de la optimización de microservicios es algo llamado algoritmos conscientes. Entonces, ahora esto logra resiliencia. Ahora hablemos de qué son los algoritmos conscientes y qué es consciente en primer lugar. Entonces, si acabo de mencionar cómo los nodos del sistema distribuido interactúan entre sí, ya sea para replicar los datos entre los nodos o cuando los nodos necesitan interactuar entre sí. Antes, al comienzo de esta presentación, estaba hablando sobre los sistemas de reserva, donde, por ejemplo, la reserva de películas o de vuelos, las personas tienden a competir o reservar un punto común, como el mismo asiento. Entonces, en ese caso, debe haber coordinación entre todos los nodos en el
backend y qué sucede si hay algunos fallos durante esa coordinación o el envío de mensajes entre los nodos. Entonces, durante esos fallos, incluso durante esos fallos, no queremos que el sistema, queremos que el sistema
backend funcione de la misma manera que si no hubiera fallos. Eso se llama consciente, lo que significa que todos los nodos deben tener conciencia de cómo van a coordinar o, por ejemplo, si el líder está muerto o un nodo líder no está funcionando o ha ocurrido una falla de red, aún queremos que los resultados se recuperen, el procesamiento se realice y luego se proporcione al usuario para que el usuario no se vea afectado. Por ejemplo, si hay una falla de nodo y durante la coordinación entre los nodos y debe haber un acceso a una área crítica, como se necesita exclusión mutua o, por ejemplo, un mensaje debe ser transmitido a los otros nodos desde un nodo que falló. Entonces, en todos los casos de falla, no queremos que el sistema se vea afectado, eso está garantizado por los algoritmos conscientes porque si algo falla, los algoritmos conscientes aseguran que se elija un nuevo nodo como líder y las cosas como la exclusión mutua y la transmisión de mensajes se garantizan, y también el algoritmo en algunos algoritmos asegura que se realice la comunicación correcta entre los nodos. Entonces, sí, como dije, varios nodos están conectados entre sí y colaboran entre sí a través del envío de mensajes y durante la computación necesitan ponerse de acuerdo sobre una cosa común o un valor común para coordinar entre múltiples procesos. Esto se llama conciencia distribuida y ¿por qué se requiere, verdad? Como expliqué antes, en un sistema distribuido puede suceder que múltiples nodos estén procesando grandes cálculos de manera distribuida y necesiten conocer los resultados de cada uno de los otros nodos para mantenerlos actualizados sobre todo el sistema. En tal situación, los nodos deben ponerse de acuerdo sobre un valor común incluso en presencia de fallos o particiones de red. Ese es todo el punto aquí y mencioné dos tipos de fallos aquí, uno es el fallo de bloqueo cuando un nodo no responde a otros nodos del sistema debido a alguna falla de hardware o software. Este es un caso de uso muy común, un problema común en los sistemas distribuidos y se puede manejar fácilmente ignorando la existencia de los nodos, es decir, la lógica puede asumir que no existe tal nodo cuando existe ese problema. Es simple de manejar, pero el fallo bizantino es el fallo complicado, es como uno o más nodos no están bloqueados, pero el nodo se comporta anormalmente y envía un mensaje diferente a diferentes pares, como se puede ver en diferentes colores allí, debido a algún ataque interno o externo en ese nodo. Manejar esta situación es complicado, como el fallo bizantino se trata de un nodo defectuoso que envía diferentes mensajes a diferentes pares. Entonces, los algoritmos conscientes abordarían este tipo de problemas y esta es una de las mejores estrategias o consideraciones de optimización para el mundo de los microservicios. Ahora, tomemos un ejemplo de coordinación aquí y un caso de uso. Entonces, nuevamente, como mencioné anteriormente, booking.com o cuando se realiza una reserva de avión, a menudo hay varios algoritmos para lograr la conciencia y los sistemas distribuidos. Estaré demostrando este algoritmo llamado modelo basado en votación y cómo los nodos se coordinan entre sí en este modelo basado en votación. Y como dije, los algoritmos son como PACSOURCE, RAFT, ZAB, PBFT, que he dado en la siguiente diapositiva. Entonces, lo que sucede en esto es que un usuario, como se puede ver, 1, 2, 3, 4, está tratando de reservar el mismo asiento en un avión o un teatro y todas esas solicitudes respectivas van a sus nodos correspondientes, digamos nodo 1, 2, 3, 4, y cada nodo internamente tendrá un líder seguidor o algo así implementado internamente, pero no queremos entrar en esos detalles. Entonces, lo que sucede después del paso dos significa que debe haber una forma de que todos estos nodos se coordinen porque estos nodos están distribuidos geográficamente. Supongamos que los usuarios están tratando de reservar desde Estados Unidos, Europa y Argentina, y todos estos nodos deben coordinarse de tal manera que solo una persona se reserve y esa decisión generalmente la toman los algoritmos conscientes y lo que sucede es que en el paso número tres se selecciona el nodo líder, el algoritmo selecciona el nodo líder y luego el nodo líder envía un mensaje, como un nodo propone un valor, como el ID del cliente. Este cliente obtiene el asiento y otros nodos deben votar por ese valor, por lo que en este caso, el nodo líder, nodo 1, en el paso 3 envía el ID del cliente propuesto a los nodos 3, 4 y 2, y luego todos los demás nodos envían una respuesta diciendo que sí, votamos qué ID de cliente debe obtener la reserva y después de que se realicen las votaciones, el sistema toma la votación mayoritaria, el líder toma una votación mayoritaria y toma una decisión. Entonces, esto se llama enfoque determinista y una vez que se determina el paso número cinco, el nodo líder, nodo 1, se comunica con todos los demás nodos diciendo que este es el cliente que se ha seleccionado. Así es como funciona este modelo de votación y hay muchos otros algoritmos que ayudan a la coordinación y este es un concepto muy importante para tratar de tener la arquitectura de microservicios más optimizada en el
backend cuando se diseñan los sistemas. Y ahora, cómo garantizan estos algoritmos la llamada resiliencia de la que estoy hablando, ¿verdad? Digamos, ¿qué es la resiliencia? Entonces, la resiliencia se puede categorizar en muchas cosas, como la tolerancia a fallos, por ejemplo, estos algoritmos están diseñados para tolerar fallos como fallas de nodo, pérdida de mensajes o particiones de red y todo eso. Por ejemplo, un algoritmo PACSOURCE o un algoritmo RAFT, siempre y cuando la mayoría de los nodos funcionen correctamente y puedan comunicarse entre sí, el sistema puede avanzar y alcanzar la conciencia sobre los valores propuestos. Y la segunda forma de garantizar la resiliencia es, por ejemplo, la elección del líder, como dije antes, los algoritmos como RAFT o el protocolo de transmisión atómica de los servidores de zoo, permiten mecanismos de elección del líder para asegurar que solo un nodo actúe como líder en cualquier momento dado, este líder es responsable de coordinar el proceso de acuerdo y garantizar que todos los nodos converjan en el mismo estado. Luego, está el acuerdo basado en quórum, por lo que estos algoritmos nuevamente típicamente requieren un quórum de nodos para ponerse de acuerdo sobre un valor, como la votación, antes de que se considere comprometido, asegurando que un número suficiente de nodos participe en el proceso de acuerdo. Estos algoritmos, algunos algoritmos, evitan que el sistema alcance un estado inconsistente o tome decisiones incorrectas, como nuevamente PACS también son algoritmos de tolerancia a fallas bizantinas prácticas, los valores se consideran comprometidos una vez que han sido aceptados por la mayoría de los nodos y esa garantía la hacen estos algoritmos. Luego, por supuesto, la replicación de datos, que mencioné anteriormente, muchos algoritmos conscientes implican copiar los datos de un sistema a otro o dentro de un nodo si tienes, por ejemplo, líder seguidor, la copia siempre se realiza de forma asíncrona como parte del algoritmo y también maneja este aspecto de replicación para garantizar la tolerancia a fallos y la resiliencia al mantener múltiples copias de datos, los sistemas distribuidos continúan funcionando correctamente incluso si algunos nodos fallan o no están disponibles. Y sí, por último, la reconfiguración y la recuperación, los algoritmos conscientes proporcionan mecanismos para, en caso de una falla de nodo y particiones de red, por ejemplo, los algoritmos PACS o RAFT admiten la reconfiguración dinámica, lo que permite que los nodos se unan o abandonen el sistema de manera dinámica sin interrumpir su funcionamiento en absoluto. De esta manera, estos algoritmos aseguran que el sistema pueda recuperarse de fallos o particiones al reelegir líderes, resincronizar datos y restaurar la consistencia entre los nodos. Entonces, sí, estos son los dos aspectos principales de los sistemas distribuidos o las estrategias de optimización de los microservicios en la arquitectura de los sistemas distribuidos para lograr un mayor rendimiento y resiliencia. Gracias, muchas gracias por ver, así que espero con ansias otra sesión para compartir más información. Gracias
Comments