Limitación de frecuencia es un mecanismo importante para controlar la utilización de recursos y mantener la calidad del servicio. Go soporta elegantemente la limitación de frecuencia con goroutines, canales y tickers. |
|
|
|
|
|
|
|
Primero veremos la limitación de frecuencia básica. Supongamos que queremos limitar nuestro manejo de solicitudes entrantes. Atenderemos estas solicitudes desde un canal del mismo nombre. |
|
Este canal |
|
Al bloquear en una recepción del canal |
|
Podemos querer permitir ráfagas cortas de solicitudes en
nuestro esquema de limitación de frecuencia mientras preservamos la
limitación de frecuencia general. Podemos lograr esto mediante
la amortiguación de nuestro canal limitador. Este canal |
|
Llenar el canal para representar la ráfaga permitida. |
|
Cada 200 milisegundos intentaremos agregar un nuevo
valor a |
|
Ahora simulemos 5 solicitudes entrantes más. Las primeras
3 de estas se beneficiarán de la capacidad de ráfaga
de |
|
Al ejecutar nuestro programa vemos que el primer lote de solicitudes se maneja una vez cada ~200 milisegundos como se desea. |
|
Para el segundo lote de solicitudes atendemos las primeras 3 inmediatamente debido a la limitación de frecuencia ráfaga, luego atendemos las 2 restantes con retrasos de ~200ms cada una. |
|
Siguiente ejemplo: Atomic Counters.