Lado de Weibo: ¿Cómo lograr cero pérdida de llamadas en RPC?

lo dijo de frente

En el grupo de intercambio de lectores (más de 50 años) de Nien, un arquitecto de 40 años , algunos amigos obtuvieron recientemente empresas de Internet de primer nivel como Weibo, Alibaba, Autohome, Jitu, Youzan, Xiyin, Baidu, NetEase, la entrevista de Didi. calificaciones encontré algunas preguntas de entrevista muy importantes:

  • ¿Cómo realizar una actualización sin pérdidas de RPC?
  • Cuando se lanzan los microservicios, ¿cómo puede RPC lograr cero pérdida de llamadas?

Problemas similares que han encontrado otros amigos incluyen:

  • Al actualizar microservicios, ¿cómo evitar daños al negocio de la persona que llama en RPC?

Por lo tanto, aquí Nien le brindará una revisión sistemática y sistemática, para que pueda demostrar plenamente sus fuertes "músculos técnicos" y hacer que el entrevistador "no pueda evitarlo y babee" .

Esta pregunta y las respuestas de referencia también se incluyen en nuestra versión V108 de la " Guía de entrevistas de Nion Java en PDF " para que los amigos posteriores puedan consultarla y mejorar los niveles de arquitectura, diseño y desarrollo de 3 niveles de todos.

Para obtener los archivos PDF de "Notas de arquitectura de Nien", "Trilogía de alta concurrencia de Nien" y "Guía de entrevistas de Nien Java", vaya a la cuenta oficial [Technical Freedom Circle] para obtenerlos.

Análisis de escenario

En la arquitectura de microservicios, se ejecutan en línea docenas o incluso cientos de microservicios.

Existen complejas relaciones de llamadas RPC entre instancias de servicio.

Estas instancias de servicio pertenecen a diferentes equipos de desarrollo, diseño y mantenimiento.

El problema es:

En el proceso de reinicio y actualización de algunas instancias de servicio , ¿cómo podemos evitar que el sistema de llamadas RPC del microservicio cause problemas?

Dimensiones para garantizar cero pérdida de llamadas en RPC

Si desea garantizar una pérdida cero de llamadas RPC, puede evitarla desde al menos las dos dimensiones siguientes:

  • Dimensión uno: dimensión del cliente rpc
  • Dimensión uno: dimensión del servidor rpc

Las medidas efectivas para lograr una pérdida de llamadas cero en la dimensión del cliente rpc son: reintentar

Una medida eficaz para lograr cero pérdida de llamadas en la dimensión del servidor rpc es: inicio y parada elegantes

Pérdida de llamadas cero en la dimensión del cliente rpc: reintentar

Cuando ocurre un error, el cliente rpc puede volver a intentar la instancia del servicio.

Los marcos rpc comunes, como el marco OpenFeign, tienen parámetros como el número de reintentos y el intervalo de reintento.

Por supuesto, si desea lograr una pérdida cero de llamadas RPC a través del mecanismo de reintento, debe asegurarse de que haya instancias en buen estado disponibles al actualizar.

No todas las instancias de microservicio se pueden actualizar al mismo tiempo y, por lo tanto, no están disponibles al mismo tiempo. En este caso, no tiene sentido volver a intentarlo.

Por lo tanto, las medidas de reintento se combinan mejor con la correspondiente actualización/lanzamiento continuo en línea, o la actualización/lanzamiento en escala de grises y otras estrategias similares.

Cero pérdida de llamadas en la dimensión del servidor rpc: inicio y parada elegantes

El inicio y la parada elegantes incluyen:

  • comienzo elegante
  • Parada elegante/fuera de línea elegante

comienzo elegante

Inicio elegante: cuando la instancia de microservicio realmente haya completado el inicio, o incluso completado el calentamiento, y sea realmente rpccapaz de procesar solicitudes, la instancia en sí se registrará en el centro de registro.

¿Por qué empezar con gracia? La razón principal es: para evitar que se envíen solicitudes RPC, las instancias de microservicio que no hayan completado el proceso de inicio no se pueden procesar.

El proceso de inicio elegante también incluye el proceso de precalentamiento de JVM. Para conocer la solución de precalentamiento de JVM, consulte el artículo anterior de Nien:

Weibo: calentamiento de JVM, ¿cuál es tu plan?

Parada elegante/fuera de línea elegante

Antes de que el servicio se desconecte, es suficiente eliminar la instancia que se desconectará de la "lista de estado" mantenida por la persona que llama a través de "algún método", para que el equilibrio de carga no pueda seleccionar este nodo.

Generalmente, esta operación se completa confiando en el centro de registro.

Cuando el proveedor de servicios se cierra, primero notifica al centro de registro que se desconecte y luego notifica a la persona que llama a través del centro de registro que elimine el nodo.

Como se muestra en la figura anterior, todo el proceso de apagado se basa en dos llamadas RPC:

  • Una vez, el proveedor de servicios notificó al centro de registro que se desconectara.
  • Una vez, el centro de registro notifica a la persona que llama el servicio para que realice operaciones de nodo fuera de línea.

Cabe señalar que ambas notificaciones son asincrónicas y solo garantizan una coherencia final, no una coherencia sólida.

Hay un cierto período de tiempo entremedio, por lo que si desea lograr una actualización de la aplicación sin pérdidas, debe cerrar oficialmente la instancia de servicio después de un período de tiempo después de enviar la notificación.

Proceso simple de parada elegante/fuera de línea elegante

  1. La instancia fuera de línea se da de baja en el centro de registro y la información de metadatos de la instancia se da de baja;
  2. El ciclo de actualización de metadatos del nodo del centro de registro es de 15 segundos. Después de que la persona que llama detecta el cambio de la instancia del centro de registro, actualiza la dirección del servicio de caché local y ya no enruta el tráfico a la instancia fuera de línea. Esto garantiza negocios ininterrumpidos durante este período;
  3. La instancia sin conexión espera 30 segundos (2 ciclos de latidos) antes de realizar la operación sin conexión real;

Resumen de parada elegante: la parada elegante significa que cuando un microservicio está a punto de desconectarse, primero cierra sesión en el centro de registro, luego procesa el mensaje de llamada RPC recibido y luego se apaga por completo. Mediante un apagado ordenado, se puede prevenir eficazmente la pérdida de llamadas enviadas a nodos antiguos durante la actualización. Debe prestar atención al intervalo de tiempo entre el envío de la notificación fuera de línea y el momento en que se desconecta oficialmente.

Dimensiones para garantizar cero pérdida de llamadas en RPC

Si desea garantizar una pérdida cero de llamadas RPC, puede evitarla desde al menos las dos dimensiones siguientes:

  • Dimensión uno: dimensión del cliente rpc
  • Dimensión uno: dimensión del servidor rpc

La estrategia central de la dimensión del cliente rpc es volver a intentarlo

La estrategia central de la dimensión del servidor rpc es iniciar y detener con gracia

Ambas dimensiones son indispensables y deben realizarse.

Dilo al final

Las preguntas de entrevista relacionadas con RPC son preguntas de entrevista muy comunes.

Si todos pueden responder el contenido anterior de manera fluida y completa, el entrevistador básicamente se sorprenderá y se sentirá atraído por usted.

Antes de la entrevista, se recomienda que revise sistemáticamente el " PDF de la Guía de entrevistas de Nien Java " de 5000 páginas. Si tiene alguna pregunta durante el proceso de revisión de preguntas, puede venir a hablar con el arquitecto Nien, de 40 años.

Al final, al entrevistador le gustó tanto que "no puede evitarlo y se le hace la boca agua" . La oferta está por llegar.

referencias

https://blog.csdn.net/Weixiaohuai/article/details/125391957

https://www.cnblogs.com/daoqidelv/p/7043696.html

Tsinghua University Press " Java High Concurrency Core Programming Volumen 2 Edición mejorada "

Lectura recomendada

" Diez mil millones de visitas, cómo diseñar una arquitectura de caché "

" Diseño de arquitectura de caché multinivel "

" Diseño de arquitectura de inserción de mensajes "

" Alibaba 2: ¿Cuántos nodos implementas?" ¿Cómo implementar concurrencia de 1000W?

" Meituan 2 Sides: Five Nines High Availability 99,999%. ¿Cómo lograrlo?"

" Lado de NetEase: nodo único 2000Wtps, ¿cómo lo hace Kafka?"

" Byte Side: ¿Cuál es la relación entre la compensación de la transacción y el reintento de la transacción?"

" Lado de NetEase: escritura Mysql de alto rendimiento de 25 Wqps, datos de 100 W se escriben en 4 segundos, ¿cómo lograrlo?"

" ¿ Cómo estructurar vídeos cortos de mil millones de niveles? "

" Explota, confía en" fanfarronear "para pasar por JD.com, salario mensual 40K "

" Es tan feroz que confío en" fanfarronear "para pasar por SF Express, y mi salario mensual es de 30.000 " .

" Explotó... Jingdong pidió 40 preguntas en un lado y, después de aprobarlas, fueron más de 500.000 " .

" Estoy tan cansado de hacer preguntas... Ali hizo 27 preguntas mientras preguntaba por su vida, y después de aprobarlas, son 600.000+ "

" Después de 3 horas de preguntas locas sobre Baidu, recibí una oferta de una gran empresa. ¡Este tipo es tan cruel!"

" Ele.me es demasiado cruel: frente a un Java avanzado, qué duro y cruel es el trabajo "

" Después de pedirle a Byte una hora, el tipo recibió la oferta. ¡Es tan cruel!"

" Acepta la oferta de Didi: De tres experiencias de joven, ¿ves lo que necesitas aprender?"

"Notas de arquitectura de Nien", "Trilogía de alta concurrencia de Nien", "Guía de entrevistas de Nien Java" PDF, vaya a la siguiente cuenta oficial [Technical Freedom Circle] para obtener ↓↓↓

Supongo que te gusta

Origin blog.csdn.net/crazymakercircle/article/details/132836352
Recomendado
Clasificación