Лекция №27Введение в облачные вычисления
Облачные вычисления (cloud computing) — быстро развивающаяся область распределенных вычислений. Основная идея облачных вычислений — это предоставление потребителям готовой распределенной инфраструктуры, которая является прозрачной для выполняющихся приложений. Таким образом, при разработке облачных приложений можно игнорировать наиболее сложные для имплементации моменты, связанные с организацией распределенных вычислений, и вместо этого использовать высокоуровневые программные интерфейсы.
Другая особенность облачной архитектуры — эластичность, то есть возможность быстрого увеличения вычислительных мощностей, например, при увеличении нагрузки на систему. При этом подобные манипуляции автоматизированы с помощью системы управления облаком, а в некоторых случаях могут вообще происходить без вмешательства человека.
Основа для облачных вычислений — технологии, разработанные к началу XXI века:
- аппаратная виртуализация, сделавшая возможной быстрое масштабирование вычислительных ресурсов;
- распространение и стандартизация веб-сервисов;
- наработки в области распределенных вычислений, в частности, grid- и утилитарные вычисления.
Архитектура облачных систем состоит из трех уровней:
- инфраструктура как сервис (IaaS) — базовый уровень, предоставляющий доступ к вычислительным серверам, системам хранения данных и технологиям вроде балансировки нагрузки;
- платформа как сервис (PaaS) — промежуточный уровень, на котором находятся API для доступа к данным и проведения вычислений;
- программное обеспечение как сервис (SaaS) — наиболее высокий уровень, обеспечивающий доступ к пользовательским приложениям (например, редактирование документов в веб-браузере).
Типичный сценарий применения облачной архитектуры — использование PaaS, предоставляемой одним из крупных игроков рынка (например, Google), для создания приложений, которые взаимодействуют с клиентами (SaaS), а также средств анализа и обработки данных (например, с помощью методов машинного обучения).
Основа для облачной инфраструктуры — хранение данных. Для этой цели используются как неструктурированные хранилища (то есть распределенные файловые системы), так и базы данных с разной степенью структурированности. Основное препятствие при построении распределенных хранилищ сформулировано в виде так называемой CAP-теоремы:
Теорема (Брюэр, 2002). Не существует распределенной компьютерной системы, удовлетворяющей одновременно трем условиям:
- согласованность данных (consistency) — система выглядит для стороннего наблюдателя как единое целое, так что состояние системы для разных узлов не может быть противоречивым (но узлы могут «отставать»);
- доступность (availability) — на каждый запрос к данным будет за конечное время получен ответ об успешности его выполнения;
- масштабируемость (partition tolerance) — система продолжает функционировать, несмотря на возможную потерю сообщений между узлами или отказ части системы.
Поскольку распределенные системы, используемые в облаке, должны быть масштабируемыми, выделяют AP-хранилища (с возможной несогласованностью данных в некоторые промежутки времени) и CP-хранилища (с «теряющимися» запросами). Обыкновенные реляционные БД, соответствующие сигнатуре AC, плохо подходят для облачного хранения данных (хотя существуют их адаптированные модификации, такие как MySQL Cluster).
Используемые в облачных вычислениях базы данных можно классифицировать по используемым схемам данных. Большинство исходных данных для облака либо неструктурированны вовсе (например, изображения), либо структурированы слабо (например, документы в формате JSON). Таким образом, хранение информации в реляционных таблицах неэффективно; вместо таблиц используют подход NoSQL (not only SQL), в котором акцент делается на отсутствие жесткой схемы данных и нормализации. Выделяют четыре основных типа баз данных NoSQL согласно типу хранимых объектов:
- пары «ключ — значение» (часто используются для распределенного кэширования данных);
- столбцы данных;
- полуструктурированные документы вроде JSON;
- графы отношений между сущностями.
Для обработки данных в облачных системах используются особые методы вычислений.
Одна из наиболее распространенных моделей таких вычислений — MapReduce,
предложенная компанией Google. По своей сути она напоминает использование функций
map
и reduce
в функциональных языках программирования (например,
эти функции есть в Python), только для распределенных систем.
Среди используемых для обработки облачных данных алгоритмов можно выделить методы
машинного обучения (например, для составления контекстной рекламы или распознавания
лиц на фотографиях) и индексирования (например, для полнотекстового поиска
по большим массивам документов).