2016-12-06 5 views
1

Каков наилучший алгоритм балансировки нагрузки для распределения входящих запросов по группе серверов? Я читал, что это такие алгоритмы, как Round Robin .., но я хотел бы узнать ваше мнение о том, какой из них лучше или, по крайней мере, самый используемый алгоритм.Лучший алгоритм балансировки нагрузки для распределения запросов по группе серверов?

Надеюсь, вы, ребята, можете мне помочь.

ответ

1

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

Одним простым подходом было бы просто иметь индекс обслуживания клиента i = hash (string)/N. Предполагая, что входная строка будет равномерно распределена в пространстве хеширования, это будет работать хорошо и очень легко реализовать.

Скажите по какой-то причине, что по какой-то причине строки не очень хорошо распределены в пространстве хеширования (может быть, много строк можно повторить, например). В этом случае вы можете использовать простой подход к округлению или случайному выбору индекса. Вы также можете иметь противодавление от серверов: например, если вызов RPC является синхронным, вы можете измерить на стороне клиента, сколько времени потребуется, а в случае строковой кодировки - по длине строка; если клиент отмечает, что это число растет, это, вероятно, означает, что служба не в состоянии идти в ногу со временем, и клиент может уменьшить трафик, который он отправляет такому клиенту. Это, очевидно, немного сложнее.

TLDR: Существует множество вариантов балансировки нагрузки, который является «лучшим», зависит от специфики масштабируемой проблемы.