Overview
En esta guía, puedes aprender cómo el driver Go utiliza pools de conexiones para gestionar las conexiones con una implementación de MongoDB y cómo puedes configurar la configuración del pool de conexiones en tu aplicación.
Un pool de conexiones es un caché de conexiones de base de datos abiertas, mantenido por el controlador de Go. Cuando su aplicación solicita una conexión a MongoDB, el controlador de Go obtiene una conexión del pool sin problemas, realiza operaciones y la devuelve al pool para su reutilización.
Los pools de conexiones ayudan a reducir la latencia de la aplicación y el número de veces que se crean nuevas conexiones mediante el driver Go.
Crear un grupo de conexiones
Cada Client La instancia tiene un grupo de conexiones integrado para cada servidor en su topología de MongoDB. Si no configura la opción minPoolSize, los grupos de conexiones abren sockets bajo demanda. Estos sockets admiten operaciones simultáneas de MongoDB, o goroutines, en tu aplicación.
Cuando se instancia una nueva instancia de Client, se abren dos sockets por servidor en tu topología de MongoDB para supervisar el estado del servidor.
Por ejemplo, un cliente conectado a un conjunto de réplicas de tres nodos abre seis sockets de monitorización. Si la aplicación usa la configuración predeterminada para maxPoolSize y solo consulta el nodo principal (predeterminado), puede haber como máximo 106 sockets abiertos y 100 conexiones en el grupo de conexiones. Si la aplicación usa un preferencia de lectura para consultar los nodos secundarios, sus grupos también crecen y puede haber 306 conexiones en total.
Para mayor eficiencia, crea un cliente para cada proceso y reutilízalo en todas las operaciones. Evite crear un nuevo cliente para cada solicitud porque esto aumentará la latencia.
Si los sockets se cierran debido a errores de red, lo que provoca que el número total de sockets (tanto en uso como inactivos) caiga por debajo del mínimo, se abren más sockets hasta que se alcanza el mínimo.
Configura un pool de conexiones
Puedes especificar la configuración de tu pool de conexión utilizando una cadena de conexión o los métodos options.Client.
Selecciona el Connection String o ClientOptions pestaña para ver la sintaxis correspondiente:
Las siguientes son configuraciones de cadenas de conexión que puedes usar para configurar tu pool de conexiones:
Configuración | Descripción |
|---|---|
| Número máximo de conexiones abiertas en el pool. Si una operación necesita una nueva conexión mientras el pool tiene Por defecto: |
| Número mínimo de conexiones abiertas en el pool. El pool de conexiones se inicializa con este número de sockets. El valor de Por defecto: |
| Número máximo de conexiones que un pool puede establecer de manera simultánea. Por defecto: |
| El número máximo de milisegundos que una conexión puede permanecer inactiva en el pool antes de ser eliminada y cerrada. Configure este valor por encima del tiempo de inactividad esperado de su aplicación, pero por debajo de los tiempos de espera de conexión del firewall o proxy para evitar desconexiones inesperadas. Por defecto: |
| Especifica el tiempo máximo de espera en milisegundos que un subproceso puede esperar hasta que una conexión esté disponible. Una operación que espera un socket durante más tiempo del especificado genera un error de conexión. Default: |
La siguiente tabla describe los métodos que puedes encadenar a tu configuración para modificar el comportamiento del driver:
Configuración | Descripción |
|---|---|
| Número máximo de conexiones abiertas en el grupo. Si una operación necesita una nueva conexión mientras el pool de conexiones tiene el máximo de conexiones configurado abiertas, la nueva operación esperará a que se abra una nueva conexión. Para limitar este tiempo de espera, utilice la configuración de tiempo de espera único. Por defecto: |
| Número mínimo de conexiones abiertas en el pool. El valor de Por defecto: |
| Número máximo de conexiones que un pool puede establecer de manera simultánea. Por defecto: |
| El número máximo de milisegundos que una conexión puede permanecer inactiva en el pool antes de ser eliminada y cerrada. Por defecto: |
Ejemplo
Selecciona la pestaña Connection String o ClientOptions para ver el ejemplo correspondiente:
Optimizar los grupos de conexiones
Los grupos de conexiones tienen una tasa limitada, de modo que cada uno solo puede crear, como máximo, maxConnecting conexiones en paralelo en cualquier momento. Cualquier nueva goroutine deja de esperar en los siguientes casos:
Una de las goroutines existentes termina de crear una conexión, o una conexión existente se registra de nuevo en el pool.
La capacidad del controlador para reutilizar conexiones existentes mejora debido a los límites de velocidad en la creación de conexiones.
El controlador no limita el número de operaciones que pueden esperar a que los sockets estén disponibles, por lo que es responsabilidad de la aplicación administrar su cola de operaciones. Las operaciones pueden esperar cualquier cantidad de tiempo, a menos que defina la opción waitQueueTimeoutMS.
Una operación que espera más del tiempo definido por waitQueueTimeoutMS para un socket genera un error de conexión. Utilice esta opción si es más importante limitar la duración de las operaciones durante un pico de carga que completar cada operación.
Desconectando
Cuando llamas a Client.Disconnect() desde cualquier goroutine, el controlador cierra todos los sockets inactivos, y luego cierra todos los sockets a medida que se devuelven al pool.
Información Adicional
Para más información sobre el uso de un pool de conexiones, consulta la documentación de la pool de conexiones en el manual de servidor.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: