Ответ: это зависит. наилучшая балансировка нагрузки достигается при рассмотрении нескольких факторов, характерных для службы. Например, скажем, у вас есть служба, которая предоставляет API для кодирования строки, где кодировка зависит исключительно от содержимого строки. У вас есть N реплик работающей службы.
Одним простым подходом было бы просто иметь индекс обслуживания клиента i = hash (string)/N. Предполагая, что входная строка будет равномерно распределена в пространстве хеширования, это будет работать хорошо и очень легко реализовать.
Скажите по какой-то причине, что по какой-то причине строки не очень хорошо распределены в пространстве хеширования (может быть, много строк можно повторить, например). В этом случае вы можете использовать простой подход к округлению или случайному выбору индекса. Вы также можете иметь противодавление от серверов: например, если вызов RPC является синхронным, вы можете измерить на стороне клиента, сколько времени потребуется, а в случае строковой кодировки - по длине строка; если клиент отмечает, что это число растет, это, вероятно, означает, что служба не в состоянии идти в ногу со временем, и клиент может уменьшить трафик, который он отправляет такому клиенту. Это, очевидно, немного сложнее.
TLDR: Существует множество вариантов балансировки нагрузки, который является «лучшим», зависит от специфики масштабируемой проблемы.