Sin la reutilización de conexiones, cada llamada a la API abre una nueva conexión TCP y realiza un protocolo de enlace TLS, lo que añade latencia. En escenarios de alta concurrencia, esta sobrecarga provoca tiempos de espera y desperdicio de recursos. La reutilización de conexiones elimina la configuración repetida, reduciendo la latencia y el consumo de recursos.
El SDK de DashScope admite la reutilización de conexiones tanto en Java como en Python:
Antes de ejecutar los ejemplos de código:
El SDK de Java incluye un grupo de conexiones integrado habilitado de forma predeterminada. Ajuste las configuraciones de conexiones máximas y tiempos de espera para optimizar su carga de trabajo.
Restricciones de parámetros:
El siguiente ejemplo configura los parámetros del grupo de conexiones (tiempo de espera, conexiones máximas) y llama a un servicio de modelo. Ajuste los parámetros para optimizar la concurrencia y el uso de recursos.
El SDK de Python admite la reutilización de conexiones al pasar un cliente HTTP personalizado (
Para escenarios asíncronos, use
El siguiente ejemplo configura la reutilización de conexiones y llama a un servicio de modelo de forma asíncrona:
Para escenarios síncronos, use
El siguiente ejemplo configura la reutilización de conexiones y llama a un servicio de modelo de forma síncrona:
Para reutilizar un cliente HTTP en múltiples llamadas:
Si una llamada al modelo falla (el SDK de Python lanza una excepción
- SDK de Java: Un grupo de conexiones integrado está habilitado de forma predeterminada. Configure parámetros como el máximo de conexiones y los tiempos de espera.
- SDK de Python: Habilite la reutilización de conexiones pasando un cliente HTTP personalizado. Admite llamadas síncronas y asíncronas.
Antes de comenzar
Antes de ejecutar los ejemplos de código:
SDK de Java
El SDK de Java incluye un grupo de conexiones integrado habilitado de forma predeterminada. Ajuste las configuraciones de conexiones máximas y tiempos de espera para optimizar su carga de trabajo.
Parámetros
| Parámetro | Descripción | Valor predeterminado | Unidad |
|---|---|---|---|
| connectTimeout | Tiempo de espera de establecimiento de conexión. | 120 | segundos |
| readTimeout | Tiempo de espera de lectura de datos. | 300 | segundos |
| writeTimeout | Tiempo de espera de escritura de datos. | 60 | segundos |
| connectionIdleTimeout | Tiempo de espera de conexión inactiva en el pool. | 300 | segundos |
| connectionPoolSize | Número máximo de conexiones en el pool. | 32 | conexiones |
| maximumAsyncRequests | Número máximo de solicitudes simultáneas en todos los hosts (límite global). | 32 | solicitudes |
| maximumAsyncRequestsPerHost | Número máximo de solicitudes simultáneas por host. | 32 | solicitudes |
maximumAsyncRequestsdebe ser ≤connectionPoolSize; de lo contrario, las solicitudes podrían bloquearse.maximumAsyncRequestsPerHostdebe ser ≤maximumAsyncRequests.
- connectTimeout: En escenarios de baja latencia, establezca un tiempo de espera más corto para reducir el tiempo de espera.
- connectionIdleTimeout: En escenarios de alta concurrencia, extienda el tiempo de espera de inactividad para evitar la creación frecuente de conexiones y reducir el consumo de recursos.
- connectionPoolSize: En escenarios de alta concurrencia, muy pocas conexiones causan bloqueos, tiempos de espera y reconexiones frecuentes (mayor uso de recursos). Demasiadas conexiones sobrecargan el servidor. Equilibre el recuento de conexiones según su carga de trabajo.
Ejemplo de código
El siguiente ejemplo configura los parámetros del grupo de conexiones (tiempo de espera, conexiones máximas) y llama a un servicio de modelo. Ajuste los parámetros para optimizar la concurrencia y el uso de recursos.
SDK de Python
El SDK de Python admite la reutilización de conexiones al pasar un cliente HTTP personalizado (httpx.Client / httpx.AsyncClient). Admite dos métodos de llamada: HTTP asíncrono (basado en corrutinas) y HTTP síncrono.
HTTP asíncrono
Para escenarios asíncronos, use httpx.AsyncClient junto con httpx.Limits para habilitar la reutilización de conexiones. httpx.Limits admite la configuración de parámetros como límites de conexiones:
| Parámetro | Descripción | Valor predeterminado | Notas |
|---|---|---|---|
| max_connections | Límite total de conexiones. | None (ilimitado) | Controla el número máximo de conexiones. En escenarios de alta concurrencia, aumente este valor para mejorar la concurrencia. |
| max_keepalive_connections | Número máximo de conexiones keep-alive. | None (ilimitado) | Controla el número de conexiones activas que se mantienen en el grupo, evitando una carga excesiva en un solo servidor. |
| keepalive_expiry | Tiempo de espera keep-alive de las conexiones. | 5.0 (segundos) | Las conexiones keep-alive inactivas se cierran automáticamente transcurrida esta duración. |
Ejemplo de código
El siguiente ejemplo configura la reutilización de conexiones y llama a un servicio de modelo de forma asíncrona:
HTTP síncrono
Para escenarios síncronos, use httpx.Client para habilitar la reutilización de conexiones. Múltiples solicitudes dentro del mismo cliente HTTP reutilizan la conexión TCP subyacente, evitando la sobrecarga de establecer conexiones repetidamente.
Ejemplo de código: llamada única
El siguiente ejemplo configura la reutilización de conexiones y llama a un servicio de modelo de forma síncrona:
Ejemplo de código: múltiples llamadas con un cliente HTTP compartido
Para reutilizar un cliente HTTP en múltiples llamadas:
Mejores prácticas
- SDK de Java: Establezca
connectionPoolSizeymaximumAsyncRequestssegún su carga de trabajo. Equilibre el recuento de conexiones: muy pocas causan bloqueos, demasiadas sobrecargan el servidor. - SDK de Python: Utilice la sentencia
withpara gestionar automáticamente el ciclo de vida del cliente HTTP y garantizar la limpieza correcta de recursos. - Elija el método adecuado: Use llamadas asíncronas para aplicaciones asíncronas (asyncio, FastAPI). Use llamadas síncronas para aplicaciones síncronas tradicionales.
Códigos de error
Si una llamada al modelo falla (el SDK de Python lanza una excepción DashScopeError y las llamadas HTTP devuelven un mensaje de error), consulte Mensajes de error para resolver el problema.