Azure: веб-версия Java

Я изучаю платформу Azure, но у меня возникают проблемы.

На самом деле, я чего-то не понимаю...

Я понимаю разницу между веб-ролью и рабочей ролью. Но как специально создать веб-роль для Java-приложения?

Потому что при разработке java-приложения для azure в eclipse нам нужно скопировать/вставить java-сервер (я выбрал tomcat7) + jdk. Я предполагаю, что это только для запуска приложения Java внутри эмулятора.

Но при развертывании приложения в лазурной среде в качестве веб-сервера..... Загружает ли оно только военный пакет + файлы конфигурации xml (cscfg и другие) или также загружает сервер и jdk? Я попытался создать проект с параметром «Облако» вместо параметра «Эмулятор», и он создал огромный файл cspkg размером 150 МБ... Я серьезно не могу загружать 150 МБ каждый раз, когда мне нужно обновить приложение...

Почему бы просто не разрешить загрузку файла .war? А если нам приходится заливать дистрибутив сервера, то как настроен отказоустойчивость и репликация сессий??

Я, наверное, что-то упускаю...

Спасибо за ваши ответы


Редактировать :

На самом деле, из того, что я прочитал в Интернете, Java-приложения изначально не обрабатываются Azure, поэтому вам нужно предоставить свой собственный сервер приложений (tomcat, Glassfish и т. д.) внутри пакета, и сценарий запуска запустит сервер с вашим приложением внутри. Вы должны загружать jre + двоичные файлы сервера + код вашего приложения каждый раз, когда вы хотите повторно развернуть новый пакет.

Нет встроенной поддержки репликации сеанса или чего-то еще. Если вы хотите, чтобы сеанс был «общим» для нескольких экземпляров, вам нужно использовать службу хранилища таблиц для хранения информации о сеансе.

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

Следовательно, приложение Java развертывается не как веб-роль, а как рабочая роль, в которую вы добавляете свой собственный сервер.

Webroles предназначены только для приложений .NET и PHP.

Поправьте меня если я ошибаюсь.


person will    schedule 05.02.2012    source источник
comment
Вам не нужно включать Java или Tomcat в пакет развертывания. Вы можете сохранить их в хранилище BLOB-объектов и в сценарии запуска скопировать их в локальное хранилище и запустить tomcat. Копирование из хранилища BLOB-объектов в локальное хранилище виртуальных машин происходит очень быстро. Я работаю над демонстрационным приложением, которое делает то же самое, и размер пакета уменьшился примерно со 160 МБ до 70 МБ при перемещении JRE и Tomcat в хранилище BLOB-объектов. Я обновлю этот пост через несколько недель, когда код будет доступен, но есть много материалов, которые также показывают, как это сделать.   -  person David Makogon    schedule 06.02.2012


Ответы (2)


Ты прав. Как правило, вы также можете запускать java/Tomcat в веб-роли, но в веб-роли должен быть хотя бы один сайт внутри IIS (не привязывайте порт 80 к этому сайту, поскольку IIS и Tomcat не могут совместно использовать TCP-порт).

Вы должны попробовать с Azure роль виртуальной машины. В этом сценарии вы создаете виртуальную машину локально со всеми системными требованиями (JRE, Tomcat,...). Вы отправляете этот виртуальный образ в Azure в качестве шаблона для своих ролей виртуальных машин. Теперь вы можете загружать только файлы вашего приложения.

Вы также можете ускорить процесс загрузки/развертывания с помощью задачи запуска, которая загружает и распаковывает JRE и Tomcat из хранилища BLOB-объектов. Вам может помочь Azure Bootstrapper.

person Matej    schedule 05.02.2012
comment
Я не согласен - вам НЕ нужна роль виртуальной машины для запуска Java. Вам просто нужно запустить Tomcat, Jetty и т. д. Если вы используете роль виртуальной машины, теперь вам также нужно управлять обновлениями ОС, и в этом нет абсолютно никаких преимуществ. Также: ОП занимался загрузкой пакета размером 170 МБ. При использовании роли виртуальной машины это теперь будет означать установку всей виртуальной машины, которая намного больше, чем пакет развертывания. - person David Makogon; 06.02.2012

Спасибо за ваши ответы, ребята.

Это вызывает еще один вопрос: что происходит «под капотом» при развертывании новой версии пакета Java?

Давайте представим, что tomcat выпустил серьезное исправление безопасности, вам нужно использовать новую версию tomcat либо встраивая ее в cspkg (heavyyyyy), либо, как вы (David) предложили, сохраняя в blob (light !!) и, конечно, код Java с несколькими обновлениями. Вы развертываете этот пакет на уже запущенных экземплярах.

Что происходит с ними ? Они перезагружаются с новым пакетом? Порождает ли он новые экземпляры и убивает текущий? Убивает ли он работающий сервер приложений в каждом экземпляре и запускает новый внутри нового пакета? Что происходит с (непостоянным) локальным хранилищем (если оно используется в качестве дешевого кеша)? Что происходит с используемыми сеансами (если они хранятся не в большом двоичном объекте, а только в памяти)?

Есть ли какая-либо контрольная/сравнительная таблица различных серверов Java внутри Azure? (объем памяти, одновременные соединения и т. д.).

Мои вопросы могут показаться странными, но в настоящее время я работаю с Google App Engine (и готов перейти на Azure), и единственное действие, которое мне нужно сделать для развертывания/обновления приложения, — это нажать кнопку «Развернуть» в eclipse. Так что в настоящее время все еще довольно запутанно. Но на самом деле тот факт, что вы должны загружать свою собственную jre и свой собственный сервер приложений, добавляет много свободы. Он привносит часть IaaS внутрь PaaS.

person will    schedule 06.02.2012