Tabla de contenido
- 1. Prevenga con anticipación y evite la acumulación de mensajes optimizando el rendimiento.
- 2. Hay una acumulación de mensajes en el sistema en línea, ¿cómo solucionarlo con urgencia?
- 3. Materiales de referencia
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?
Producer
El proceso de enviar un mensaje consiste Producer
en enviar un mensaje Broker
y Broker
devolver 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
- Optimizar la lógica empresarial de consumo.
- 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
Consumer
número de instancias, el número de particiones en el tema también debe expandirse simultáneamente. Asegúrese de queConsumer
el número de instancias y particiones sea igual. SiConsumer
el número de instancias excede el número de particiones, dicha expansión en realidad no es efectiva.
- 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
- 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:
- Los mensajes se envían más rápido
- El consumo del sistema se ralentiza
(2) Hay aproximadamente tres razones comunes:
- Las tareas generan demasiados servicios y las tareas procesan muy pocos servicios, lo que está desequilibrado;
- Los tiempos de procesamiento de las tareas son demasiado largos, lo que también conduce a una sobreproducción;
- 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