Docs Menu
Docs Home
/ /
Semántica de lectura y guardado

Algoritmo de selección de servidor

Los controladores de MongoDB utilizan un algoritmo de selección de servidor para elegir qué miembro del conjunto de réplicas utilizar o, cuando se conecta a varios mongosinstancias, qué instancia mongos utilizar.

La selección del servidor se produce una vez por operación.

La información de esta página se aplica a las implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

Nota

Las transacciones distribuidas que contienen operaciones de lectura deben usar la preferencia de lectura primary. Todas las operaciones en una transacción dada deben dirigirse al mismo nodo.

La selección del servidor se realiza una vez por operación y se rige por la preferencia de lectura y la configuración localThresholdMS para determinar la elegibilidad de los miembros para las lecturas. La preferencia de lectura se reevalúa para cada operación.

Modo de preferencia de lectura
Proceso de selección

primary (por defecto)

  1. El conductor selecciona el primario.

  1. El controlador reúne una lista de miembros secundarios elegibles. LosmaxStalenessSeconds y los conjuntos de etiquetas especificados en la preferencia de lectura pueden restringir aún más la elegibilidad de los miembros.

  2. Si la lista de miembros elegibles no está vacía, el controlador determina cuál es el más cercano (es decir, el miembro con el menor tiempo promedio de ida y vuelta en la red) y calcula una ventana de latencia sumando el tiempo promedio de ida y vuelta de este servidor más cercano y el localThresholdMS. El controlador utiliza esta ventana de latencia para reducir la lista de miembros elegibles a aquellos que se encuentran dentro de ella.

  3. De esta lista de miembros elegibles que se encuentran dentro de la ventana de latencia, el conductor elige al azar un miembro elegible.

  1. El controlador reúne una lista de miembros elegibles (principales y secundarios). maxStalenessSeconds y los conjuntos de etiquetas especificados en la preferencia de lectura pueden limitar aún más la elegibilidad de los miembros.

  2. Si la lista de miembros elegibles no está vacía, el controlador determina cuál es el más cercano (es decir, el miembro con el menor tiempo promedio de ida y vuelta en la red) y calcula una ventana de latencia sumando el tiempo promedio de ida y vuelta de este servidor más cercano y el valor localThresholdMS 1[]. El controlador utiliza esta ventana de latencia para reducir la lista de miembros elegibles a aquellos que se encuentran dentro de ella.

  3. De esta lista de miembros elegibles que se encuentran dentro de la ventana de latencia, el conductor elige al azar un miembro elegible.

  1. Si el principal está disponible, el conductor lo selecciona.

  2. Si el servidor principal no está disponible, la selección del servidor sigue el proceso de la preferencia de lectura secondary para seleccionar un miembro secundario elegible.

  1. Después del proceso de selección del servidor para la preferencia de lectura secondary, si una lista de miembros secundarios elegibles no está vacía, el controlador elige un miembro secundario elegible.

  2. De lo contrario, si la lista está vacía, el controlador selecciona la principal.

Si hay más de una instanciamongosen la lista de conexiones, el controlador determina cuálmongoses la más cercana (es decir, el miembro con el menor tiempo promedio de ida y vuelta en la red) y calcula la ventana de latencia sumando el tiempo promedio de ida y vuelta de esta instanciamongosmás cercana y la localThresholdMS. El controlador equilibrará la carga aleatoriamente entre lasmongosinstancias que se encuentren dentro de la ventana de latencia.

En los clústeres fragmentados con fragmentos de conjuntosmongos de réplicas, aplica la preferencia de lectura al leer desde los fragmentos. La selección del servidor se rige por la preferencia de lectura replication.localPingThresholdMs y la configuración de. La preferencia de lectura se reevalúa en cada operación.

mongos soporta lecturas protegidas para los modos de preferencias de lectura no-primary. Es decir, mongos puede enviar una lectura adicional a otro miembro, si está disponible, para proteger la operación de lectura si se utilizan preferencias de lectura no-primary. La lectura adicional enviada para asegurar la operación de lectura utiliza el valor maxTimeMS de maxTimeMSForHedgedReads.

Las lecturas protegidas se admiten para las siguientes operaciones:

Para utilizar lecturas protegidas:

Modo de preferencia de lectura
Proceso de selección

primary (por defecto)

  1. El selecciona el mongos primario.

  1. mongos reúne una lista de miembros secundarios elegibles. maxStalenessSeconds y los conjuntos de etiquetas especificados en la preferencia de lectura pueden restringir aún más la elegibilidad de los miembros.

  2. Si la lista de miembros elegibles no está vacía,mongos determina cuál es el miembro elegible más cercano (es decir, el miembro con el menor tiempo promedio de ida y vuelta en la red) y calcula una ventana de latencia sumando el tiempo promedio de ida y vuelta de este servidor más cercano y replication.localPingThresholdMs (o --localThreshold la opción de línea de comandos). utiliza esta ventana de latencia para reducir la lista de miembros elegibles a aquellos que se encuentran dentro de mongos ella.

  3. De esta lista de miembros elegibles que se encuentran dentro de la ventana de latencia,mongos selecciona aleatoriamente un miembro elegible. mongos Si se utilizan lecturas protegidas, selecciona un segundo miembro elegible si está disponible.

  1. mongos reúne una lista de miembros elegibles (principales y secundarios). maxStalenessSeconds y los conjuntos de etiquetas especificados en la preferencia de lectura pueden limitar aún más la elegibilidad de los miembros.

  2. Si la lista de miembros elegibles no está vacía,mongos determina cuál es el miembro elegible más cercano (es decir, el miembro con el menor tiempo promedio de ida y vuelta en la red) y calcula una ventana de latencia sumando el tiempo promedio de ida y vuelta de este servidor más cercano y replication.localPingThresholdMs (o --localThreshold la opción de línea de comandos) [].1 mongos utiliza esta ventana de latencia para reducir la lista de miembros elegibles a aquellos que se encuentran dentro de ella.

  3. De esta lista de miembros elegibles que se encuentran dentro de la ventana de latencia,mongos selecciona aleatoriamente un miembro elegible. mongos Si se utilizan lecturas protegidas, selecciona un segundo miembro elegible si está disponible.

  1. Si el principal está disponible, selecciona elmongos principal.

  2. Si el servidor principal no está disponible o si mongos utiliza lecturas protegidas, la selección del servidor sigue el proceso de la preferencia de secondary lectura. Para las lecturas protegidas,

    • Si la primaria está disponible, mongos selecciona una única secundaria elegible, si está disponible.

    • Si el primario no está disponible, mongos selecciona dos secundarios elegibles, si están disponibles.

  1. Después del proceso de selección del servidor para la preferencia de lectura secondary, si la lista de miembros secundarios elegibles no está vacía, mongos elige un secundario elegible. Si se están utilizando lecturas protegidas, mongos selecciona otro secundario si está disponible.

  2. Si la lista de miembros secundarios elegibles está vacía o si está usando lecturas cubiertas y mongos mongos solo hay un secundario elegible disponible, selecciona el principal.

[1](,1 2) El valor de umbral predeterminado es 15 milisegundos.

Volver

Lecturas protegidas

En esta página