Альтернативы JGroups


Я хочу создать распределенное приложение на JVM, которое имеет несколько узлов, и мне нужна библиотека, которая позволит мне:

  • Управление членством в кластере / сетке, т. е. я хочу получать уведомления об отпуске / присоединении
  • управление сообщениями между членами кластера

Я нашел два решения:

  • JGroups - это работает, но выглядит датами и не широко используется
  • Akka - он основан на Scala, и его кластерный модуль не похож на зрелые

Есть ли другие библиотеки, которые могут сделать то же самое?

4 15

4 ответа:

JGroups существует с 1998 года и поэтому очень стабильна , не датирована вообще ! Он активно развивается (я ведущий разработчик).

Он используется многими приложениями / системами, если вы загуглите для него, вы найдете много ссылок. Только на этой неделе телекоммуникационная компания, использующая его, побила рекорд по величине кластера, построенного с помощью JGroups с кластером 1115 узлов !

Кластеризация JBoss (Wildfly) (Infinispan) также использует JGroups. Предлагаю написать небольшой прототип и посмотреть, как он работает. Если вы задаете вопросы в списке рассылки JGroups, люди там очень полезны...

Я не могу комментировать Akka, так как я не использовал его, но мое отвращение к Scala удержало бы меня от него в любом случае...

Есть ли другие библиотеки, которые могут сделать то же самое?

Apache Zookeeper . Сам никогда им не пользовался, но слышал о нем.

Лично я использовал JGroups в течение нескольких лет. Вначале он был нестабилен - мой TCP-кластер из ~ 10 узлов ломался несколько раз в неделю (разделялся на подкластеры), но позже Бэла бан улучшил библиотеку, она работала хорошо.

Мои 5 центов в "JGroups vs Akka":

  • Кластер Акка конфиг проще, не так "глубок", как JGroups ' one
  • Akka Cluster использует неблокирующий ввод-вывод для связи (в настоящее время на вершине Netty), JGroups всегда использовали блокирующие TCP-сокеты (это может быть критично для больших кластеров; но в JGroups также есть UDP... Но UDP не всегда применим...)
  • Akka Cluster предоставляет более высокоуровневые вещи, такие как cluster-aware routers & distributed PubSub, которые хорошо интегрированы с акторами (конечно, если вам нравится Akka & Actors)
  • Акка Кластер охватывает большинство вариантов использования, но не все: посмотрите на наше обсуждение некоторое время назад: https://groups.google.com/forum/#! тема/akka-dev/WUsi6qfV5BU

Мои 2 цента. Я использовал JGroups в своем проекте для достижения аналогичных требований. Env-это около 60 узлов, что немного мало, но у нас есть тонна активности между узлами (около 1 мм сообщений pd). JGroups была замечательной, потому что ее сетевая конфигурация действительно гибкая и довольно стабильная. Есть несколько вещей, которые вы можете узнать на собственном горьком опыте, когда вы настраиваете JGroups для кластера, разделенного на различные центры обработки данных/локальные сети и даже VLAN, так как на сервере не так много активности пользователей. JGroups, в отличие от других новых опций, которые доступны сейчас. Если у вас есть время, чтобы поиграть с ним и иметь сопоставимый QA/Staging env для вашего производства, я думаю, что JGroups-очень хороший вариант.

Если вы идете по количеству звезд на GitHub, то другие проекты (Cassandra, Riak, Hadoop и т. д.) Также выиграют над JGroups... :-) Я бы прототипировал на JGroups и Aka, а затем выбрал решение, которое лучше всего подходит для вас (perf, функциональность, простота и т. д.). Ура,