Existe uma opção para balanceamento de carga com conjuntos de réplicas mongodb? Não estou pedindo um HAProxy ou similar, mas um recurso integrado do mongodb. Não foi possível encontrar dicas para isso nos documentos.
Existe uma opção para balanceamento de carga com conjuntos de réplicas mongodb? Não estou pedindo um HAProxy ou similar, mas um recurso integrado do mongodb. Não foi possível encontrar dicas para isso nos documentos.
Se você estiver usando fragmentação, o "balanceador de carga" é o processo mongos - na verdade, é mais como um roteador - ele mantém uma cópia na memória do banco de dados de configuração e pode tomar decisões com base na chave de fragmentação.
Se você quer dizer balanceamento de carga em conjuntos de réplicas idênticos ou entre os membros do conjunto, há uma solicitação de recurso para que os mongos lidem com esse cenário também ( https://jira.mongodb.org/browse/SERVER-1594 ), no entanto, dado como os drivers operam não é realmente necessário (no entanto, tornaria os drivers menos complexos).
Em um único conjunto de réplicas, você não pode distribuir gravações, todas elas devem ir para o primário. Você já pode distribuir as leituras para os secundários, por meio das Preferências de leitura , conforme julgar apropriado. O driver controla o que é primário e o que é secundário e encaminha as consultas adequadamente.
O 'balanceamento de carga' é obtido por meio de sharding. Ao fragmentar, você realmente distribui gravações/atualizações em fragmentos individuais. Não existe um algoritmo específico que faça isso, pois o mongo permitirá que você particione os dados com base em qualquer combinação de chave que desejar. Os melhores algoritmos de partição são aqueles que possuem um composto de entradas sequenciais mais uma entrada aleatória.
Por exemplo, um id de usuário pode ser particionado da seguinte forma
Esteja ciente de que, para implementar o sharding, você precisa ter três servidores de configuração e os nós de dados. Os nós de dados podem ser agrupados em conjuntos de réplicas para redundância e podem ser usados (somente se você puder) para ler dados de secundários. Digo apenas se você puder ler os dados porque a replicação é feita de forma assíncrona, então não há garantia de que os novos dados estarão disponíveis no momento da consulta nos secundários.
Lembre-se de que o algoritmo de partição depende totalmente de você e deve atender às necessidades do seu aplicativo. Além disso, você deve considerar se deseja apenas gravar os dados e apenas fazer leituras ocasionais ou se precisa lê-los logo após escrevê-los.