Набор мощных технологий и конструкторов, позволяющих сформировать прикладную облачную систему практически произвольной сложности в моделях PaaS или даже SaaS и задать настройки эффективности и безопасности, в линейке сервисов Amazon объединен в группу Deployment & Management.

Кэшируем большие данные

Несмотря на впечатляющие характеристики, реляционные и NoSQL-СУБД и мощные кластерные хранилища обладают рядом недостатков, часто проявляющихся в прикладных проектах. Подобные системы реализуют функциональные требования, прежде всего по гибкой и быстрой обработке долговременно хранящихся данных, но в любом проекте существует немало узких мест, связанных с точками стыковки программных “кубиков”. Например, сервер приложений или веб-система могут напрямую обращаться к СУБД в облаке, но чем объёмнее база данных, тем чаще одни наборы записей будут запрашиваться постоянно (скажем, комментарии к популярной статье), а другие могут вообще никогда не обрабатываться. В таком случае можно существенно ускорить поставку популярной информации, поместив её в кэш в оперативной памяти. Некоторые СУБД ограниченно поддерживают внутренние механизмы кэширования, однако правильнее такую подсистему выделить в отдельный независимый сервис.

Услуга, предназначенная для управления распределёнными кэшами в ОЗУ, их развёртывания и масштабирования, называется Amazon ElastiCache. Она поддерживает наиболее распространённые модели кэширования Memcached и Redis, позволяя подключить их к системе, развёрнутой в облаке Amazon, или даже к независимой веб-системе — несколькими щелчками мыши или модификацией нескольких строчек настроек.

Кластер ElastiCache формируется единственной кнопкой профильной консоли (рис. 1). При этом требуется выбрать тип узла и количество этих узлов в кластере, а также соответствующий механизм кэширования (Memcached или Redis). Далее можно задать группу безопасности и настроить схему сопровождения. Обслуживание такого кластера просто, рабочие настройки (но не объем и структуру кластера) можно модифицировать, а сам кластер перезапустить или удалить. Следует иметь в виду, что перезапуск сервиса кэширования приведёт к удалению всех хранящихся в нем данных, поэтому дальнейшая работа системы продолжится в “холодном режиме” — скорость доступа к популярной информации на какое-то время существенно понизится.

Сервис кэширования обычно подключается к системе, развёрнутой на виртуальном сервере Amazon EC2. В таком случае активация этого сервиса реализуется указанием подходящей схемы кэширования в настройках прикладной системы, после чего кэш подключается к процессу автоматически. Внешним системам, поддерживающим Memcached или Redis, достаточно ввести в настройках URL-адрес амазоновского кластера ElastiCache (рис. 2), например:

pcweekcache.3jvlrn.0001.use1.cache.amazonaws.com:11211

Кластер ElastiCache имеет смысл применять в крупных проектах, где объёмы кэшируемых данных велики, иначе он не даст выгоды, а в малонагрузочных системах даже может привести к ухудшению времени отклика. Стоимость ElastiCache напрямую зависит от аппаратной конфигурации кластера: если в минимальном варианте придётся платить 0,022 долл. в час, то в максимальной версии с мощными процессорами или большим объёмом оперативной памяти цена вырастет до почасовых 1,4—2,3 долл.

Проектируем процессы обработки данных

После того как низкоуровневая IaaS-система хранения данных будет создана, полезно выстроить рабочие процессы передачи данных между различными типами облачных хранилищ (например, между файловой системой S3 и реляционным сервисом RDS). Соответствующая услуга называется AWS Data Pipeline. Она позволяет формировать сложные цепочки процессов, каждый из которых стартует при удачном завершении предыдущего, инициировать их автоматически (по расписанию) и контролировать ход работ с помощью оповещений, настраиваемых на различные рабочие события (например, неудачное завершение).

AWS Data Pipeline основывается на концепции конвейеров (pipeline). Человек-проектировщик в несложном визуальном редакторе создаёт и настраивает рабочие потоки: каждый конвейер состоит из входного и выходного узлов данных (data node) и процесса промежуточной обработки данных (activity) между узлами. Можно вручную проектировать цепочки преобразования: например, на рис. 3 показана двухшаговая схема конвертации данных: из NoSQL-таблицы DynamoDb информация копируется процессом MyExportJob в облачное файловое хранилище S3 в промежуточном текстовом формате, откуда загружается в СУБД MySQL процессом MyConvertActivity. Кроме того, предоставляется набор шаблонов конвейеров для типовых операций (рис. 4).

Очень хорошо этот сервис подходит для ETL-задач извлечения, обработки и загрузки данных. Amazon также предоставляет библиотеку разработчика, позволяющую программно создавать и запускать оригинальные конвейеры, что существенно повышает мощность сервиса и упрощает стыковку внешней облачной системы с внутренней КИС. Этот удобный сервис обойдётся примерно в доллар в месяц на каждый используемый процесс (activity).

Организуем детальный мониторинг всех сервисов

Полезная возможность фиксации всех программных обращений к сервисам Amazon, привязанным к пользовательскому аккаунту, включая обращения из консоли, реализована в виде услуги AWS CloudTrail. Она активируется одной кнопкой (рис. 5) и связывается с ячейкой S3 (лучше создать отдельное S3-хранилище для ведения файлов логов). В статистике фиксируется название функции API, время обращения к ней, идентификатор вызывающей программы, значения параметров и результат работы. Логи обновляются примерно раз в пять минут и автоматически сортируются по каталогам, название которых составлено из года, месяца и дня (рис. 6). Пользователь будет оплачивать только расход дискового пространства под логи.

Настраиваем ролевую безопасность

Разграничение доступа ко всем прикладными системам пользователя выполняет сервис AWS Identity and Access Management (IAM). Он поддерживает концепции пользователей, групп пользователей, разрешений (permissions), ролей и внешних провайдеров (например, для доступа к облаку из сервисов Facebook и Google). Исходно никаких сущностей IAM не существует, и прикладные сервисы Amazon работают в стандартном режиме безопасности по умолчанию.

Пользователи добавляются кнопкой Create New Users, причём можно одновременно добавить несколько пользователей (рис. 7). После формирования их списка надо определить доступные им возможности в системе. Для этого в консоли IAM выбирается пользователь и на вкладке Permissions кнопкой Attach User Policy задаётся уровень доступа (рис. 8): административный (полный), “продвинутого” пользователя, только просмотр и т. д. Пароль пользователя формируется на закладке Security Credentials. Для упрощения процесса можно готовить группы, которым назначаются соответствующие разрешения, и затем просто заносить пользователей в эти группы.

Доступ созданных пользователей к аккаунту происходит обращением к специальному URL-адресу, который показан в главном окне консоли IAM (рис. 9). В окне браузера достаточно ввести один из прикладных логинов и паролей любого “внутреннего” пользователя. К сожалению, в меню консоли такого пользователя будут свободно доступны все пункты без исключения — визуально понять, какие из них запрещены, нельзя. На рис. 10 показано, как при попытке запустить сервер EC2 пользователю, который вошёл в систему в режиме “только просмотр”, отказано в операции.

Роли предназначены для делегирования разрешений в ситуациях, когда типовой механизм пользователей задействовать невозможно (например, при программных обращениях к службам Amazon). Новая роль создаётся кнопкой Create New Role, после чего будет предложено выбрать тип сервиса Amazon, который будет доступен условному владельцу этой роли (рис. 11).

PaaS за минуты

Своеобразный вариант PaaS с автоматизированным развёртыванием среды разработки и её поддержкой в сконфигурированном виде с детальным мониторингом производительности реализован в виде сервиса AWS Elastic Beanstalk. Он предлагает серверные технологии IIS, .NET, Java, node.js, PHP, Python, Ruby и Tomcat с возможностью разработки через оболочки Eclipse и Visual Studio. Соответствующее окружение разворачивается в облаке за минуты.

Создание нужной среды выполняется кнопкой Create New Application из консоли AWS Elastic Beanstalk. Прикладной системе требуется для работы виртуальный сервер, и если таковой отсутствует, он будет сформирован автоматически. При этом Amazon сам подключит и настроит все дополнительные сервисы, от балансировщика нагрузки и режима автоматических уведомлений до средств масштабирования и контроля за надёжностью работы. Будет подготовлено и тестовое приложение.

Elastic Beanstalk реализует удобную модель своеобразного хостинга под конкретную прикладную систему или даже под единственное приложение. Разработчик готовит программу, загружает её в облако, запускает, тестирует, получает набор метрик производительности, оценивает их, корректирует код и снова выполняет данный цикл. Удобна возможность загрузки “образа” разрабатываемого проекта в облако в виде zip-архива всего рабочего каталога (рис. 12).

Когда рабочее окружение сформируется, пользователю будут доступны три кнопки (рис. 13): Monitor, показывающая текущую производительность среды и уровень “здоровья” (зелёный цвет — всё работает отлично); Edit, позволяющая сконфигурировать общие параметры среды и особенности, связанные с конкретной технологией (например, PHP); Upload and Deploy, включающая упомянутый цикл загрузки прикладной программы. Чтобы обратиться к созданной системе, достаточно скопировать URL-адрес в верхней части окна консоли сервиса, и в браузере откроется прикладной работающий проект (рис. 14).

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

Ставим шаблонную прикладную систему

Elastic Beanstalk рассчитан преимущественно на программистов, а пользователям, желающим развернуть в облаке готовую прикладную систему, больше подойдёт сервис AWS Cloudformation, целиком формирующий нужный стек подходящих приложений. Стек создаётся кнопкой Create New Stack, после чего пользователю предлагается либо выбрать один из предопределённых вариантов (рис. 15), либо загрузить собственный образ нужной системы — с локального диска или из файлового хранилища S3.

Список шаблонов весьма солидный: системы построения социальных сетей Insoshi, ведения проектов Redmine, управления сайтом Drupal, Joomla и WordPress, wiki-движок Gollum, стек LAMP, среда программирования Ruby on Rails и др. В зависимости от выбранного варианта потребуется задать дополнительные административные настройки: например, для Redmine, требующей СУБД MySQL, надо получить логин доступа к БД. Эксплуатация системы, созданной с помощью Cloudformation, обойдётся в несколько десятков долларов в месяц в зависимости от её типа и количества мощности виртуальных серверов.

Развёртываем n-tier-архитектуру

Сервис Amazon, позволяющий развернуть целостную многоуровневую систему, масштабирующуюся не только по аппаратным и вычислительным мощностям, но и в прикладном направлении, называется AWS Ops Works. Он автоматически генерирует полный архитектурный стек на базе Linux: СУБД или серверный “бэк-енд”, подключённый к ним расширяемый набор серверов приложений и балансировщик нагрузки, распределяющий запросы между этими серверами. После создания стека с минимальными настройками разработчик добавляет нужные серверные уровни, инициализирует связанные с ними виртуальные машины EC2 и разворачивает на них необходимую прикладную систему.

Для отдельного логического уровня предлагается обширный перечень типовых решений: веб-сервер, серверы приложений Java, PHP, Rails, node.js, СУБД NySQL (рис. 16). Под сформированный уровень готовится и запускается нужное количество экземпляров EC2 (рис. 17). Прикладное приложение загружается из меню раздела Apps. Оно может быть скопировано из репозитариев Git и Subversion, хранилища S3, загружено через любой HTTP-провайдер и т. п. (рис. 18).

Запуск системы выполняется из меню Deployments. Весь процесс построения стека с нуля и запуска его в промышленную эксплуатацию при наличии заранее подготовленной прикладной системы занимает менее получаса (рис. 19). Стек легко масштабируется — например, добавлением новых экземпляров EC2 в горячем режиме. Как и в случае с Elastic Beanstalk, деньги берутся только за ресурсы, непосредственно используемые на различных логических уровнях системы.