Eureka (3) Principio de implementación del clúster eureka
Después de comer eureka durante n días, mi comprensión personal es la siguiente: es simple de usar y abstracto de entender. Bueno, no es fácil hacerlo a mano. Usemos tus manitas para compartir, reenviar, dar me gusta, comentar, etc.~~~~
Por ejemplo: sabemos que el sol sale por el este. y se pone por el oeste debido a la rotación de la Tierra. ¿Pero sabemos por qué la tierra se autobiografía? ¿Y por qué gira en una dirección en lugar de ir y venir? Bien ~ No sé nada de esto ~~ Así que hablemos del siguiente tema, cómo se implementa el clúster eureka.
No entiendo el dibujo que viene con la computadora~~ Dibujémoslo a mano. . Tres servidores, dos clientes, la relación es la siguiente:
De hecho, cada servidor (aquí nos referimos a la instancia) tiene un Cliente Eureka incorporado, lo que significa que un servidor puede aceptar el registro de otros. Clientes, o registrarse como Cliente en otros Servidores y ser descubierto y llamado por otros Clientes. Puede entender que una instancia de servidor consta de un Servidor + Cliente. También puede entenderse como dos contenedores. Solo tienen la misma IP, número de puerto, nombre, etc. durante la inicialización. No hay otra conexión.
Entonces, las dos propiedades que configuramos: RegisterWithEureka y fetchRegistry también son configuraciones para el lado del cliente de esta instancia.
-?registrarConEureka: Si se debe registrar con otros servidores. Si hay algunas interfaces abiertas en mi Servidor, definitivamente necesito registrarlas para que otros Clientes puedan descubrir mis servicios. Si mi servidor no proporciona una interfaz externa, este parámetro se puede configurar en falso.
-? fetchRegistry: si es necesario extraer información del servicio. Al igual que si me registro o no, si mi Servidor necesita llamar a otras interfaces de Cliente como cliente, necesita obtener la información de descubrimiento de servicio correspondiente para poder llamarlo normalmente. Al mismo tiempo, este parámetro también juega un papel importante, que es determinar si el servidor sincronizará completamente inmediatamente la información de servicio de otros nodos durante la inicialización. ! ! Cuando se inicializa el Servidor, su Cliente integrado se inicializará primero. Si se configura fetchRegistry=true, el Cliente extraerá toda la información del servicio de otros Servidores durante la inicialización y la colocará en el contenedor del Cliente. Cuando se inicializa el Servidor, intentará sincronizar la información del servicio en el contenedor del Cliente. Si fetchRegistry = false, la información del servicio no existe y solo puede esperar pasivamente a que otros nodos del Servidor se sincronicen de forma incremental (el Cliente se registra en consecuencia al realizar la operación). registro y latido El nodo del servidor transmitirá este evento y lo sincronizará con otros nodos del servidor. Cuando otros nodos del servidor no tengan esta información de servicio, registrarán esta información de servicio). Por supuesto, también es posible la sincronización normal a través de latidos. La necesidad de configurar este parámetro depende de sus necesidades individuales.
Esto implica el mecanismo de sincronización entre los nodos del Servidor: cuando el Cliente interactúa con el Servidor, solo interactuará con uno de los Servidores.
Este es un asunto complicado, así que lo explicaré con imágenes aquí.
Debido a que la relación entre los nodos en el diagrama anterior es relativamente simple y no puede explicar el problema, agregué dos clientes y un servidor. La relación es como se muestra en la figura.
-Primer Servidor4 y Servidor1 se registran entre sí. Entonces podemos llamar al Cliente3 a través del Servidor1 (esto significa directamente). Es decir, Cliente4 puede descubrir Cliente3.
-Entonces presta atención, ¡aquí viene el punto clave! El Servidor1, el Servidor3 y el Servidor4 están registrados entre sí, pero el Servidor3 y el Servidor4 no están registrados entre sí, por lo que el Cliente3 y el Cliente2 no pueden descubrirse entre sí.
-Tengo que añadir una cosa más a los diversos problemas que acabo de pintar en el cuadro. (Mire la imagen a continuación para comprender lo que estoy diciendo) Si el cliente2 también está registrado en el Servidor1, el Cliente2 solo puede interactuar con uno de 1 y 3 debido al mecanismo de sincronización entre los nodos del Servidor.
——Si interactúa con el Servidor1, el Cliente3 se puede descubrir en este momento.
- Pero si interactúa con el Servidor3, no se puede encontrar el Cliente3.
- Hay otra situación. El servidor 4 está inactivo. En teoría, Client3 pierde contacto.
Sin embargo, debido a que hay información c3 en el Servidor1, el Cliente3 aún se puede usar temporalmente en el Servidor1. Sin embargo, debido a que el cliente3 no renovará su contrato, será expulsado cuando se acabe el tiempo (será expulsado si el contrato no se cumple). renovado en 90 segundos por defecto). En cuanto al propio Client3, si se ha utilizado antes, cualquiera puede seguir usándolo ~~ Pero no será dinámico, no recibirá notificaciones de los cambios realizados por otros y no podrá descubrir otros servicios que sí lo sean. añadido más tarde.
De hecho, esta es una metáfora de una relación real: el servidor es un ser humano. El cliente es algo. Entonces la regla para dar cosas es que sólo puedes dar "tus" cosas a personas en las que confías. El llamado descubrimiento es hablar de algo en la casa de una persona.
Piénselo de esta manera, S1 confía en S2, S3, S4, por lo que C4 puede estar en la casa de cualquiera. Entonces C4 puede interactuar con C1, C2 y C3.
Entonces S4 solo confía en S1, por lo que C3 solo aparecerá en el hogar de S4 o S1. Entonces, C3 solo puede interactuar con C4 y C2 en la casa de S1 (puedes pensarlo al revés, eso es lo que significa de todos modos).
Entonces el entendimiento popular puede entenderse así. Pero la razón real es que la sincronización de servicios entre servidores se ejecuta de forma asincrónica. Al mismo tiempo, la sincronización entre servidores solo se propagará una vez. Utilizan un parámetro en el encabezado para indicar si la solicitud proviene del cliente o del servidor. Si es una solicitud del Servidor, no se propagará después de recibir la solicitud. Entonces se puede entender que hay una línea más adelante. Esta es también la razón por la que no se puede encontrar el Cliente3 cuando el Cliente2 interactúa con el Servidor3.
Mi expresión verbal es demasiado incompetente~~Perdóname por mi pobre chino. Me tomó casi un día organizar el idioma ~~ Luego también llegué a la conclusión mirando el sitio web oficial para ver demostraciones y leyendo varias publicaciones. Si hay algún malentendido o prejuicio, indíquelo y corríjalo ~~~ Puede dejar un mensaje para discutir ~~
Cómo decirlo, conceptualmente, primero debe comprender qué es un yo. -mecanismo de protección es. Si no lo entiendes, puedes consultar mis dos primeros artículos:
Qué es un mecanismo de autoprotección: explicación detallada de la terminología de eureka
Configurar un mecanismo de autoprotección : Explicación detallada de la configuración de eureka
Lo que quiero explicar aquí es un problema que es fácil de ocurrir e ignorar: es posible que solo tengamos unos pocos microservicios. Por ejemplo, hay 5 y luego uno de ellos cae. El umbral predeterminado para eureka es del 85%. Es decir, si la tasa normal es inferior al 85%, se activará el mecanismo de autoprotección y la gente empezará a dudar de la vida ~~ Entonces una de las cinco caídas llegará directamente al 80%. Se acabó, eureka ya no pateará a la gente ~ ¿Crees que este servicio de reciclaje de información no es por diversión? Así que en este momento tenemos que fijar el umbral nosotros mismos. ¡Se puede modificar a un valor apropiado, como 0,5 o algo así! Depende de la situación específica.
(Esto en realidad tiene poco que ver con la implementación del clúster, principalmente porque me quedé atascado aquí~ así que lo mencioné~~ Originalmente esperaba terminarlo, pero luego me acordé de esto~ Mi mala composición tipográfica)
Todo el texto está escrito a mano, e incluso las imágenes están dibujadas a mano ~~~ No es fácil escribir un artículo ~~ Si sientes que se usa y lo entiendes ~ ¿Es apropiado darle me gusta o retuitear sin salir? ¿un mensaje? ~