Балансировка нагрузки

Балансировка нагрузки, в широком смысле, является одним из основных компонентов Orleans среды выполнения. Orleans среда выполнения пытается сделать все сбалансировано, так как балансировка позволяет максимально увеличить использование ресурсов и избежать хот-точек, что приводит к повышению производительности, а также помогает с эластичностью. Балансировка нагрузки применяется в Orleans нескольких местах. Ниже приведен неисчерпающий список мест, где среда выполнения выполняет балансировку:

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

Балансировка не обязательно означает потерю локальности. Можно сбалансировать и по-прежнему поддерживать хорошую локальную местности. Например, при балансировке означает сегментирование и секционирование, можно секционировать ответственность за определенную логическую задачу, сохраняя локальность в каждой секции. Это применимо как для локальной, так и распределенной балансировки.