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.
Directorio de artículos
-
- lo dijo de frente
- Análisis de escenario
- Dimensiones para garantizar cero pérdida de llamadas en RPC
- Pérdida de llamadas cero en la dimensión del cliente rpc: reintentar
- Cero pérdida de llamadas en la dimensión del servidor rpc: inicio y parada elegantes
- Dimensiones para garantizar cero pérdida de llamadas en RPC
- Dilo al final
- referencias
- Lectura recomendada
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 rpc
capaz 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
- 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;
- 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;
- 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?" 》
" ¿ Cómo estructurar vídeos cortos de mil millones de niveles? " 》
" Explota, confía en" fanfarronear "para pasar por JD.com, salario mensual 40K "
" Explotó... Jingdong pidió 40 preguntas en un lado y, después de aprobarlas, fueron más de 500.000 " .
" 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 ↓↓↓