Estoy haciendo pruebas de carga con mi aplicación Django proporcionando suscripciones GraphQL usando canales Django y una capa de canales redis ( django , graphene-django , channels , graphene-subscriptions , channels-redis ). Como servidor ASGI, estoy usando daphne en este momento. Uso nginx como proxy. La periodicidad con la que el backend publica mensajes a través de las suscripciones de GraphQL depende de la periodicidad de los mensajes que el backend recibe a través de MQTT. Estoy aumentando la periodicidad con la que un proveedor de datos externo publica mensajes al corredor MQTT, es decir, la periodicidad con la que el backend tiene que procesar estos mensajes y publicar mensajes a través de suscripciones de GraphQL. Estoy enfrentando el siguiente error:
2020-03-11 08:33:58,464 ERROR 2 of 12 channels over capacity in group subscriptionsParece que este problema es causado porchannels_redis . ¿Puedo escalar la infraestructura para solucionar este problema?
La capacidad predeterminada es de 100 mensajes y el tiempo de caducidad predeterminado de los mensajes es de 60 segundos. Entonces, si el canal nunca se lee dentro de estas limitaciones de capacidad/tiempo, se llenará.
Una de las razones por las que un canal puede llenarse es cuando la conexión nunca se cierra correctamente. En este caso, el canal permanecerá en el grupo y eventualmente se llenará.
Una forma de mitigar esto es tener suficiente capacidad y un breve tiempo de espera. Puede modificar la configuración en los ajustes de Django de la siguiente manera:
CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": REDIS_URL, # or where your redis server lives "capacity": 1500, # default 100 "expiry": 10, # default 60 } } }