Вторая волна разработки Java-приложений: Аренда сервера EC2

Гибкий и недорогой вариант аренды эффективной и масштабируемой инфраструктуры

В этом выпуске серии Вторая волна разработки Java-приложений приводится практическое введение в разработку и развертывание приложений на платформе Elastic Compute Cloud (EC2), предоставляемой Amazon. Вы узнаете об отличиях EC2 от Google App Engine, а также о том, как быстро создать приложение на языке Groovy и развернуть его на EC2 при помощи специального модуля для Eclipse.

Эндрю Гловер, президент компании, Stelligent Incorporated

Эндрю ГловерЭндрю Гловер является президентом компании Stelligent Incorporated , которая помогает другим фирмам решать проблемы качества программного обеспечения. Для этого используются эффективные стратегии тестирования и технологии непрерывной интеграции, которые позволяют коллективам разработчиков постоянно контролировать качество кода, начиная с ранних стадий разработки. Просмотрите блог Энди , там можно найти список его публикаций.



28.03.2011

Вероятно, вы слышали об отчетах "Chaos Report" компании Standish Group, в которых приводится сводная информация об успехах и неудачах IT-проектов (см. раздел Ресурсы). Как правило, в этих отчетах превалируют неудачи (иначе они не назывались бы "Chaos Reports" – "отчеты о хаосе", не так ли?). Отчет по итогам 2009 г. гласит, что неудачными по тем или иным причинам являются 44% проектов, причем одной из цитируемых причин является выход за рамки бюджета. Несложно представить себе причины, по которым это могло случиться, например, из-за расходов на зарплату разработчиков. Другой крупной статьей расходов является инфраструктура.

Как вы помните из первой статьи этой серии (Знакомство с Google App Engine), одним из ключевых аспектов второй волны Java™-разработки является то, у что компаний-производителей программного обеспечения появилась альтернатива самостоятельной поддержки инфраструктуры, которая выливается в существенные затраты. Несколько лет назад ряд компаний приняли дальновидное решение об унификации аппаратного и программного обеспечения. В частности, они начали выстраивать свои IT-системы на основе комплексов из множества дешевых компьютеров, зная, что подобные решения будут оставаться работоспособными даже в случае выхода из строя отдельных узлов. Подобные компании, в числе которых оказались Google и Amazon, сегодня располагают огромным количеством серверов, которые они могут сдавать в аренду разработчикам, таким как вы или я, при этом не ставя под угрозу свой основной бизнес. Они сделали облачные вычисления реальностью наших дней. Таким образом, если вы отвечаете за бюджет IT-проекта, то вы просто обязаны рассмотреть возможность аренды инфраструктуры у Google или Amazon и сравнить ее по стоимости с покупкой аппаратного обеспечения.

Об этой серии

Характерные черты разработки на Java существенно изменились с момента появления первого релиза платформы. Благодаря зрелости открытых инфраструктур и аренде надежных сред развертывания, есть возможность собирать, тестировать и поддерживать Java-приложения без серьезных временных и денежных затрат. В этой серии Эндрю Гловер описывает ряд технологий, лежащих в основе новой парадигмы создания приложений на Java.

Отличия EC2 от Google App Engine

Инфраструктура, предоставляемая Amazon, существенно отличается от Google App Engine, которая, как вы помните из предыдущей статьи, скорее является платформой для создания Web-приложений на Java. На ней вы не можете использовать все доступные на сегодняшний день Java-решения, например Hibernate, будучи вынужденными работать с технологией BigTable от Google. Однако взамен вы получаете бесплатный хостинг приложений, масштабируемый в соответствии с вашими пожеланиями (при этом не забывайте, что Google потребует с вас денег, как только трафик на ваш Web-сайт достигнет определенного уровня, либо начнет занимать больше определенного места на диске).

Решение EC2, предлагаемое Amazon - это скорее не платформа разработки, а инфраструктура общего назначения, на которой размещаются виртуальные машины (на основе Linux®, OpenSolaris или Windows®), способные выполнять любые приложения. EC2 не бесплатна, но зато является значительно более гибкой инфраструктурой, чем Google App Engine. Вы можете запускать любые Java-приложения, в том числе те, которые используют Hibernate, предварительно создав или арендовав виртуальную машину. При этом Amazon и сторонние провайдеры предлагают целые каталоги настроенных для работы машин (или образов). Как и в случае с Google App Engine, EC2 облегчает обеспечение масштабирумости приложений, поскольку их физическое размещение остается под управлением Amazon. При этом Amazon позволяет выбрать из нескольких географических регионов, в которых возможно развертывание приложения.

Amazon предоставляет подключаемый модуль (плагин) для Eclipse, упрощающий создание приложений для платформы EC2. В отличие от Google App Engine, гибкость EC2 может легко стать причиной определенных сложностей при ее использовании. Например, при помощи плагина EC2 вы можете быстро развернуть Web-приложение для Apache Tomcat, не использующее базу данных, на предварительно настроенном кластере. Однако менее стандартные сценарии, например работа с MySQL или СУБД SimpleDB от Amazon на EC2, потребуют дополнительных действий.

В этой статье вы узнаете о том, как при помощи Eclipse быстро и легко создать на основе грувлетов (Groovlet) простое приложение, использующее инфраструктуру Amazon. При этом вам не понадобится никакое аппаратное обеспечение кроме собственного компьютера и не придется покупать лицензии на программное обеспечение. Ваши затраты ограничатся только номинальной стоимостью размещения вашего кода на платформе Amazon.

Начало работы с EC2

EC2 - это недорого

Аренда "небольшого экземпляра EC2" – образа, способного выполнять простые приложения, которым не требуется много памяти или места на диске – обойдется вам в 10 центов в час. Стоимость канала составляет примерно 30 центов за гигабайт входящего или исходящего трафика. Кроме того, вы также можете арендовать IP-адрес, который стоит 1 цент в час (правда, адрес резервируется на почти два дня). На развертывание и тестирование демонстрационного приложения к этой статье я потратил около 60 центов. Для сравнения: на кофе у меня уходит примерно $3.5 в день.

Перед тем как начать работать с EC2, необходимо создать учетную запись пользователя Web-сервисов Amazon (AWS). Если вы не являетесь зарегистрированным клиентом Amazon, то вас попросят предоставить номер кредитной карты, поскольку EC2 не бесплатен (хотя сама регистрация является бесплатной). После регистрации вы получите идентификатор ключа доступа и секретный ключ доступа, которые необходимы для безопасной работы с EC2.

Для работы с плагином AWS для Eclipse рекомендуется установить Eclipse 3.5, в противном случае вам потребуется ряд библиотек, которые включены в последнюю версию IDE. Кроме того, поскольку вы планируете создавать и развертывать Web-приложения, лучше использовать версию Eclipse для разработчиков Java EE. Она включает в себя удобное расширение (perspective) для разработки Web-приложений.

Установка инструментария AWS

Плагины AWS от Amazon устанавливаются аналогично любым другим плагинам. Вначале необходимо загрузить последнюю версию модуля средствами Eclipse (пункт меню Help > Install New Software). В появившемся диалоговом окне установки введите http://aws.amazon.com/eclipse в текстовом поле "Work with". После этого под текстовым полем должен появится список плагинов, доступных для установки (рисунок 1). Выберите в нем пункт "AWS Toolkit for Eclipse" и нажмите OK. Получив ваше согласие на условия лицензии, Eclipse установит модуль и, вероятно, предложит перезапустить IDE.

Рисунок 1. Загрузка подключаемого модуля AWS для Eclipse
downloading the AWS plug-in

Этот модуль позволяет связывать Web-приложения со средами выполнения. В этой статье используется Tomcat 6, поэтому вам следует его предварительно загрузить и установить. Несмотря на то, что в итоге приложение должно быть развернуто на одном из образов EC2 с Tomcat, имеет смысл его сначала протестировать локально, тем более что это бесплатно.


Создание Web-приложения на Groovy

Перед тем как перейти к конфигурированию EC2, мы рассмотрим создание простого Web-приложения на моем любимом языке быстрой разработки – Groovy. Как было упомянуто в статье Знакомство с Google App Engine, Groovy – это фактически Java, но со значительно более лаконичным синтаксисом (см. раздел Ресурсы). Например, типичный сервлет "Hello, World" занимает около 6–10 строк на Java (длина зависит от того, учитываете вы операторы import или нет). На Groovy его код будет гарантированно короче вне зависимости от метода подсчета строк. Более того, простейший сервлет, написанный на Groovy, содержит всего одну строку кода.

Перейдите в режим Java EE в Eclipse, нажмите правой кнопкой мыши в окне "Project explorer" и выберите пункт New > Dynamic Web Project. Если ранее вам не приходилось создавать подобные проекты, не удивляйтесь: Eclipse различает статические Web-проекты, состоящие из HTML-страниц, и динамические проекты, которые включают серверный код, в частности сервлеты.

Выбрав пункт "Dynamic Web Project", вы увидите диалоговое окно с настройками проекта, такими как среда выполнения и версия сервлетов. В качестве среды следует задать Tomcat 6, указав Eclipse его каталог установки. Значение опции "configuration" следует оставить по умолчанию.

Далее необходимо указать каталог для размещения исходного кода, которым по умолчанию является "src". Наконец, вы должны задать корневой каталог вашего Web-приложения (context root), который будет присутствовать в его URI. Введите какое-нибудь короткое, несложное имя. После этого вам останется только выбрать каталог, в котором будут храниться статические файлы приложения и грувлеты.

Указав все эти настройки, нажмите Finish.

Библиотеки Groovy

Для использования Groovy необходимо внести в проект два изменения. Во-первых, добавьте JAR-файл groovy-all в classpath приложения (на момент написания этой статьи текущей версией была 1.6.4). Во-вторых, отредактируйте файл web.xml, находящийся в каталоге WEB-INF. В этом файле описывается, как Web-запросы передаются на обработку грувлетам (с этим файлом вам приходилось работать в предыдущей статье). Его содержимое должно выглядеть, как показано в листинге 1.

Листинг 1. Файл web.xml с поддержкой грувлетов
<servlet>
 <servlet-name>GroovyServlet</servlet-name>
 <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>GroovyServlet</servlet-name>
 <url-pattern>*.groovy</url-pattern>
</servlet-mapping>

Теперь можно приступать к написанию кода на Groovy.


Пора писать код!

Простейший грувлет может состоять из всего одной строки кода, печатающей "Hello, World" при помощи println, но мы добавим к нему еще немного HTML-разметки. Groovy поддерживает так называемые компоновщики (builders) - логические механизмы для описания иерархических структур данных (см. раздел Ресурсы). С их помощью вы легко можете работать с языками разметки, такими как XML и HTML, а также инфраструктурами GUI наподобие Swing. При этом можно создавать разметку HTML, не задумываясь о синтаксисе HTML, в частности об угловых скобках. Проще всего создать грувлет, работающий с HTML, при помощи класса MarkupBuilder в Groovy, к которому можно обращаться в классах-грувлетах через переменную html. Пример такого грувлета, выводящего "Hello, World" в HTML, приведен в листинге 2.

Листинг 2. Пример простейшего грувлета
html.html {
  head {
      title("Hello from EC2")
  }
  body {
    p("Hello from EC2!")
  }
}

Вот и все. Этих нескольких строк кода достаточно для вывода корректного фрагмента HTML, включающего элементы <head>, <title> и <body> с единственным абзацем. Как видите, все очень просто. Далее создайте файл EC2Groovlet.groovy, поместите в него код, приведенный в листинге 2, и сохраните в каталоге с Web-содержимым.

Вывод в формате XML реализуется так же просто. Аналогичным образом вы можете отделить представление информации от контроллера, используя серверные страницы Groovy (GSP) или Java (JSP). Вне зависимости от задачи Groovy превращает создание сервлетов в легкую прогулку. Далее вы увидите, что благодаря EC2 в использовании этих сервлетов также нет ничего сложного.

В качестве завершающего аккорда создайте простой файл index.html в корневом каталоге проекта. Он пригодится нам позже, при запуске EC2 в Eclipse, поскольку Eclipse обратится по URL данного каталога. Если не создать файл index.html, то Tomcat выдаст сообщение об ошибке. Вставьте в него ссылку на ранее созданный грувлет.

В листинге 3 показан созданный мною файл index.html.

Листинг 3. Пример простого файла index.html со ссылкой на грувлет
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Insert any old title here!</title>
 </head>
 <body>
  <p><a href="EC2Groovlet.groovy">Groovy is slick!</a></p>
 </body>
</html>

На этом подготовительная работа заканчивается. Пришло время переходить к настройке EC2.


Конфигурирование EC2

Модуль AWS для Eclipse EC2 позволяет относительно легко настраивать EC2. Вначале откройте расширение Amazon EC2 и введите параметры вашей учетной записи. Далее выберите пункт меню Window > View > Servers. В появившемся окне необходимо описать как минимум один сервер, но мы определим два: один для локального, бесплатного тестирования, а второй - на платформе Amazon. Для этого нажмите правой кнопкой мыши и выберите пункт New > Server.

Введите значение local в текстовом поле Select the server type, после чего вам будет предложен выбор серверов (рисунок 2). Выберите опцию "Tomcat v6.0" (она будет в списке, если вы его правильно установили и указали настройки выполнения в Eclipse, следуя инструкциям в разделе Начало работы с EC2). Далее нажмите Next и перейдите к добавлению ресурсов (т.е. проектов), которые будут развернуты на этом сервере. Выберите ваш проект, нажмите на кнопку Add, а затем - Finish. Теперь вы можете автоматически развертывать ваше приложение на локальном сервере Tomcat.

Рисунок 2. Описание локального сервера
Defining a local server

В консоли Servers выделите локальный экземпляр Tomcat, нажмите на нем правой кнопкой мыши и выберите Start. В результате этого должен запуститься сервер, на котором Eclipse развернет наш смешной грувлет. После этого запустите Web-браузер и перейдите по адресу localhost:8080/имя вашего корневого каталога/EC2Groovlet.groovy. Вы должны увидеть все великолепие HTML-оформления знакомой строки "Hello, World". Если все в порядке, то можно переходить к платформе Amazon.


Развертывание и тестирование при помощи AWS

Не сомневаюсь, что вам не терпится узнать о том, как развернуть ваше приложение на платформе EC2. Спешу вас обрадовать: это не сложнее, чем развертывание на локальном сервере. Вначале вернитесь в консоль Servers, нажмите правую кнопку мыши и выберите пункт New. Затем введите ec2 и вы увидите опцию Amazon EC2 Tomcat v6.0, как показано на рисунке 3. Выберите ее и нажмите Next.

Рисунок 3. Описание сервера EC2
Defining an EC2 server

В следующем диалоговом окне, показанном на рисунке 4, можно выбрать несколько экземпляров, которые должны быть включены в ваш кластер. Для начала ограничимся одним сервером – о масштабировании всегда можно будет подумать позже. Вы можете выбрать образ сервера Amazon (Amazon Machine Image – AMI) с необходимыми характеристиками либо ограничиться вариантом по умолчанию. Для нашего проекта будет достаточно стандартного образа, хотя в общем случае перед вами открываются широкие возможности по подбору сервера, включающего все необходимые пакеты, например базы данных. В качестве типа экземпляра выберите "Small". При желании вы можете арендовать и более крупный сервер, но вам придется платить пропорционально его масштабу.

Рисунок 4. Настройки EC2
Defining EC2 preferences

Amazon серьезно относится к безопасности, поэтому следующие две опции, также показанные на рисунке 4, необходимы для защиты вашего кластера Tomcat. Пока достаточно оставить настройки по умолчанию, нажав правой кнопкой мыши в области "Key Pair" (пара ключей) и выбрав пункт "New Key Pair" (новая пара ключей). Далее укажите имя и выберите ту пару ключей, которую вы получили при создании учетной записи EC2.

Далее можно создать группы в поле "Security Group" (в этом окне они только описываются; какие-либо действия с ними можно будет произвести позже). Нажмите правой кнопкой мыши и создайте одну группу с произвольным именем. По умолчанию все пользователи могут обращаться через 80 порт, что в данном случае нас полностью устраивает.

Наконец, Amazon позволяет настраивать IP-адреса. Эта возможность оказывается весьма удобной при работе с EC2, поскольку URI по умолчанию вашего Web-приложения будет весьма длинным и сложным для запоминания. Пока нам будет достаточно этого URI, но не волнуйтесь – вы всегда сможете использовать ваше собственное доменное имя, ассоциировав его с IP-адресом, предоставленным Amazon.

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

Как и ранее, нажмите правой кнопкой мыши на сервере EC2 и запустите его, как показано на рисунке 5.

Рисунок 5. Запуск и остановка сервера
starting servers

Запуск сервера может занять некоторое время, поскольку теперь он производится удаленно. Запустив сервер, выберите ваш Web-проект и опцию Run as > Run on Server. Далее выделите ранее запущенный кластер Amazon Tomcat и нажмите Finish. При этом запустится встроенный в Eclipse браузер, который обратится к корневому каталогу вашего проекта. В результате вы должны увидеть ранее созданную страницу index.html со ссылкой на грувлет.

Обратите внимание на URL в поле location браузера (в моем случае оно выглядит, как показано на рисунке 6). Вы всегда можете сопоставить c этим адресом более удобочитаемый URL. Нажмите на ссылку на ваш грувлет и полюбуйтесь волшебством Groovy, причем в этот раз все происходит на сервере, о физическом расположении которого у вас нет ни малейшего представления!

Рисунок 6. EC2 и Groovy
EC2 is Groovy

Вдоволь наигравшись с вашим грувлетом и убедившись, что запуск приложения на платформе Amazon не сложнее запуска на локальном компьютере, не забудьте остановить удаленный сервер, в противном случае вам придется заплатить за потраченное впустую время. Остановка выполняется аналогично запуску: нажмите правой кнопкой мыши на экземпляре сервера в консоли Server и выберите пункт Stop.


EC2 - это часть второй волны разработки Java-приложений

Для второй волны разработки Java-приложений характерны два ключевых фактора:

  • максимальное задействование свободных инструментов и технологий для создания приложений;
  • аренда инфраструктуры, необходимой на всех этапах управления жизненным циклом программного обеспечения, в том числе его эксплуатации.

В этой статье были продемонстрированы оба этих фактора на примере EC2. Эта платформа позволяет вам использовать любые программные пакеты на арендованном аппаратном обеспечении, что значительно дешевле, чем его покупка (не забывайте: на виртуальных машинах Amazon можно запускать то же программное обеспечение, что и на локальном компьютере). При этом EC2 легко настраивается и позволяет масштабировать ваше приложение значительно лучше, чем вы сможете себе позволить за аналогичные деньги.

Следующая статья серии подробнее расскажет о EC2 на примере аренды виртуальной машины (AMI) с Tomcat и MySQL. При этом вы узнаете о том, как развернуть Web-приложение на Java, работающее с Spring и Hibernate – двумя наиболее популярными открытыми инфраструктурами Java-приложений, а также вновь увидите в деле характерные признаки второй волны Java-разработки.

Ресурсы

Научиться

  • Оригинал статьи: Java development 2.0: You can borrow EC2 too (Эндрю Гловер, developerWorks, сентябрь 2009 г.). (EN)
  • Посетите официальный сайт платформы Amazon EC2. (EN)
  • Вы можете купить опубликованный в апреле отчет "Chaos Report" компании Standish Group. (EN)
  • Посетите сайт Google App Engine - инфраструктуры для размещения Web-приложений, предоставляемой Google. (EN)
  • В статье Простое хранение данных при помощи S3 (Эндрю Гловер, developerWorks, апрель 2009 г.) рассматривается открытая библиотека JetS3t, позволяющая задействовать облачный сервис Amazon S3 для хранения и выборки информации. (EN)
  • Прочитайте руководство Свободное владение Groovy (Эндрю Гловер, developerWorks, март 2008 г.), в котором приводится легкое для усвоения введение в Groovy, направленное на Java-разработчиков, не знакомых с этим языком. (EN)
  • Подробное рассмотрение компоновщиков в Groovy приводится в статье Практика Groovy: создание разметки при помощи Groovy Builders (Эндрю Гловер и Скотт Дэвис, developerWorks, апрель 2005 г.). (EN)
  • Обратите внимание на статью Использование Web-сервисов Amazon для интеграции корпоративных приложений (Брайан Дж. Стюарт, Brian J. Stewart, developerWorks, июнь 2009 г.), из которой вы узнаете о том, как можно интегрировать корпоративные приложения при помощи XML и Web-сервисов Amazon, а также о создании кросс-платформенных средств интеграции на основе платформ Java и Microsoft .NET. (EN)
  • В статье Облачные вычисления при помощи Web-сервисов Amazon. Часть 3: серверы EC2 по требованию (Прабхакар Чаганти, Prabhakar Chaganti, developerWorks, октябрь 2008 г.) приводится введение в виртуальные серверы, предоставляемые Amazon EC2. Вы узнаете о том, как EC2 облегчает конфигурирование вычислительных требований ваших приложений "на лету" и при необходимости корректирует выделенные ресурсы. (EN)
  • Прочитав статью Облачные вычисления и распределенные вычисления (Джудит Майерсон, Judith Myerson, developerWorks, март 2009 г.), вы узнаете о реализации концепции "Инфраструктура как сервис" на платформе Amazon EC2, а также познакомитесь со сходством, различиями и трудностями, которые необходимо рассмотреть при выборе между инфраструктурами облачных и распределенных вычислений. (EN)
  • Посетите центр облачных вычислений IBM, который содержит множество материалов, посвященных облачным технологиям. (EN)
  • В магазине технической литературы содержится множество книг на эту и другие темы. (EN)
  • Сотни статей по всем аспектам программирования на Java можно найти на сайте developerWorks, в разделе Java-технологий.

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Технология Java
ArticleID=643597
ArticleTitle=Вторая волна разработки Java-приложений: Аренда сервера EC2
publish-date=03282011