Проблемы разработки эффективных облачных приложений во многом совпадают с проблемами физических систем, обусловленными естественной несбалансированностью вычислений, ввода вывода и полосы пропускания при обмене данными. Эти проблемы существенно усиливаются из-за масштаба системы, ее распределенной природы и того, что практически все такие приложения интенсивно работают с данными.
Хотя любая инфраструктура облачных вычислений в идеале стремится автоматически распределить и сбалансировать нагрузку по обработке данных, все равно именно вы отвечаете за то, чтобы данные размещались близко к местам их обработки, и за определение оптимальной стратегии их хранения. Одно из основных преимуществ облачных вычислений — совместно используемая инфраструктура — может оказаться и их слабым местом.
В используемых на практике системах почти невозможно достичь такой же производительности VM, как в условиях изоляции (performance isolation), особенно когда система работает с интенсивными нагрузками. Это еще сложнее в случае облачных вычислений. Производительность виртуальных машин (VM) меняется в зависимости от нагрузки, состояния инфраструктурных сервисов, среды и количества пользователей. Изоляция для обеспечения безопасности (security isolation) — еще один сложный фактор, принимаемый во внимание в системах, обслуживающих много организаций.
Надежность также является важной проблемой. Всегда, когда большое количество узлов конкурирует за вычислительные ресурсы, можно ожидать отказы узлов. Выбор оптимального экземпляра (с точки зрения обеспечения такой же производительности, как в условиях изоляции, надежности и безопасности) среди предлагаемых облачной инфраструктурой — критически важный фактор. При выборе типа экземпляра играют свою роль и соображения стоимости.
Работа с приложениями
Многие приложения состоят из нескольких уровней (stages). Каждый уровень может содержать несколько экземпляров, параллельно выполняемых в облачных системах, между которыми происходит обмен информацией. Таким образом, разработчики приложений должны решать такие важные задачи, как обеспечение эффективности, целостности и масштабируемости при обмене данными. Поскольку облачные инфраструктуры используют общедоступные сети неизвестной топологии, в них возникают задержки при передаче данных между узлами и колебания полосы пропускания, часто влияющие на производительность приложений.
Хранилище данных играет критически важную роль для производительности многих приложений, интенсивно работающих с данными. Организация хранилища, выбор местонахождения хранилища и управление полосой пропускания хранилища — вопросы, которые необходимо тщательно проанализировать, чтобы обеспечить оптимальную производительность приложений. Облака поддерживают многие способы хранения, в том числе облачное хранилище вне экземпляра (off-instance), монтируемое блочное хранилище вне экземпляра и постоянное хранилище, существующее в течение времени жизни.
Многие приложения, интенсивно работающие с данными, используют метаданные, связанные с отдельными записями данных. Например, метаданные для аудиофайла в формате MPEG могут содержать имя песни, имя исполнителя, информацию о том, как записана песня, и т.д. Метаданные следует хранить так, чтобы к ним было удобно обращаться, а хранилище должно быть масштабируемым и надежным.
Еще один важный вопрос обеспечения производительности приложений — ведение журналов. Здесь требуется тонкое чувство меры. Для повышения производительности нужно ограничить количество данных, выводимых в журналы, но, в то же время, для того чтобы идентифицировать причины неожиданных результатов и ошибок, необходимо часто выводить данные в журналы. Как правило, журналы ведут в хранилище экземпляра, существующем только в течение жизни экземпляра. Поэтому всегда следует принимать меры к сохранению журналов для «посмертного» анализа.
Возможности приложений
Можно разбить существующие облачные приложения на несколько крупных категорий: конвейеры обработки, системы пакетной обработки и веб-приложения. Конвейеры обработки — приложения, интенсивно работающие с данными, и, во многих случаях, выполняющие интенсивные вычисления. Они представляют собой довольно крупный сегмент приложений, в настоящее время выполняемых в облаке. Имеется несколько типов приложений, обрабатывающих данные:
- Индексация: конвейер обработки, поддерживающий индексацию крупных массивов данных, создаваемых движками сбора веб-данных (Web crawler engine).
- Анализ данных: конвейер обработки, поддерживающий поиск в крупных наборах записей для отбора интересующих элементов.
- Обработка изображений: ряд компаний, таких как Flickr и Google, позволяет хранить изображения в облаке. Конвейеры обработки изображений поддерживают их преобразование, сжатие и шифрование.
- Перекодировка видео: конвейер обработки перекодирует видео из одного формата в другой (например, из AVI в MPEG).
- Обработка документов: конвейер обработки преобразовывает большие массивы документов из одного формата в другой (например, из Word в PDF) или шифрует документы. Он также может формировать цифровые образы документов, используя оптическое распознавание символов (optical character recognition, OCR).
Системы пакетной обработки также охватывают широкий спектр приложений, интенсивно работающих с данными, используемыми в корпоративных вычислениях. Для таких приложений, как правило, определены конечные сроки. Срыв этих сроков может привести к серьезным экономическим проблемам. Безопасность также является критическим аспектом многих приложений пакетной обработки. Вот неполный список приложений пакетной обработки:
- Генерация ежедневных, еженедельных, ежемесячных и ежегодных отчетов организации в области розницы, производства и других экономических секторах.
- Обработка, агрегирование и суммирование ежедневных транзакций финансовых учреждений, страховых компаний и медицинских организаций.
- Учет товарно-материальных запасов в крупных корпорациях.
- Обработка данных для выставления счетов и начисления зарплаты.
- Управление разработкой ПО (например, еженочным обновлением репозитариев ПО).
- Автоматическое тестирование и верификация программных и аппаратных систем.
Последняя, и все более важная категория, — облачные приложения для веб-доступа. Веб-сайты некоторых категорий существуют только периодически или временно, как, например, веб-сайты конференций или других мероприятий. Кроме того, имеются веб-сайты, активные только в течение определенных сезонов, например, праздников. Также веб-сайты могут поддерживать некоторые специфические действия, например, уведомлять в налоге на доходы вплоть до конечного срока — 15 апреля каждого года. Еще один вид веб-сайтов с ограничениями по времени — сайты, используемые для рекламы, которые «спят» ночью и автоматически масштабируются в течение дня.
Экономически оправданно хранить данные в облаке близко к месту, в котором выполняется приложение. Цена за гигабайт невысока, а обработка более эффективна, когда данные хранятся близко к серверам. Это может привести к тому, что со временем появится несколько новых классов приложений для облачных вычислений. Например, это могут быть приложения пакетной обработки для систем принятия решений и других аспектов бизнес-анализа.
Еще один класс новых приложений — приложения параллельной пакетной обработки, основанной на программных абстракциях. Интерактивные приложения для портативных устройств, обрабатывающие большие объемы данных от различных типов сенсоров и сервисов и комбинирующие данные из нескольких источников, — очевидные кандидаты на выполнение в облаке.
Ученые и инженеры могут получить значительный выигрыш от облачной обработки данных, поскольку многие приложения из их предметных областей производят интенсивные вычисления и интенсивно работают с данными. Аналогично, крайне полезно использовать облако для образовательных целей. Математическое ПО, такое как MATLAB и Mathematica, также может работать в облаке.
Разработка приложений, выбор, настройка и обеспечение производительности приложений, — все это задачи, необходимые для построения сбалансированной среды облачных вычислений. У вас будет много приложений, работающих совершенно по-разному, и этот стек приложений будет нуждаться в наблюдении и обслуживании.