Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Las sugerencias de rendimiento de este artículo son solo para la versión 4 del SDK de Java de Azure Cosmos DB. Consulte las notas de la versión del SDK de Java v4 de Azure Cosmos DB, el repositorio de Maven y la guía de solución de problemas del SDK de Java v4 de Azure Cosmos DB para más información. Si actualmente usa una versión anterior a la v4, consulte la guía Migración al SDK de Java de Azure Cosmos DB v4 para obtener ayuda con la actualización a la versión 4.
Azure Cosmos DB es una base de datos distribuida rápida y flexible que se escala sin problemas con una latencia y un rendimiento garantizados. No es necesario realizar cambios de arquitectura importantes ni escribir el código complejo para escalar la base de datos con Azure Cosmos DB. Escalar y reducir verticalmente es tan sencillo como realizar una única llamada API o una llamada al método SDK. Sin embargo, dado que se accede a Azure Cosmos DB a través de llamadas de red, hay configuraciones de conexión que puede optimizar para lograr un rendimiento máximo al usar el SDK de Java de Azure Cosmos DB v4.
Configuración de conexión
Nota:
En el SDK de Java v4 de Azure Cosmos DB, el modo directo es la mejor opción para mejorar el rendimiento de la base de datos con la mayoría de las cargas de trabajo.
Para obtener más información sobre las distintas opciones de conectividad, consulte el artículo Modos de conectividad.
Modo de conexión directa
El modo de conexión predeterminado del SDK de Java es directo. Las solicitudes de modo directo de Azure Cosmos DB se realizan a través de TCP cuando se usa el SDK de Java de Azure Cosmos DB v4. El modo directo interno usa una arquitectura especial para administrar dinámicamente los recursos de red y obtener el mejor rendimiento. La arquitectura del lado cliente empleada en modo directo permite el uso predecible de la red y el acceso multiplexado a las réplicas de Azure Cosmos DB. Para más información sobre la arquitectura, consulte la arquitectura de conexión en modo directo.
Puede configurar el modo de conexión en el generador de clientes mediante el método directMode() como se muestra aquí. Para configurar el modo directo con los valores predeterminados, llame al directMode() método sin argumentos. Para personalizar la configuración de conexión del modo directo, pase DirectConnectionConfig a la directMode() API.
API asincrónica del SDK para Java V4 (Maven com.azure::azure-cosmos)
/* Direct mode, default settings */
CosmosAsyncClient clientDirectDefault = new CosmosClientBuilder()
.endpoint(HOSTNAME)
.key(MASTERKEY)
.consistencyLevel(CONSISTENCY)
.directMode()
.buildAsyncClient();
/* Direct mode, custom settings */
DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();
// Example config, do not use these settings as defaults
directConnectionConfig.setMaxConnectionsPerEndpoint(130);
directConnectionConfig.setIdleConnectionTimeout(Duration.ZERO);
CosmosAsyncClient clientDirectCustom = new CosmosClientBuilder()
.endpoint(HOSTNAME)
.key(MASTERKEY)
.consistencyLevel(CONSISTENCY)
.directMode(directConnectionConfig)
.buildAsyncClient();
/* Gateway mode, default settings */
CosmosAsyncClient clientGatewayDefault = new CosmosClientBuilder()
.endpoint(HOSTNAME)
.key(MASTERKEY)
.consistencyLevel(CONSISTENCY)
.gatewayMode()
.buildAsyncClient();
/* Gateway mode, custom settings */
GatewayConnectionConfig gatewayConnectionConfig = GatewayConnectionConfig.getDefaultConfig();
// Example config, do not use these settings as defaults
gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.HTTP, InetSocketAddress.createUnresolved("your.proxy.addr",80)));
gatewayConnectionConfig.setMaxConnectionPoolSize(1000);
CosmosAsyncClient clientGatewayCustom = new CosmosClientBuilder()
.endpoint(HOSTNAME)
.key(MASTERKEY)
.consistencyLevel(CONSISTENCY)
.gatewayMode(gatewayConnectionConfig)
.buildAsyncClient();
/* No connection mode, defaults to Direct mode with default settings */
CosmosAsyncClient clientDefault = new CosmosClientBuilder()
.endpoint(HOSTNAME)
.key(MASTERKEY)
.consistencyLevel(CONSISTENCY)
.buildAsyncClient();
Personalización del modo de conexión directa
Si se desea un comportamiento de modo directo no predeterminado, cree una instancia de DirectConnectionConfig y personalice sus propiedades, pase la instancia de propiedad personalizada al método directMode() en el generador de clientes de Azure Cosmos DB.
Estas opciones de configuración controlan el comportamiento de la arquitectura del modo directo subyacente que se ha descrito anteriormente.
Como primer paso, use aquí los siguientes valores de configuración recomendados. Estas opciones de DirectConnectionConfig son opciones de configuración avanzadas, que pueden afectar al rendimiento del SDK de maneras inesperadas; recomendamos que los usuarios eviten modificarlos a menos que se sientan cómodos al comprender los inconvenientes y es necesario. Póngase en contacto con el equipo de Azure Cosmos DB si tiene problemas en este tema concreto.
| Opción de configuración | Predeterminado | Recommended | Detalles |
|---|---|---|---|
| idleConnectionTimeout | "PT0" (CERO) | "PT0" (CERO) | Esto representa la duración del tiempo de espera de la conexión inactiva para una sola conexión a un nodo de extremo o backend (que representa una réplica). De forma predeterminada, el SDK no cierra automáticamente las conexiones inactivas a los nodos de back-end. |
| idleEndpointTimeout | "PT1H" | "PT1H" | Esto indica la duración del tiempo de espera de conexión inactiva para el grupo de conexiones de un nodo de punto de conexión o nodo back-end (que representa una réplica). De forma predeterminada, si no hay solicitudes entrantes a un nodo específico de punto de conexión o back-end, el SDK cerrará todas las conexiones del grupo de conexiones a ese nodo de punto de conexión o back-end después de 1 hora para ahorrar recursos de red y costo de E/S. Para el patrón de tráfico disperso o esporádico, se recomienda establecer este valor en un número mayor, como 6 horas, 12 horas o incluso 24 horas, para que el SDK no tenga que abrir las conexiones con frecuencia. Sin embargo, esto utiliza los recursos de red y tendrá un mayor número de conexiones abiertas en un momento dado. Si se establece en CERO, la comprobación del punto de conexión inactivo está deshabilitada. |
| máximoConexionesPorEndpoint | "130" | "130" | Esto representa el tamaño de límite superior del grupo de conexiones para un nodo de punto de conexión o back-end (que representa una réplica). EL SDK crea conexiones al nodo de punto de conexión o back-end a petición y en función de las solicitudes simultáneas entrantes. De forma predeterminada, si es necesario, el SDK crea un máximo de 130 conexiones a un nodo de punto de conexión o back-end. (NOTA: EL SDK no crea estas 130 conexiones por adelantado). |
| máximoSolicitudesPorConexión | 30 | 30 | Esto representa el límite superior del tamaño del número máximo de solicitudes que se pueden poner en cola en una sola conexión para un nodo de backend o un punto de conexión específico (que representa una réplica). SDK pone en cola las solicitudes a una única conexión a un nodo de punto de conexión o back-end a petición y en función de las solicitudes simultáneas entrantes. De forma predeterminada, si es necesario, el SDK pone en cola un máximo de 30 solicitudes a una sola conexión para un nodo de back-end o un punto de conexión específico. (NOTA: el SDK no pone en cola estas 30 solicitudes a una sola conexión por adelantado). |
| connectTimeout | "PT5S" | "~PT1S" | Esto representa la duración del tiempo de espera del establecimiento de la conexión para establecer una conexión única con un nodo de punto final/back-end. De forma predeterminada, el SDK espera un máximo de 5 segundos para el establecimiento de la conexión antes de producir un error. El establecimiento de conexiones TCP usa un handshake de varios pasos, lo que aumenta la latencia del inicio de la conexión, por lo que se recomienda a los clientes establecer este valor según su ancho de banda de la red y el entorno. NOTA: Esta recomendación de ~PT1S solo es para las aplicaciones implementadas en regiones colocadas de sus cuentas de Cosmos DB. |
| networkRequestTimeout | "PT5S" | "PT5S" | Esto representa la duración del tiempo de espera de red para una sola solicitud. El SDK esperará como máximo este tiempo para recibir una respuesta del servicio después de que la solicitud se haya enviado a través de la conexión de red. EL SDK solo permite valores entre 1 segundo (min) y 10 segundos (máximo). Establecer un valor demasiado alto puede resultar en un menor número de reintentos y disminuir las probabilidades de éxito mediante reintentos. |
Modo de conexión de puerta de enlace
Las operaciones del plano de control, como CRUD de bases de datos y contenedores, siempre usan el modo de puerta de enlace. Incluso cuando el usuario ha configurado el modo directo para las operaciones del plano de datos, las operaciones de plano de control y metadatos usan la configuración predeterminada del modo de puerta de enlace. Esto se adapta a la mayoría de los usuarios. Sin embargo, los usuarios que desean el modo Directo para las operaciones del plano de datos y la tunabilidad de parámetros del modo de puerta de enlace del plano de control pueden usar la siguiente anulación directMode():
API asincrónica del SDK para Java V4 (Maven com.azure::azure-cosmos)
/* Independent customization of Direct mode data plane and Gateway mode control plane */
DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();
// Example config, do not use these settings as defaults
directConnectionConfig.setMaxConnectionsPerEndpoint(130);
directConnectionConfig.setIdleConnectionTimeout(Duration.ZERO);
GatewayConnectionConfig gatewayConnectionConfig = GatewayConnectionConfig.getDefaultConfig();
// Example config, do not use these settings as defaults
gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.HTTP, InetSocketAddress.createUnresolved("your.proxy.addr",80)));
gatewayConnectionConfig.setMaxConnectionPoolSize(1000);
CosmosAsyncClient clientDirectCustom = new CosmosClientBuilder()
.endpoint(HOSTNAME)
.key(MASTERKEY)
.consistencyLevel(CONSISTENCY)
.directMode(directConnectionConfig,gatewayConnectionConfig)
.buildAsyncClient();
Personalización del modo de conexión del gateway
Si se desea el comportamiento del modo de puerta de enlace no predeterminado, cree una instancia de GatewayConnectionConfig, personalice sus propiedades y luego pase la instancia personalizada al método de sobrecarga directMode() o al método gatewayMode() en el generador de clientes de Azure Cosmos DB.
Como primer paso, use aquí los siguientes valores de configuración recomendados. Estas opciones gatewayConnectionConfig son opciones de configuración avanzadas, lo que puede afectar al rendimiento del SDK de maneras inesperadas; recomendamos que los usuarios eviten modificarlos a menos que se sientan cómodos al comprender los inconvenientes y es necesario. Póngase en contacto con el equipo de Azure Cosmos DB si tiene problemas en este tema concreto.
| Opción de configuración | Predeterminado | Recommended | Detalles |
|---|---|---|---|
| tamañoMáximoDelPoolDeConexiones | "1000" | "1000" | Esto representa el tamaño de límite superior del tamaño del grupo de conexiones para el cliente http subyacente, que es el número máximo de conexiones que crea el SDK para las solicitudes que van al modo de puerta de enlace. El SDK reutiliza estas conexiones al enviar solicitudes a la puerta de enlace. |
| idleConnectionTimeout | "PT60S" | "PT60S" | Esto representa la duración del tiempo de espera para conexión inactiva de una sola conexión al Gateway. Después de este tiempo, la conexión se cerrará automáticamente y se quitará del grupo de conexiones. |
Pasos siguientes
Para más información sobre las sugerencias de rendimiento para el SDK de Java, consulte Sugerencias de rendimiento para el SDK de Java v4 de Azure Cosmos DB.
Para más información sobre cómo diseñar la aplicación para escalarla y obtener un alto rendimiento, consulte Partición y escalado en Azure Cosmos DB.
¿Está intentando hacer la planificación de capacidad para una migración a Azure Cosmos DB? Puede utilizar información sobre su clúster de bases de datos existente para la planificación de capacidad.
- Si lo único que sabe es el número de núcleos virtuales y servidores del clúster de bases de datos existente, consulte la información sobre el cálculo de unidades de solicitud mediante núcleos virtuales o CPU virtuales.
- Si conoce las tasas de solicitudes típicas de la carga de trabajo de la base de datos actual, obtenga información sobre el cálculo de unidades de solicitud mediante la herramienta de planeamiento de capacidad de Azure Cosmos DB.