Java и различные типы / методы кластеризации - PullRequest
2 голосов
/ 09 января 2012

Я относительно новичок в Java EE и уже начал слышать о множестве различных типов систем, которые можно кластеризовать:

  • Виртуальные машины (т. Е. ", что устройство являетсякластер виртуальных машин ...")
  • Серверы приложений, такие как Tomcat, JBoss или GlassFish (т. е." Мы используем кластерный JBoss ...")
  • API кластеризации, такие как Terracotta
  • Базы данных, например Oracle (" кластеризованная база данных ")
  • Облачные приложения (" Облако - это в основном кластер ...")

Википедия определяет" кластеризацию"как:

A компьютерный кластер состоит из набораслабосвязанных компьютеров, которые работают вместе, так что во многих отношениях их можно рассматривать как одну систему.

Мне интересно, как работает кластеризация для каждого из этих «типов / методов кластера» (упомянутых выше)) и как они связаны друг с другом.

Например, можно ли получить пользу отзамазанное приложение, он / она, вероятно, поместит их на кластерный сервер приложений, а затем добавит менеджер кластеров (опять же, как Terracotta).

Но потому что фраза " clustering "кажется, используется неопределенным / двусмысленным образом, я не вижу, как каждый из этих связей в другие, или если они вообще делают.Заранее спасибо всем смелым StackOverflowers, которые могут помочь мне разобраться в этой переплетенной терминологии!

Ответы [ 2 ]

2 голосов
/ 10 января 2012

Для меня кластеризация подразумевает ряд качеств системы, но она сводится к отказоустойчивости - сервер, сеть и постоянство данных. Существуют как слабо и тесно связанные системы, так и все ароматы между ними. В тесно связанных системах кластеризация выполняется на уровне, близком к аппаратному. Многие из старых систем кластеризации были более тесно связаны с приложениями, часто не признавая, что они были кластеризованы.

Слабосвязанные системы в наши дни являются нормой, поскольку большая степень отказоустойчивости достигается полностью на программном уровне. Системы в кластере используют только сетевое подключение, чтобы обеспечить отказоустойчивость. Обычно существуют специальные балансировщики нагрузки, которые направляют запросы на различные серверы кластера, используя для этого специализированное оборудование (иногда просто программное обеспечение).

Все приведенные вами примеры имеют своего рода «кластеризацию». Для описания подробностей о том, как каждая из архитектур выполняет это, потребуется ответ очень . Для меня различия в том, что получается «бесплатно», когда вы используете архитектуру, и в том, сколько работы вам нужно будет сделать, чтобы она работала оптимально.

То, как вы будете сочетать и сочетать упомянутые решения, зависит от того, как выглядит ваша архитектура и от ваших требований. У вас может быть магазин Terracotta для локального высокоскоростного хранения и облако для отдыха. Вы можете использовать Glassfish в качестве сервера приложений и использовать Terracotta в качестве слоя сохранения.

Вот мои мысли о технологиях, которые вы перечислили:

  • Облачные приложения («Облако - это в основном кластер ...»)

Облачные приложения, с которыми проще всего работать, очевидно. Ваша единственная работа с точки зрения архитектуры - выбрать хорошего провайдера кластера. Конечно, Amazon и Google сделают это «правильно» с точки зрения отказоустойчивости и целостности данных. Есть много других игроков, которые, вероятно, делают это «достаточно хорошо» и дешевле. Вы программируете их API, которые имеют свои ограничения и расходы. Одна проблема с облачными приложениями состоит в том, что, скорее всего, будет очень трудно переключиться на новое. Опять же, у вас может быть [большая] часть вашего приложения, работающая на облачных серверах, и некоторые локальные системы для ваших требований с более высокой задержкой. Тенденция заключается в том, чтобы поместить большинство производственных функций в облако или, по крайней мере, запускать их до тех пор, пока вы не станете слишком большими или не нуждаетесь в некоторых услугах, которые они не могут предоставить.

  • API кластеризации, такие как Terracotta
  • Базы данных, такие как Oracle («кластеризованная база данных»)
  • JBoss

Эти 3 системы предоставляют свои собственные возможности кластеризации. Может потребоваться, чтобы вы выполнили множество конфигураций машинного и сервисного уровней, чтобы система работала хорошо в производственной среде. Я слышал хорошие вещи о терракоте, которая является распределенным слоем постоянства. Я часто использовал Jgroups, который находится под Jboss, и это может быть сложно запустить правильно, но Jboss также может иметь некоторые хорошие конфигурации / документацию по умолчанию. Скорее всего, Oracle будет сложнее всего кластеризовать правильно. Администраторы баз данных зарабатывают много денег, настраивая конфигурации Oracle.

  • Виртуальные машины (то есть «это устройство представляет собой кластер виртуальных машин ...»)
  • Серверы приложений, такие как Tomcat, GlassFish

Это наиболее аморфные для определения с точки зрения кластеризации. Некоторые виртуальные машины считаются «кластеризованными» в том смысле, что они совместно используют сетевое оборудование и объединительные платы питания, но на самом деле не являются кластерами по сравнению с облачными вычислениями. Как уже упоминалось, есть некоторые кластерные аппаратные решения, которые очень индивидуальны и требуют много специальных знаний в предметной области, чтобы нормально работать.

У меня очень мало опыта работы с серверами приложений, такими как Tomcat и Glassfish.У нас есть собственное программное обеспечение для кластеризации поверх Jgroups и мы полностью запустили Jetty.Серверы приложений сами по себе не являются «кластеризованными», но пакеты, такие как Jboss и Terracotta, запускаются поверх них для обеспечения кластеризации, и у них есть внутренние проекты, для которых написано программное обеспечение для кластеризации.

Надеюсь, что это поможет.

1 голос
/ 10 января 2012

Вот быстрый удар по нему. То, как вы кластеризуетесь, зависит от ваших целей. Вот некоторые мысли, которые также связаны с GlassFish.

  • Кластер позволяет управлять несколькими экземплярами как одним, так как они имеют общую конфигурацию. Если вы вносите изменения в конфигурацию, например, определяете новый ресурс, то все экземпляры, принадлежащие кластеру, наследуют это изменение. Развертывание приложения в кластере развертывает его на всех экземплярах этого кластера.
  • Кластер обеспечивает доступность услуг. В случае сбоя одного экземпляра развернутые приложения по-прежнему доступны в других экземплярах.
  • Кластер может предложить доступность сеанса. Если экземпляр умирает, когда у пользователя есть элементы в его корзине покупок, то другой экземпляр может вступить во владение обработкой сеанса этого пользователя, так что содержимое корзины покупок все еще там. Пользователь никогда не узнает, что на бэкэнд-сервере произошел сбой.
  • При использовании GlassFish состояние сеанса HTTP может управляться GlassFish (встроенным), делегироваться в сетку когерентности или приложение может управлять самим состоянием (используя терракоту, базу данных и т. Д.). Преимущество использования встроенной возможности состоит в том, что она работает «из коробки» и прошла стресс-тестирование, контроль качества и т. Д. Преимущество экстернализации заключается в том, что вы потенциально можете получить лучшую масштабируемость, поскольку вы разделяете управление сеансами и логику приложения. Экстернализация позволяет JVM сосредоточиться на выполнении бизнес-логики и использует меньше пространства HEAP, поскольку сеансы резервного копирования существуют в других местах. Oracle протестировала / QAd за пределами системы Coherence Grid и является официальной функцией коммерческого сервера Oracle GlassFish. Если вы используете свою собственную базу данных, вам нужно самостоятельно управлять и проверять ее.
...