Поделиться через


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

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

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

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