(Pregunta de la entrevista) ¿Cómo maneja la cola de mensajes la acumulación de mensajes?

1. Prevenga con anticipación y evite la acumulación de mensajes optimizando el rendimiento.

La capacidad de procesamiento de la cola de mensajes puede alcanzar el nivel de decenas de miles o incluso cientos de miles de mensajes por segundo, y la lógica empresarial que el sistema empresarial necesita procesar es más compleja que la cola de mensajes, por lo que un solo nodo puede manejar cientos de miles de solicitudes, lo que se considera que tiene un rendimiento muy alto. Por lo tanto, para optimizar el rendimiento de la cola de mensajes, nos preocupa más cómo nuestro código comercial coopera con la cola de mensajes en ambos extremos del envío y la recepción de mensajes para lograr el mejor rendimiento.

1. Optimización del rendimiento del remitente

Debido a que el remitente generalmente tiene que ejecutar su propia lógica de negocios primero y luego enviar el mensaje, el rendimiento del remitente que envía mensajes es relativamente bajo, esto puede deberse a que lleva demasiado tiempo ejecutar la lógica de negocios antes de enviar el mensaje.

(1) ¿Cómo resolver el problema de que la ejecución de la lógica empresarial lleva demasiado tiempo?

Al configurar la simultaneidad y el tamaño de lote adecuados , puede lograr un buen rendimiento de envío.

(2) ¿Qué pasos se deben considerar en el proceso de envío de mensajes?

ProducerEl proceso de enviar un mensaje consiste Produceren enviar un mensaje Brokery Brokerdevolver una respuesta de confirmación después de recibir el mensaje. Esta es una interacción completa. Supongamos que el retraso promedio de esta interacción es de 1 ms. Descomponemos este tiempo de 1 ms, que incluye el consumo de tiempo de los siguientes pasos:

  • El tiempo que le toma al remitente preparar datos, serializar mensajes, construir solicitudes y otra lógica es el tiempo que le toma al remitente enviar una solicitud de red;
  • El tiempo que lleva enviar un mensaje y devolver una respuesta a través de la red;
  • Retraso del corredor en el procesamiento de mensajes.

Si lo envía un solo hilo y solo se envía un mensaje a la vez, solo se pueden enviar 1000 ms / 1 ms * 1 / ms = 1000 mensajes por segundo. En este caso, no se puede utilizar toda la potencia de la cola de mensajes. .

Luego podemos aumentar el tamaño del lote de cada mensaje enviado o aumentar la concurrencia, duplicando así el rendimiento del envío. En cuanto a elegir 批量发送 o no 增加并发, depende principalmente de la naturaleza comercial del programa de envío. En pocas palabras, siempre que pueda cumplir con sus requisitos de rendimiento, puede implementarlo como desee.

(3) Ejemplo

  • Si el destinatario de su mensaje es uno 微服务, se trata principalmente 接收 RPC 请求处理de un negocio en línea. Naturalmente, cuando el microservicio procesa cada solicitud, puede 当前线程simplemente enviar el mensaje directamente. Debido a que todos los marcos RPC son multiproceso y admiten múltiples concurrencias, se implementa de forma natural 并行发送消息. Y los negocios en línea están más preocupados por las solicitudes 响应时延, y la elección 批量发送afectará inevitablemente al servicio RPC 时延. En este caso, la forma más inteligente es 并发mejorar el rendimiento del envío.
  • Para un sistema de análisis fuera de línea, al sistema fuera de línea no le importan los retrasos, sino que presta más atención al rendimiento de todo el sistema. Todos los datos del remitente provienen de la base de datos. En este caso 更适合批量发送, puede leer los datos de la base de datos en lotes.

2. Optimización del rendimiento del lado del consumidor

Si la velocidad de consumo es siempre menor que la velocidad de producción, durante mucho tiempo todo el sistema tendrá problemas. O el almacenamiento de la cola de mensajes se llena y no se puede atender, o los mensajes se pierden .

Por lo tanto, cuando diseñamos el sistema, debemos asegurarnos de que el rendimiento de consumo del extremo del consumidor sea mayor que el rendimiento de envío del extremo de producción, para que dicho sistema pueda continuar funcionando bajo monitoreo.

Cómo mejorar el rendimiento del consumidor

  1. Optimizar la lógica empresarial de consumo.
  2. Expansión horizontal, aumentando el número de concurrencias en el lado del consumidor para mejorar el rendimiento general del consumo.
    • Debido a que para los consumidores, cada partición (también llamada cola) solo puede admitir el consumo de un solo subproceso, por lo que al expandir el Consumernúmero de instancias, el número de particiones en el tema también debe expandirse simultáneamente. Asegúrese de que Consumerel número de instancias y particiones sea igual. Si Consumerel número de instancias excede el número de particiones, dicha expansión en realidad no es efectiva.

  3. Colocar mensajes en la cola de memoria puede devolver respuestas rápidamente, y los subprocesos comerciales que procesan mensajes pueden lograr un consumo paralelo, mejorar el rendimiento y el rendimiento del sistema y resolver el problema de que un solo mensaje no se pueda consumir en paralelo Consumer.

2. Hay una acumulación de mensajes en el sistema en línea, ¿cómo solucionarlo con urgencia?

1. Analizar las causas de la acumulación de mensajes.

(1) Con respecto a la acumulación de mensajes, solo hay dos razones generales:

  1. Los mensajes se envían más rápido
  2. El consumo del sistema se ralentiza

(2) Hay aproximadamente tres razones comunes:

  1. Las tareas generan demasiados servicios y las tareas procesan muy pocos servicios, lo que está desequilibrado;
  2. Los tiempos de procesamiento de las tareas son demasiado largos, lo que también conduce a una sobreproducción;
  3. El middleware en sí tiene una capacidad pequeña y necesita expansión o administración de clústeres;

2. Resuelve el problema

流量控制
(1) ( 2) Supervisar la generación de tareas 扩容消费端实例para mejorar la capacidad de consumo general
(3) 系统降级Cerrar algunos negocios sin importancia y reducir la cantidad de datos enviados por el remitente
(4) El consumo se ha ralentizado, está bien 检查日志, vea si hay errores de consumo masivo ; puede verificar si el hilo no se está 卡在什么地方moviendo, por ejemplo: esperando algunos recursos o provocando un punto muerto


3. Materiales de referencia

  1. Curso maestro de colas de mensajes
  2. Diseño de arquitectura | Proceso de procesamiento asincrónico, explicación detallada de múltiples modos de implementación

Supongo que te gusta

Origin blog.csdn.net/e2788666/article/details/131396845
Recomendado
Clasificación