Limitación de Mensajes

La tasa de procesamiento de mensajes puede necesitar ser limitada a veces para evitar sobrecargar los sistemas posteriores y suavizar el tráfico irregular. Tanto los conectores de envío como los de recepción pueden ser configurados para limitar la tasa de mensajes que pueden procesar.

Esto es además de contrapresión(señalización de demanda) obtenemos en virtud de utilizar Akka Streams en la implementación de la biblioteca de conectores. Es decir, si alguna parte de la tubería de procesamiento está funcionando lentamente, entonces la presión de retroceso se activaría y limitaría efectivamente la tasa del sistema.

La diferencia con la limitación es que podemos ajustar la tasa máxima de mensajes durante un intervalo de tiempo. Esto es especialmente útil si tenemos un sistema de downstream más lento que no queremos sobrecargar.

Consideraciones de ajuste

Los dos parámetros que se pueden ajustar para la limitación son la duración de la ventana y el conteo de mensajes. El mecanismo de limitación permitirá que los mensajes pasen a la tasa a la que lleguen hasta que se alcance el número máximo de mensajes dentro de la duración de la ventana.

Esto es importante porque podríamos tener dos configuraciones que proporcionen el mismo rendimiento general, por ejemplo:

Duración de la ventana Conteo de Mensajes Rendimiento (TPS)

10 segundos

1000

100

1 segundo

100

100

En el primer ejemplo, es posible que se procesen 1000 mensajes dentro del primer segundo. Esto significaría que durante los nueve segundos restantes, no se procesaría nada. Mientras que en el segundo ejemplo, bajo la misma carga, veríamos una tasa de procesamiento más fluida ya que la ventana es más pequeña.

Configuración del Acelerador

Para configurar la limitación en ambos conectores de envío y recepción, se debe proporcionar una duración y un conteo al construir el conector. Si los parámetros del acelerador no están configurados, entonces el conector procesará los mensajes a medida que lleguen, sin restricciones, aunque con presión de retroceso de los consumidores aguas abajo.

initiatingReceiveConnectorBuilder()
        .withThrottleDuration(Duration.ofMillis(500))
        .withThrottleCount(1);