Назад | Перейти на главную страницу

Готово ли облако для корпоративного веб-приложения Java? Обращение за советом по хостингу JEE

Привет всем умным людям здесь!

Я хотел бы спросить, возможно ли развернуть корпоративное веб-приложение Java в облаке, таком как Amazon EC2, или это вообще хорошая идея. Точнее, я ищу варианты инфраструктуры для приложения, которое будет обрабатывать несколько сотен пользователей с длинными сеансами, не требующими интенсивного использования процессора и памяти. Я рассматриваю выделенные серверы, виртуальные частные серверы (VPS) и EC2. Я заметил, что есть проект под названием JBoss Cloud, поэтому люди работают над включением такого развертывания, с другой стороны, он еще не кажется зрелым, и я не уверен, что облако готово для такого рода приложения, которые отличаются от типичных облачных приложений, таких как Twitter. Вы бы порекомендовали развернуть его в облаке? Каковы плюсы и минусы?

Приложение представляет собой веб-приложение Java EE 5, основная функция которого состоит в том, чтобы позволить пользователям составлять свой собственный настраиваемый Продукт путем объединения доступных частей. Он использует сеансные компоненты без состояния и с отслеживанием состояния и JPA для сохранения сущностей в СУБД и извлекает информацию о частях из системы инвентаризации компании через веб-службу. Помимо внешних пользователей он также используется несколькими внутренними пользователями, которые проходят аутентификацию по LDAP компании. Приложение должно обрабатывать около 300-400 одновременных пользователей, создающих свой продукт, и должно быть достаточно масштабируемым и доступным, хотя на данном этапе эти качества имеют лишь среднее значение.

Я предложил архитектуру, состоящую из брандмауэра (FW) и балансировщика нагрузки, поддерживающего липкие сеансы и https (в облаке это будет заменено службой эластичной балансировки нагрузки EC2 и FW на серверах приложений, в физической архитектуре нагрузка - балансировщиком будет HW), затем два физических кластерных сервера приложений в сочетании с веб-серверами (чтобы в случае отказа одного из них пользователь не потерял свой давно созданный продукт) и, наконец, сервер базы данных. Серверу БД потребуется подчиненный резервный экземпляр, который сможет заменить главный в случае сбоя. Это должно обеспечить разумную доступность и отказоустойчивость, а также хорошую масштабируемость до тех пор, пока одна СУБД может выдерживать нагрузку, что должно быть в порядке в течение длительного времени, поскольку большинство операций выполняются в памяти с использованием компонента с отслеживанием состояния и хранятся только время от времени. или извлекаются из БД, и объем данных тоже невелик. Проблемной частью может быть зависимость от веб-службы удаленной системы инвентаризации, но при хорошем кэшировании ее выходных данных в приложении все должно быть в порядке.

К сожалению, я лишь смутно представляю системные ресурсы (размер памяти, количество и скорость процессоров / ядер), которые нужны такому «среднему приложению Java EE» для нескольких сотен пользователей. Моя приблизительная и в основном необоснованная оценка, основанная на реальных предложениях Amazon, заключается в том, что 1,7 ГБ и одноядерного двухъядерного «современного процессора» с частотой около 2,5 ГГц (средний экземпляр High-CPU) должно быть достаточно для любого из двух серверов приложений ( поскольку мы можем справиться с более высокой нагрузкой, предоставив больше из них). В качестве альтернативы я бы подумал об использовании большого экземпляра (64b, 7,5 ГБ RAM, 2 ядра на 1 ГГц)

Поэтому мой вопрос заключается в том, является ли такое развертывание в облаке технически и финансово осуществимым или выделенные серверы / VPS-серверы будут лучшим вариантом и есть ли какой-то реальный опыт с чем-то подобным.

Большое спасибо! / Якуб Святой

PS: Я нашел Пример использования JBoss EAP в облаке это показывает, что можно развернуть реальное приложение Java EE в облаке EC2, но, к сожалению, нет никаких подробностей относительно топологии, типов экземпляров или чего-то еще :-(

В долгосрочной перспективе EC2 редко бывает более рентабельным, чем ваши собственные выделенные серверы. Его главное преимущество - быстрая масштабируемость. Если у вас относительно медленно меняющаяся база пользователей, то, вероятно, этого не стоит.

Но самое замечательное в том, что легко настроить и опробовать это всего за несколько долларов, без необходимости заранее раскладывать много оборудования.

Есть готовые AMI для Glassfish. Я бы посоветовал опробовать 1 или 2 небольших экземпляра, это ясно покажет вам, будут ли VPS / выделенные серверы более ценными, и даст вам гораздо лучшее представление о ваших требованиях.

Возможно, вы захотите взглянуть на Терракоту.

Terracotta распределяет JVM в облаке EC2. Таким образом, он помогает сделать немасштабируемые Java-приложения масштабируемыми с небольшой модификацией кода. Терракота похож на эластичный бобовый стебель, но лучше подходит для обработки:

  1. Ява

  2. Масштабирование

  3. Балансировки нагрузки

  4. Репликация базы данных

  5. Это открытый исходный код / ​​открытое ядро

    Вот ссылка http://www.terracotta.org/