Загрузка сбалансированной службы с использованием Zookeeper и Thrift

У нас есть ресурсоемкая служба, которая используется для выполнения ряда преобразований. Это в значительной степени вычислительно связанный (связанный с процессором) процесс. По сути, у нас есть брокер сообщений, который отправляет сообщения в службу обработки через Thrift.

Теперь у нас есть несколько различных сервисов обработки, которые запускают разные алгоритмы для обработки сообщений - эти сообщения направляются в один или несколько алгоритмов обработки. Объемы наших сообщений изменчивы, как и потребности алгоритмов обработки (т.е. мы можем получить много сообщений, содержащих XYZ, а затем отправить их в алгоритм 1, в противном случае отправить в алгоритм 2).

Мы хотели бы расширить это до чего-то, что можно масштабировать по горизонтали. Итак, у нас есть несколько узлов, на которых выполняются алгоритмы обработки.Теперь, в зависимости от нагрузки обмена сообщениями, наши запросы на бережливость должны отправляться на разные серверы (предположим, что все службы запускают экземпляр каждой обработки от Algo1 до 3). Скажем, например, мы получаем большое количество сообщений, которые хотим обработать на алгоритме 1, тогда у нас есть два сервера, на которых выполняется алгоритм 1, а третий сервер выполняет запросы для двух других алгоритмов (алгоритмы 2 и 3).

Итак, система выглядит так:

Client ----Request-------|
              -----------|--------------------
              | Coord & Load Balancer Service | ... like zookeeper
               --------------------------------
                      <--|-->
                         |    Route messages to servers...
   Server1:               Server2:          Server 3:
Algo1 instance        Algo1 instance      Algo2 instance
                                          Algo3 instance    

Все процессы написаны на Java.

Итак, насколько легко было бы настроить что-то подобное с помощью Zookeeper. Я знаю, что когда мы добавляем или изменяем алгоритмы, мы можем легко использовать Zookeeper для обработки аспектов конфигурации (т.е. серверы ожидают обновления или дополнения алгоритмов и обслуживают их в соответствии с настройками), но как мы можем управлять аспектом балансировки нагрузки?

Ваше здоровье!

8
задан NightWolf 9 October 2011 в 08:48
поделиться