С облачными сервисами связывают надежды на заметные изменения в экономике. В этой связи показательно символическое заявление Шейна Робинсона, главного технологического стратега компании HP: «Если мы будем строить информационные технологии, используя облака, то можем создать качественно новую информационную экономику, способную справиться с вызовами, создаваемыми информационным взрывом и глобализацией, но этого мало, мы сможем придать окружающей среде экологическую устойчивость...»
Аналогичные высказывания по поводу миссии облаков можно услышать и в иной трактовке, и это свидетельствует в пользу того, что облака становятся важным экономическим фактором. Речь идет не только о традиционных информационных задачах – в дополнение к уже существующим технологическим «верблюжьим» аббревиатурам (IaaS, PaaS, SaaS), используемым для обозначения сервисов, предоставляемых облаками, появилась лишенная скромности EaaS (Everything as a Service).
И все же абсолютного согласия в отношении к облакам нет – некоторые встретили новую парадигму в штыки. Например, Ларри Элиссон, отвечая на заданный им самим вопрос «Черт возьми, что такое сloud сomputing», сказал: «Я не понимаю, что в этом свете мы должны делать иначе, чем делали раньше, разве что изменить некоторые слова в рекламных слоганах. Это дурь». Правда, это было сказано еще до эпопеи по приобретению Sun Microsystems. Не отстал в категоричности и Эрик Рэймонд, заявивший: «Это тупость, это хуже, чем тупость, это маркетинговая шумиха».
Из-за этой сумятицы во мнениях непродолжительное время оставался открытым вопрос: cloud computing – пустой треп или приложение-убийца? Но сегодня ответ однозначен. Практически все крупные ИТ-производители так или иначе включают облачные продукты в свои программы.
Поначалу среди специалистов не было единства мнений по сути облачных решений. При опросе 20 экспертов, проведенном в 2008 году журналом Cloudcomputing, было получено 20 разных ответов, причем общим было отсутствие оптимизма. За минувшие два года ситуация заметно изменилась и наметились явные тенденции к консолидации точек зрения. Из множества устоявшихся определений остановимся на одном, принадлежащем ведущему специалисту с сфере grid Яну Фостеру: «Cloud computing – высшая фаза распределенных компьютерных систем; их появление и быстрое развитие вызвано необходимостью за разумные деньги создавать решения с неограниченными возможностями масштабирования».
Терминология
В публикациях данный термин обычно представляют как народный, объясняя его облачком, которым изображают на картинках Интернет, однако фольклор здесь ни при чем. Своим появлением термин cloud computing обязан Эрику Шмидту, в настоящее время занимающему пост генерального директора Google. Еще работая в должности директора по технологиям Sun Microsystems, Шмидт пришел к выводу о родственности сети и компьютера, позже растиражированном в девизе Sun Microsystems «Сеть – это компьютер». Этот девиз – доведенная до предельного лаконизма мысль, высказанная Шмидтом еще в 1993 году: «Когда сеть станет такой быстродействующей, как процессор, компьютер как таковой перестанет существовать, он распространится по сети». Три слова: «Сеть – это компьютер» много лет интриговали компьютерную общественность, а о пророчестве Шмидта вспомнили только через полтора десятка лет. Термин cloud computing Шмидт первым использовал в августе 2006 года в интервью по окончании конференции Search Engine Strategies Conference: «У нас на глазах рождается новая модель компьютерных систем, и мне кажется, что насчитывается не так много людей, которые способны понять открывающуюся перспективу. Суть ее в том, что сервисы, поддерживающие данные и архитектуру, размещены на удаленных серверах. Данные находятся на этих серверах, на них же выполняются необходимые вычисления... И если в вашем распоряжении соответствующий браузер и соответствующие права доступа, то вы можете получить доступ к этому облаку независимо от используемого устройства».
На это выступление Джордж Гилдер, известный писатель и футуролог, откликнулся в октябре 2006 года своей статьей «Информационные фабрики», где идея облака была представлена более детально, а автор провозгласил начало петабайтной эры и предрек смерть ПК.
В России укрепился перевод «облачные вычисления», с которым трудно согласиться, поскольку из двух значений, имеющихся в английском языке для слова computing, выбрано явно не соответствующее контексту. Исторически первым значением действительно является «вычисления», но со временем появилось и второе – «использование компьютеров» (см. словарь Merriam-Wenster); его-то и следует употреблять в данном случае, уж коли теперь мы говорим и пишем «компьютер», а не «ЭВМ».
Предыстория
Большая часть используемых людьми технологических достижений потребляется в виде сервисов из почти известных им источников, причем предпосылки к тому, что мы теперь называем облачным подходом, возникли еще на заре информационных технологий. Раньше всех по этому поводу высказался Нильс Барричелли, математик, работавший в знаменитом Институте передовых исследований (Institute of Advanced Studies, IAS) вместе с Джоном фон Нейманом. В 1953 году он описал умозрительную на тот момент возможность существования некоего условного пространства, в котором машины смогут кооперироваться при выполнении задач. В 1961 году один из отцов искусственного интеллекта Джон Маккарти высказал предположение, что вычисления смогут быть организованы примерно так, как обычные коммунальные услуги. Ближе всех из первопроходцев к идее облака был Джозеф Ликлайдер, в своем меморандуме, посвященном «межгалактической компьютерной сети» (1963 год): «В будущем я смогу пользоваться определенными сетевыми функциями, осуществляя выборку нужных мне данных с помощью системы, которая подберет необходимые мне программы. Для этого она будет использовать предложенные ей описания, которые со временем можно будет делать на естественном языке. Между заимствованными программами и моими собственными можно будет устанавливать связь... выполнение задач может происходить где угодно». Идеология Ликлайдера стала базисом для создания первой компьютерной сети ARPAnet в 1969 году. Последующие события, в том числе создание стандарта на электронный обмен данными EDI (Electronic Data Interchange, 1975), запуск Web 1.0 (1994), создание XML (1998), опубликование Microsoft концепции Software as a Service, принятие стандартов WSDL, UDDI и SOAP (2000), начало эксплуатации Amazon EC2 (2006), в конечном итоге привели к появлению облаков.
На вопрос, почему именно облаков, можно найти ответ в предложенной директором по технологиям Sun Microsystems Грегом Пападопулосом технико-экономической теории, получившей название «Красное смещение» (Red Shift). В соответствии с этой теорией большинство цифровых показателей, относящихся к приложениям определенного типа, удваивается менее чем за два года, и для удовлетворения их потребностей требуется иная вычислительная среда, которая должна обладать качеством, названным «гипермасштабирование» (hyperscale). Традиционные ЦОД к этому не способны, к тому же они используются крайне неэффективно, и даже виртуализация не позволяет повысить их КПД выше 15%. Мало того, наращивание мощностей обычных корпоративных ЦОД вызовет отставание их возможностей от потребностей пользователей; возникающее при этом смещение Пападопулос по аналогии с известным астрономам эффектом именовал красным. Окончательный вывод – необходимо уходить в облака, где более эффективное совместное использование ресурсов может компенсировать последствия красного смещения.
У облачного подхода, как и у марксизма, обнаруживается три основных источника, три типа организации компьютерных систем, о которых говорили последние лет десять: распределенный (grid), коммунальный (utility) и автономный (autonomy), плюс разнообразные технологии виртуализации. Основой архитектуры является grid, коммунальному подходу соответствуют идеи сервисов, а автономный определяет принципы функционирования.
Grid и облака
Появлению grid предшествовал метакомпьютинг – «мета» в том смысле, что вычислительная среда состоит из компьютеров (computing of computing). Точно так же, но как имя собственное, термин Metacomputing в 80-е годы использовался в проекте американского Национального центра суперкомпьютерных приложений по объединению суперкомпьютеров. А дальше Ян Фостер и Карл Кессельман начали работу над проектом Globus Toolkit, в 1997 году они описали Globus Toolkit и доложили на семинаре в Арагонской национальной лаборатории, а спустя год опубликовали книгу The Grid: Blueprint for a New Computing Infrastructure, которая заслужила неофициальное название «Библия grid».
Можно ли сказать, что cloud computing являет собой следующую инкарнацию метакомпьютинга? В ИТ, где каждые пять лет происходят радикальные изменения, дать однозначный ответ сложно. С одной стороны, идея почти та же, что и в grid, – в облаке аккумулируются мощности, чтобы получить более экономичное, масштабируемое решение и избавить пользователя от необходимости работать исключительно на собственном оборудовании. Но с другой стороны, за десять лет с момента появления идеи grid ситуация претерпела качественные перемены. Принципиально изменились объемы обрабатываемых данных, казалось бы, проблема решается переносом вычислений с мэйнфреймов на кластеры, собираемые из ширпотреба, но такие системы получаются неудобными и дорогими в эксплуатации. В то же время появились виртуализационные решения, снимающие ряд вопросов, возникли коммерческие ЦОД, обладающие практически неограниченными возможностями для масштабирования.
Бизнес-модель, типичную для grid, можно назвать проектно-ориентированной. Предприятия передают свои ресурсы под управление администрации grid, создавая таким образом распределенный пул ресурсов, физическая организация которого может быть вообще неизвестна пользователю, он в форме сервиса получает потребные ему, возможно, очень большие по объему ресурсы, за которые он расплачивается по мере их использования.
Архитектуры grid и облаков заметно различаются, поскольку создавались исходя из разных предпосылок. На первые повлияло стремление как можно эффективнее использовать дорогостоящие распределенные вычислительные ресурсы, сделать их динамическими и однородными. Поэтому архитектура сфокусирована на интеграции уже существующих ресурсов, включая оборудование и программное обеспечение, операционные системы, локальные средства, обеспечивающие управление и безопасность. В результате создается «виртуальная организация», ресурсы которой, переведенные в логическую форму, могут потребляться членами только этой организации. Существование этой организации поддерживается пятью уровнями протоколов, инструментами и сервисами, построенными поверх них (рис. 1а). Нижним является инфраструктурный уровень (fabric layer), объединяющий компьютеры, системы хранения, сети, репозитории кодов. Выше него расположен уровень связности (connectivity layer), на нем определены коммуникационные протоколы и протоколы аутентификации. Ресурсный уровень обеспечивает предоставление ресурсов, возможности управления ими, разделение между отдельными пользователями и оплату. Коллективный уровень (collective layer) дополняет ресурсный, позволяя оперировать наборами ресурсов. Уровень приложений (application layer) служит для поддержки приложений.
Архитектура облаков открыта для доступа через Сеть, а не только в рамках grid. Обращение к пулам вычислительных ресурсов и системам хранения данных осуществляется по стандартным протоколам, например таким, как WSDL и SOAP, или с помощью более продвинутых технологий Web 2.0 (REST, RSS, AJAX), а также через существующие технологии grid. Протоколы облаков можно разделить на четыре уровня (рис. 1б). Инфраструктурный уровень (fabric layer) содержит «сырые» компьютерные ресурсы (серверы, системы хранения, сети). Уровень унификации ресурсов (unified resource layer) содержит те же ресурсы, но в абстрагированном виде – они могут быть представлены пользователям и верхнему уровню как виртуализованные серверы, кластеры серверов, файловые системы и СУБД. Уровень платформ (platform layer) добавляет набор специализированных инструментов, связующее ПО и сервисы поверх универсальных ресурсов, образуя среду для разработки и внедрения приложений. Уровень приложений (application layer) содержит приложения, исполняемые в облачной среде.
С пользовательской позиции сервисы облаков можно разделить на три основных уровня – IaaS (Infrastructure as a Service), PaaS (Platform as a Service) и SaaS (Software as Service). Помимо них могут быть доступны и востребованы IdaaS (Identification as Service, управление идентификацией), HPCaaS (High Performance as a Service, высокопроизводительные вычисления) и другие специализированные сервисы.
IaaS обычно предоставляет унифицированные аппаратные и программные ресурсы, но в некоторых случаях и на инфраструктурном уровне для установки ПО с оплатой по мере использования. Заказанная инфраструктура может динамически масштабироваться. Типичные примеры – Amazon EC2 (Elastic Cloud Computing) Service и Amazon S3 (Simple Storage Service).
PaaS предоставляет более высокий уровень сервиса, позволяющий разрабатывать, тестировать и внедрять пользовательские приложения. Встроенная масштабируемость накладывает ограничения на тип разрабатываемых приложений. Пример – сервис Google App Engine, позволяющий внедрять Web-приложения на той же системе, на которой работают собственные приложения Google.
Software as a Service (SaaS) предлагает готовое специализированное ПО. Канонический пример – Salesforce и ее онлайновая система управления отношениями с клиентами.
Коммунальный подход и облака
Идея оптимизации использования ресурсов за счет их разделения появилась еще в 1957 году, когда Боб Бремер предложил делить время центрального процессора между несколькими задачами. В том же году под руководством Джона Маккарти была создана операционная система Compatible Time-Sharing System (CTSS), поддерживающая такой режим на мэйнфреймах IBM 704 и IBM 7090. С тех пор было создано множество разнообразных систем совместного использования ресурсов. Отличительная черта коммунальной модели состоит в том, что здесь распределение ресурсов (скажем, время процессора) осуществляется не напрямую, а опосредованно, в форме сервисов, плюс вводится специальная модель оплаты за эти сервисы, построенная на принципах pay-per-use («оплата по мере использования»). Оплата может осуществляться исходя из числа пользователей, объема использованных данных, времени использования серверов.
Коммунальность – важнейшая черта современного компьютерного мира, но ее нельзя абсолютизировать так, как это делает Николас Карр, главный апологет Utility Computing, который видит будущее исключительно в коммунальности. Доказательству своего убеждения он посвятил книгу «Великий перелом» (The Big Switch). Характеризуя так грядущие события, Карр сравнивает роль, которая будет принадлежать информации в XXI веке, с ролью, которую сыграло электричество в XX веке. Он говорит об «эффекте динамо»; эту метафору используют, когда хотят показать, что электрический привод стал выгодным только тогда, когда появились машины и механизмы, созданные специально в расчете на него. А в начале XX века паровые машины заменяли громоздкими электрическими моторами, устанавливая их по одному на цех, используя для распределения крутящего момента, как и прежде, ременные трансмиссии. Такое решение не было эффективным – применение электричества показало свои преимущества лишь тогда, когда двигатели переместились к местам их непосредственного использования. Карр пишет: «Решающим в активном распространении электрического привода стало создание энергосистем. То же самое можно сказать и о коммунальной модели в области ИТ, она станет реальной, когда к каждому рабочему месту будет обеспечена скорость доступа не менее 100 Мбит/с».
Здесь Карр совершает свою основную ошибку. Разумеется, подводка электрического кабеля к каждому станку, а применительно к ИТ – кабеля для передачи данных к каждому рабочему месту важны, но эта индивидуализированная передача возможна только при наличии того ресурса, который можно распределять. Следовательно, критичнее иное условие, а именно создание централизованной системы выработки энергии и ее транспортировки, то есть электростанций и энергосистем, без них ни большие, ни маленькие двигатели работать не смогут. В равной мере сказанное относится и к коммунальным ИТ-системам – им нужны системы, функции которых как раз и берут на себя облака как информационные аналоги электростанций и высоковольтных линий передачи энергии. Облака позволяют разрабатывать, внедрять и выполнять приложения без ограничений по масштабированию, выполнять их с высокой скоростью и обеспечивают приложениям и данным высокий уровень надежности. Для этого необходимо, чтобы они обладали несколькими основными качествами.
Прежде всего, облака должны быть готовы к работе с корпоративными приложениями и должны подчиняться требованиям соглашений об уровне обслуживания. Управление облаками осуществляется в динамическом режиме с учетом таких факторов, как условия поставки сервисов, стоимость, приоритет пользователя (в случае пиковых нагрузок предпочтение может быть отдано клиенту с более высоким приоритетом). Все эти требования распространяются на IaaS и SaaS.
Предоставление инфраструктуры в качестве сервисов первоначально называли HaaS (Hardware as a Service), то есть «аппаратное обеспечение как сервис»; иногда еще говорят о «рабочем месте как сервисе» – WaaS (Workplace as a Service). Основное достоинство IaaS в возможности получать линейно масштабируемые ресурсы практически без ограничения и платить за них по мере использования. В основе IaaS лежат современные технологии виртуализации отдельных серверов и ЦОД в целом. Необходимость в переходе на нижний уровень в архитектуры IaaS возникает в том случае, если используется какое-то нестандартное ПО, то есть когда потребность не может быть удовлетворена на уровне SaaS. При оценке потенциала IaaS необходимо учитывать, что, несмотря на все слова об облачности и виртуальности, приложения работают на реальных физических серверах, а это значит, что надо учитывать, что эти серверы имеют определенные характеристики: большинство из них построено на платформе LAMP (Linux, Apache, MySQL и Perl/PHP/Python), и не для всех приложений это лучший выбор; предприятия уже имеют собственные ресурсы, которые надо загружать; могут иметь значение законодательные акты, действующие на той или иной территории.
Для обеспечения линейного масштабирования SaaS теоретически возможны два архитектурных подхода – multi-tenancy и multi-instance. Первое – это специальный прием программирования или архитектурное решение, поддерживающее использование одновременно несколькими клиентами одного экземпляра программы. В основе нового термина лежит слово tenant, который буквально означает «жилец»; действительно, для иллюстрации multi-tenancy ничего точнее, чем коммунальная квартира, в русском языке не найти, поэтому можно было бы называть такую архитектуру коммунальной, если бы это слово уже не было использовано для utility computing. В отличие от физической коммунальной квартиры виртуальная облачная квартира имеет раздвижные перегородки, и ее конфигурацию можно менять по мере необходимости. Итак, multi-tenancy можно интерпретировать как технологическое решение, позволяющее нескольким пользователям независимо друг от друга разделять один и тот же ресурс, не нарушая при этом конфиденциальности и защиты принадлежащих им данных.
Альтернативой multi-tenancy является архитектура multi-instance (instance – «образец», «экземпляр»), позволяющая для каждого пользователя выделять его собственную часть облака для выполнения своих приложений. Преимущества такого подхода в большей надежности: падение одного экземпляра не влияет на другие, а данные строго разделены. Можно сказать, что архитектура multi-instance возвращает нас в исторический период «одно приложение – один сервер», но на качественно ином уровне, серверы являются виртуальными машинами. Виртуальность обеспечивает multi-instance масштабируемость, сопоставимую с коммунальной архитектурой.
Самоуправляемые системы
В ее нынешнем виде идея самоуправления в приложении к компьютерным системам была сформулирована IBM в 2001 году в специальном манифесте Autonomic Computing, опубликованном от лица директора корпорации по исследованиям и разработкам Пола Хорна. В этом документе проводится одна простая мысль: по достижении системой определенного уровня сложности исчерпываются ресурсы ручного управления и возникают потребности и возможности для автоматизации управления или самоуправления.
В перспективе самоуправление должно распространиться на нижние инфраструктурные уровни (рис. 2), и их развитие не может быть сведено к экстенсивному расширению ЦОД, построенных на принятых сегодня принципах. Если не вводить в них принципы самоуправления, то с неизбежностью возникнут неразрешимые проблемы структурной сложности. Основная идея autonomic computing состоит в том, что система сама может адаптироваться к целям, которые ставит перед ней администратор, чтобы она могла включать в себя дополнительные компоненты без вмешательства человека. Технологии виртуализации и сервисные архитектуры, лежащие в основе облаков, открывают возможности для практической реализации идей самоуправления. Самоуправление, в свою очередь, дает возможность для реализации коммунальной архитектуры, поскольку обеспечивает динамическую перестройку инфраструктуры.
Проанализировав три источника, можно дать такое определение облачному компьютингу – это предоставляющая сервисы распределенная самоуправляемая компьютерная среда.