Moleculer имеет несколько встроенных стратегий балансировки нагрузки. Если сервис запущен в нескольких экземплярах на разных узлах, ServiceRegistry использует эти стратегии для выбора одного из доступных узлов.
Доступные стратегии
Чтобы настроить стратегию, необходимо в файле конфигурации брокера указать свойство strategy
в объекте registry
. Это может быть либо именем (в случае доступных стратегий) или Strategy
классом, который унаследован от BaseStrategy
(в случае пользовательских стратегий).
Стратегия RoundRobin
Эта стратегия выбирает узел на основе алгоритма round-robin.
Использование
// moleculer.config.js |
Случайная стратегия
Эта стратегия случайно выбирает узел.
Использование
// moleculer.config.js |
Стратегия по нагрузке CPU
Эта стратегия выбирает узел с менее загруженным процессором. Поскольку список узлов может быть очень длинным, то брокер получает измерения и выбирает узел с наименьшей загруженностью процессора только из имеющихся данных, а не всего списка узлов.
Использование
// moleculer.config.js |
Настройки
Название | Тип | По умолчанию | Описание |
---|---|---|---|
sampleCount |
Number |
3 |
Количество измерений. Чтобы выключить, установите 0 . |
lowCpuUsage |
Number |
10 |
Процент загруженности процессора (%). Минимальный порог при котором узел будет выбран незамедлительно. |
Использование с пользовательскими настройками
// moleculer.config.js |
Стратегия по времени отклика
Эта стратегия выбирает узел, который имеет самую низкую задержку, измеряемую периодическими командами ping. Обратите внимание, что данная стратегия позволяет опрашивать только один узел / хост. Поскольку список узлов может быть очень длинным, то брокер получает измерения и выбирает узел с наименьшей задержкой только из имеющихся данных, а не всего списка узлов.
Использование
// moleculer.config.js |
Настройки
Название | Тип | По умолчанию | Описание |
---|---|---|---|
sampleCount |
Number |
5 |
Количество измерений. Если у вас много хостов/узлов, рекомендуется увеличить значение. Чтобы выключить, установите 0 . |
lowLatency |
Number |
10 |
Минимальная задержка (мс). Минимальный порог при котором узел будет выбран незамедлительно. |
collectCount |
Number |
5 |
Количество измерений задержки на каждый хост для расчета средней задержки. |
pingInterval |
Number |
10 |
Интервал пинга в секундах. Если у вас много хостов/узлов, рекомендуется увеличить значение. |
Использование с пользовательскими настройками
// moleculer.config.js |
Стратегия шардирования
Стратегия поиска шарда основана на алгоритме согласованного хеширования. Он использует значение ключа из контекста params
или meta
для распределения запросов между узлами. Это означает, что запросы с одним значением ключа будут отправлены на один и тот же узел.
Пример ключа шардирования name
в контексте params
// moleculer.config.js |
Пример ключа шардирования user.id
в контексте meta
// moleculer.config.js |
Если ключ шардирования находится в контексте
meta
, то он должен начинаться с символа#
. Символ#
игнорируется.
Настройки шардирования
Название | Тип | По умолчанию | Описание |
---|---|---|---|
shardKey |
String |
null |
Ключ шардирования |
vnodes |
Number |
10 |
Количество виртуальных узлов |
ringSize |
Number |
2^32 |
Размер кольца |
cacheSize |
Number |
1000 |
Размер кэша |
Все доступные настройки стратегии шардирования
// moleculer.config.js |
Переопределение глобальных параметров
Вы можете переопределить глобально заданную стратегию балансировки внутри методов действий или событий.
Использование стратегии ‘Shard’ для действия ‘hello’ вместо глобального ‘RoundRobin’
// moleculer.config.js |
Своя стратегия
Можно создать свою стратегию. Мы рекомендуем использовать исходный код RandomStrategy и использовать метод select
.
Создание собственной стратегии
const BaseStrategy = require("moleculer").Strategies.Base; |
Использование собственной стратегии
const { ServiceBroker } = require("moleculer"); |
Preferring local services
ServiceBroker сначала пытается вызвать локальные экземпляры сервиса (если существует) для уменьшения задержки сети. It means, if the given service is available on the local broker, the configured strategy will be skipped and the broker will call the local service always. This logic can be turned off in broker options with preferLocal: false
property under the registry
key.
// moleculer.config.js |