Existe-t-il une option pour l'équilibrage de charge avec les jeux de répliques mongodb? Je ne demande pas un HAProxy ou similaire, mais une fonctionnalité intégrée de mongodb. Impossible de trouver des conseils à ce sujet dans la documentation.
Si vous utilisez le partitionnement, le "load balancer" est le processus mongos - en fait, il ressemble plus à un routeur - il conserve une copie en mémoire de la base de données de configuration et peut prendre des décisions en fonction de la clé de partition.
Si vous voulez dire l'équilibrage de charge sur des jeux de répliques identiques ou sur les membres de l'ensemble, il y a une demande de fonctionnalité pour que les mongos gèrent également ce scénario ( https://jira.mongodb.org/browse/SERVER-1594 ), quelle que soit la manière le fonctionnement des pilotes n'est pas vraiment nécessaire (cela rendrait les pilotes moins complexes cependant).
Dans un seul jeu de réplicas, vous ne pouvez pas distribuer d'écritures, elles doivent toutes aller au primaire. Vous pouvez déjà distribuer les lectures aux secondaires, via les préférences de lecture si vous le jugez approprié. Le pilote garde une trace de ce qui est un primaire et de ce qui est un secondaire et achemine les requêtes de manière appropriée.
L''équilibrage de charge 'est réalisé via le sharding. En partitionnant, vous distribuez en fait des écritures / mises à jour sur des fragments individuels. Il n'y a pas d'algorithme spécifique qui le fasse, car mongo vous permettra de partitionner les données en fonction de la combinaison de clés que vous souhaitez. Les meilleurs algorithmes de partition sont ceux qui ont un composé d'entrées séquentielles plus un aléatoire.
Par exemple, un ID utilisateur peut être partitionné comme suit
xx-sha1(user email)
xx = time sequence
Sachez que pour implémenter le partage, vous devez disposer de trois serveurs de configuration et des nœuds de données. Les nœuds de données peuvent être regroupés en jeux de réplicas pour la redondance et peuvent être utilisés (uniquement si vous le pouvez) pour lire les données des secondaires. Je dis seulement si vous pouvez lire les données parce que la réplication est effectuée de manière asynchrone, donc aucune garantie que les nouvelles données seront disponibles au moment de la requête sur les secondaires.
Gardez à l'esprit que l'algorithme de partition dépend entièrement de vous et devrait répondre aux besoins de votre application. Vous devriez également considérer si vous voulez simplement écrire les données et seulement avoir des lectures occasionnelles ou si vous devez les lire juste après les avoir écrites.