Сервис балансировки нагрузки с использованием Zookeeper и Thrift - PullRequest
8 голосов
/ 09 октября 2011

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

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

Мы бы хотели расширить это до уровня горизонтального масштабирования.Таким образом, у нас есть несколько узлов, на которых выполняются алгоритмы обработки.Теперь, в зависимости от загрузки сообщений, наши запросы Thrift следует отправлять на разные серверы (предположим, что все службы запускают экземпляр каждой обработки с Algo1 по 3).Скажем, например, что мы получаем большое количество сообщений, которые мы хотим обработать на Algo 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 для обработки конфигурации (например, серверы прослушивают обновления или дополнения алгоритмов и обслуживают их в соответствии с настройками), но как нам управлять аспектом балансировки нагрузки?

Ура!

Ответы [ 2 ]

6 голосов
/ 05 декабря 2011

Вы, ребята, вероятно, хотите что-то вроде Норберта из LinkedIn: http://sna -projects.com / norbert / Они используют постоянную одноранговую связь между клиентами и серверами и используют zookeeper для регистрации служб исигнализацияДовольно классные вещи.Это позволяет вам просто запустить другой обрабатывающий узел, который может помочь в обработке запросов во время высокой нагрузки.

/ Jonas

2 голосов
/ 24 апреля 2012

Взгляните на DynamicPool и ZooKeeperNode.Стандартное подключение доступно в ThriftFactory для справки.http://twitter.github.com/commons/

...