Балансировка нагрузки
Балансировка нагрузки, в широком смысле, является одним из основных компонентов Orleans среды выполнения. Orleans среда выполнения пытается сделать все сбалансировано, так как балансировка позволяет максимально увеличить использование ресурсов и избежать хот-точек, что приводит к повышению производительности, а также помогает с эластичностью. Балансировка нагрузки применяется в Orleans нескольких местах. Ниже приведен неисчерпающий список мест, где среда выполнения выполняет балансировку:
- Стратегия размещения субъектов по умолчанию является случайной, новые активации размещаются случайным образом между оси. Это приводит к сбалансированному размещению и предотвращает горячие точки для большинства сценариев.
- Более сложный ActivationCountBasedPlacement способ пытается выравнивать количество активаций во всех силосах, что приводит к более равномерному распределению активаций между силосами. Это особенно важно для эластичности.
- Служба каталогов зерна построена на основе распределенной хэш-таблицы, которая изначально сбалансирована. Служба каталогов сопоставляет зерна с активациями, каждая из силосов владеет частью глобальной таблицы сопоставления, и эта таблица глобально секционируется в сбалансированном виде по всем силосам. Для этого мы используем согласованное хэширование с виртуальными контейнерами.
- Клиенты подключаются ко всем шлюзам и распределяют свои запросы по всем шлюзам в сбалансированном режиме.
- Служба напоминаний — это распределенная служба среды выполнения секционирования. Назначение которого silo отвечает за обслуживание, какое напоминание балансируется по всем силосам с помощью согласованного хэширования, как и в каталоге зерна.
- Критически важные компоненты производительности в хранилище секционируются, а работа между ними распределяется локально. Таким образом среда выполнения silo может полностью использовать все доступные ядра ЦП и не создавать узкие места в silo. Это относится ко всем локальным ресурсам: выделение работы потокам, сокетам, обязанностям по отправке, очередям и т. д.
- Балансирует QueueBalancerBase ответственность за извлечение событий из очередей сохраняемости в кластере.
Балансировка не обязательно означает потерю локальности. Можно сбалансировать и по-прежнему поддерживать хорошую локальную местности. Например, при балансировке означает сегментирование и секционирование, можно секционировать ответственность за определенную логическую задачу, сохраняя локальность в каждой секции. Это применимо как для локальной, так и распределенной балансировки.