¿Existe una opción para equilibrar la carga con los conjuntos de réplica mongodb? No estoy pidiendo un HAProxy o similar, sino una característica incorporada de mongodb. No se encontraron consejos para esto en los documentos.
Si está utilizando el fragmentación, entonces el "equilibrador de carga" es el proceso mongos, en realidad es más como un enrutador, guarda una copia en la memoria de la base de datos de configuración y puede tomar decisiones basadas en la clave del fragmento.
Si se refiere al equilibrio de carga en conjuntos de réplicas idénticos o en los miembros del conjunto, existe una solicitud de función para que los mongos también manejen ese escenario ( https://jira.mongodb.org/browse/SERVER-1594 ), sin embargo cómo funcionan los controladores no es realmente necesario (aunque los controladores serían menos complejos).
En un solo conjunto de réplicas, no puede distribuir escrituras, todas deben ir a la primaria. Puede distribuir lecturas a las secundarias ya, a través de Preferencias de lectura según lo considere apropiado. El controlador realiza un seguimiento de lo que es primario y secundario y dirige las consultas de manera adecuada.
El 'equilibrio de carga' se logra mediante fragmentación. Al fragmentar, en realidad distribuye escrituras / actualizaciones en fragmentos individuales. No existe un algoritmo específico que haga esto, ya que mongo le permitirá particionar los datos en función de la combinación de teclas que desee. Los mejores algoritmos de partición son los que tienen un compuesto de entradas secuenciales más uno aleatorio.
Por ejemplo, una identificación de usuario se puede particionar de la siguiente manera
xx-sha1(user email)
xx = time sequence
Tenga en cuenta que para implementar el fragmentación necesita tener tres servidores de configuración y los nodos de datos. Los nodos de datos pueden agruparse en conjuntos de réplicas para redundancia y pueden usarse (solo si puede) para leer datos de secundarias. Digo solo si puede leer los datos porque la replicación se realiza de forma asíncrona, por lo que no hay garantía de que los nuevos datos estén disponibles en el momento de la consulta en las secundarias.
Tenga en cuenta que el algoritmo de partición depende totalmente de usted y debe adaptarse a las necesidades de su aplicación. También debe considerar si solo desea escribir los datos y solo en lecturas ocasionales o si necesita leerlos justo después de escribirlos.