Moleculer tem várias estratégias de balanceamento de carga embutidas. Se um serviço estiver rodando em múltiplas instâncias de nós, o ServiceRegistry utiliza essas estratégias para selecionar um único nó entre os que estão disponíveis.
Estratégias integradas
Para configurar a estratégia, defina a propriedade strategy
que está contida em registry
nas configurações do broker. O valor pode ser um nome (em caso de estratégias incorporadas) ou uma classe Strategy
que herde de BaseStrategy
(em caso de estratégias personalizadas).
Estratégia RoundRobin
Esta estratégia seleciona um nó baseando-se no algoritmo round-robin.
Utilização
// moleculer.config.js |
Estratégia aleatória
Esta estratégia seleciona um nó aleatoriamente.
Utilização
// moleculer.config.js |
Estratégia baseada na CPU
Esta estratégia seleciona um nó que possui o menor uso de CPU. Uma vez que a lista de nós pode ser muito longa, a estratégia se baseia em amostragem, selecionando o nó com a menor utilização de CPU à partir da amostra verificada ao invés de verificar toda a lista de nós.
Utilização
// moleculer.config.js |
Opções da estratégia
Nome | Tipo | Valor padrão | Descrição |
---|---|---|---|
sampleCount |
Number |
3 |
O número de amostras. Para desativar a amostragem, defina como 0 . |
lowCpuUsage |
Number |
10 |
A porcentagem de uso da CPU (%). O nó que possuir utilização de CPU menor do que este valor é selecionado imediatamente. |
Uso com opções personalizadas
// moleculer.config.js |
Estratégia baseada em latência
Esta estratégia seleciona o nó que tem a mais baixa latência, medida por comandos de ping periódicos. Observe que essa estratégia somente pinga um nó / host. Uma vez que a lista de nós pode ser muito longa, a estratégia se baseia em amostragem, selecionando o nó com a menor latência à partir da amostra verificada ao invés de verificar toda a lista de nós.
Utilização
// moleculer.config.js |
Opções da estratégia
Nome | Tipo | Valor padrão | Descrição |
---|---|---|---|
sampleCount |
Number |
5 |
O número de amostras. Se você tem muitos hosts/nós, é recomendado aumentar esse valor. Para desativar a amostragem, defina como 0 . |
lowLatency |
Number |
10 |
A menor latência (ms). O nó que possuir latência menor do que este valor é selecionado imediatamente. |
collectCount |
Number |
5 |
O número de medições de latência por host para calcular a latência média. |
pingInterval |
Number |
10 |
Intervalo de ping em segundos. Se você tem muitos host/nós, é recomendado que aumente este valor. |
Uso com opções personalizadas
// moleculer.config.js |
Estratégia de sharding
A estratégia de sharding é baseada no algoritmo consistent-hashing. Utiliza um valor chave definido em params
ou meta
do contexto para rotear o pedido para os nós. Isto significa que pedidos com o mesmo valor chave serão encaminhados para o mesmo nó.
Exemplo de uma shard key name
em params
// moleculer.config.js |
Exemplo de uma shard key user.id
em meta
// moleculer.config.js |
Se a shard key estiver em
meta
ela deve ser declarada no início com um#
. O#
é ignorado e é utilizado apenas o valor que existe após ele.
Opções da estratégia
Nome | Tipo | Valor padrão | Descrição |
---|---|---|---|
shardKey |
String |
null |
Shard key |
vnodes |
Number |
10 |
Número de nós virtuais |
ringSize |
Number |
2^32 |
Tamanho do anel |
cacheSize |
Number |
1000 |
Tamanho do cache |
Todas as opções disponíveis na estratégia de Sharding
// moleculer.config.js |
Sobrescrever opções globais
Você pode sobrescrever a estratégia de balanceamento definida globalmente nas definições de ações/eventos.
Usando estratégia ‘Shard’ para a ação ‘hello’ ao invés da global ‘RoundRobin’
// moleculer.config.js |
Estratégia personalizada
Uma estratégia customizada pode ser criada. Recomendamos copiar o código fonte de RandomStrategy e implementar o método select
.
Criar estratégia personalizada
const BaseStrategy = require("moleculer").Strategies.Base; |
Usar estratégia personalizada
const { ServiceBroker } = require("moleculer"); |
Preferência por serviços locais
O ServiceBroker primeiro tenta chamar as instâncias locais do serviço (se existir) para reduzir as latências de rede. Significa que, se o serviço está disponível no brokerlocal, a estratégia configurada será ignorada e o broker chamará sempre o serviço local. Esta lógica pode ser desligada nas opções do broker com a propriedade preferLocal: false
abaixo da chave registry
.
// moleculer.config.js |