Tengo una aplicación .NET Core Azure Functions alojada en un plan de App Service. El plan está dedicado con un nivel de precios aislado. La aplicación Funciones tiene Always On
encendido. Por algún motivo, la aplicación tiene problemas para conectarse a la base de datos de Azure SQL. La base de datos se ejecuta en la misma región que la aplicación Functions y tiene un plan de tarifa Business Critical.
Veo en Application Insights que las llamadas a la API tardan unos segundos en finalizar porque la ruta del código está ocupada esperando obtener una conexión SQL. Las operaciones reales de la base de datos finalizan en milisegundos.
Ejecuté la aplicación localmente con las cadenas de conexión de la base de datos establecidas en las bases de datos de Azure SQL y no vi ningún retraso. Cada solicitud terminó en milisegundos. Luego creé una nueva aplicación de Azure Functions fuera del entorno de App Service existente con un plan de App Service dedicado. El resultado es el mismo, sin ningún retraso.
Pregunta
¿Alguien se ha enfrentado a este tipo de problema antes o tiene alguna idea de cuál puede ser el problema? ¿Hay alguna puerta de enlace de red utilizada por Azure App Service Environment que esté causando este problema?
PD Hay otras aplicaciones en App Service Environment que también enfrentan este problema, pero con menos solicitudes.
-
En realidad, no recibo muchos errores transitorios. El problema al que me enfrento es de unos 14 segundos de retraso para establecer la conexión con SQL Server. Había pensado en el retraso de reintento, pero no he establecido el valor de reintento de conexión en la cadena de conexión. Por lo tanto, el valor debe ser predeterminado. Entonces, incluso con el reintento inmediato, no debería llevar tanto tiempo establecer conexiones, ¿verdad? Y también este retraso solo ocurre en el entorno de servicio de aplicaciones. Albergé la misma aplicación fuera del entorno de App Service, pero con un plan básico de App Service. El retraso es en milisegundos allí.
– Asíful Nobel
25 de enero de 2022 a las 13:59
-
aun así, el problema persiste?
– Delliganesh Sevanesan
9 de febrero de 2022 a las 7:11
-
Descubrí que el retraso se debió a una alta latencia de DNS entre ASE y Azure SQL DB. Mis compañeros de equipo con experiencia en redes de Azure lo están investigando.
– Asíful Nobel
23 de febrero de 2022 a las 18:18
Realmente difícil de ayudar sin ver el código. Supongo que no está desechando correctamente la conexión/trabajando con un grupo de conexiones. Otra posible razón puede ser el uso de la operación síncrona que bloquea las conexiones.
– Thiago Custodio
21 de enero de 2022 a las 16:44
@ThiagoCustodio Yo también lo pensé al principio. Así que revisé las llamadas a la base de datos y no encontré nada de eso. estoy usando Biblioteca PetaPoco para llamadas a bases de datos. Todas las llamadas son síncronas. También verifiqué el código relevante de la biblioteca y descubrí que la conexión está cerrada en llamadas como Query, Execute por la propia biblioteca. Luego configuré el tamaño máximo del grupo de conexiones en 1 en la cadena de conexión y probé la aplicación. Pero no hay problema de TimeoutException o de respuesta lenta. ¿Puede ocurrir el bloqueo de la conexión debido a la operación de sincronización si la aplicación no tiene mucha carga?
– Asíful Nobel
21 de enero de 2022 a las 18:10
Además, el retraso siempre se fija en alrededor de 14 segundos.
– Asíful Nobel
21 de enero de 2022 a las 18:17
será mejor que instrumente la aplicación (usando información de la aplicación) intente averiguar dónde está el cuello de botella / por qué está colgando
– Thiago Custodio
21 de enero de 2022 a las 18:39
@ThiagoCustodio Ya lo hice y vi que las operaciones tardan demasiado. Porque está esperando para obtener una conexión. La creación de perfiles de Application Insights también me mostró lo mismo. SqlClient está esperando obtener una conexión. Pero esto no sucede fuera del entorno de App Service.
– Asíful Nobel
21 de enero de 2022 a las 18:49