Если облака – это взвешенные в атмосфере продукты конденсации водяного пара,
видимые на небе с поверхности земли, что же тогда облачные вычисления? Кластер
на небесах?

Cloud Computing

На самом деле, облачная обработка данных (англ. Cloud computing)
— это технология обработки данных, в которой программное обеспечение
предоставляется пользователю как интернет-сервис. Пользователь имеет доступ к
собственным данным, но не может управлять операционной системой и собственно ПО,
с которым работает (заботиться об инфраструктуре ему также не нужно).
Непосредственно "облаком" называют инет, который как раз и скрывает многие
технические детали. Это если вкратце. Теперь давай посмотрим на все чуть глубже.

 

На чем висит Cloud Computing?

В основе Cloud Computing лежат несколько подходов.

Первый - доступность через интернет. Конечно, бывают и закрытые
системы, но, как правило, все можно потрогать через сети (при этом, "наружу"
облако предоставляет себя как обычный сервер). Второй важный момент - это
виртуализация
. Благодаря виртуализации, пользователи получают столько
ресурсов, сколько им надо (и, разумеется, сколько могут позволить себе
приобрести). Что для этого требуется со стороны сервера и каким образом он может
выделить такие ресурсы - все сокрыто за стенами виртуальных машин; они могут
работать на сотнях и даже тысячах серверов, а зачастую – еще и в разных
дата-центрах. Третий момент: Cloud Computing - это услуга. В 60-е годы за
машинное время приходилось платить и ждать свободного часа. В Cloud Computing
используется схожий подход. И пусть стоять в очереди не нужно, – все услуги
также оплачиваются отдельно. Облако для пользователя – это некоторый набор
услуг
, которые потребляются и оплачиваются, порой без малейшего
представления, что же там используется внутри.

Возьмем самый простой пример – хостинг для 5 Гб данных и доступ к ним через
HTTP REST API. Покупая такую услугу, никто не задумывается, где физически
хранятся данные, какие накопители и RAID используются и т.д. Главное, что есть
нужный объем данных, который доступен всегда при помощи удобного интерфейса.

Четвертый момент – как ни странно, простота и стандартность. Да-да,
хотя облачность и стоит на переднем крае компьютерных технологий, это одно из
важнейших ее свойств. Здесь никаких тебе новых языков, сложных конфигурационных
файлов и многочасовых сессий в терминале для настройки всех демонов. Все, что
предлагается внутри облака, доступно через самые простые вызовы API и протоколы.
Огромную популярность завоевал так называемый протокол REST, с помощью которого
все операции над данными можно производить через http-запросы. Впрочем,
применяться могут и многие другие решения, более того, доступны готовые
библиотеки для разных языков программирования.

Теперь простой вопрос - зачем это все нужно? Отвечаю. За небольшие, в
общем-то, деньги ты получаешь доступ к надежнейшей инфраструктуре с необходимой
тебе производительностью. Uptime коммерческих систем, как правило, гарантируется
на уровне трех-пяти девяток (99.9% и выше), что означает не больше пары минут -
часа простоя в год. Не нужно быть семи пядей во лбу, чтобы задействовать такую
систему – тут используются простые и хорошо описанные протоколы и API. И что еще
важно - практически неограниченные возможности по масштабируемости! Приобретая
обычный хостинг, ты не сможешь прыгнуть выше головы и при резком всплеске
нагрузки рискуешь получить упавший на несколько часов сервис. В облаке
дополнительные ресурсы предоставляются по первому запросу. И если твой скрипт
взлома паролей потребует вдруг для расчета еще пару процессоров и гигабайт
памяти (подружка тоже читала наш журнал и закрыла свои фотки паролем), то это не
станет проблемой. И ведь смак в том, что такие ресурсы не надо покупать сразу,
оплачивая дикие счета - функциональность можно дорастить в любой момент. Именно
поэтому Cloud Computing - это настоящая находка для стартапов, хозяева которых
заранее не могут предугадать: выстрелит их проект или нет.

 

SaaS, Paas... Чур, не ругаться!

Варианты предоставления вычислительных мощностей сильно отличаются. Все, что
касается Cloud Computing, обычно принято называть словом aaS (aaS – две
буквы A, не то, что ты подумал!). Расшифровывается просто – "as a Service", то
есть "как сервис", или "в виде сервиса".

SaaS (Software-aaS), или приложения в виде сервисов - вариант, при
котором тебе предлагают использовать какое-то конкретное ПО, например,
корпоративные системы, в виде сервиса по подписке. Скажем, у предприятия нет
возможности или желания хостить внутренний Exchange-сервер для работы почты,
календарей и т.п. - и оно может купить его удаленно, с учетом всей необходимой
специфики. Часто ли такие сервисы доступны просто в бразуере? А ты пользуешься
Google Docs? Это и есть SaaS, только бесплатный.

PaaS (Platform-aaS) - в отличие от SaaS, предназначенного больше для
конечного пользователя, вариант для разработчиков. В облаке функционирует
некоторый набор программ, основных сервисов и библиотек, на основе которых
предлагается разрабатывать свои приложения. Самый яркий пример – платформа для
создания приложений Google AppEngine. Помимо этого, под PaaS понимают также и
отдельные части сложных систем, вроде системы базы данных или коммуникаций.

HaaS (Hardware-aaS) - один из первых терминов, означающих
предоставление некоторых базовых "железных" функций и ресурсов в виде сервисов.
Но вместо прямой аренды хостинга используется виртуализация. Поэтому, когда речь
идет о конкретном железе, понимаются некоторые абстрактные сущности, аналогичные
реальным железным (место под хранение, процессорное время в эквиваленте
какого-либо реального CPU, пропускная способность).

IaaS (Infrastructure-aaS) - считается, что термин пришел на смену HaaS,
подняв его на новый уровень. Для примера – это системы виртуализации,
балансировщики нагрузки и тому подобные системы, лежащие в основе построения
других систем.

СaaS (Communication-aaS) - подразумевается, что в качестве сервисов
предоставляются услуги связи; обычно это IP-телефония, почта и мгновенные
коммуникации (чаты, IM).

 

Какого цвета Cloud Computing?

Не все так просто в облачном королевстве, и сейчас на рынке существует
множество решений, называющих себя "клаудами". Рассмотрим типы архитектур, чтобы
легче было понять, что это такое.

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

VDS/VPS – это уже не просто хостинг, но еще никак не Cloud. Конечно, у
типичного VDS (Virtual Dedicated server) есть большинство атрибутов облака: тебе
дают виртуализированную среду, где можно разворачивать свои приложения или даже
ОС, объем ресурсов также ограничивается только твоим кошельком. Но на этом
сходства и заканчиваются – ресурсы сервера ограничены возможностями железного
сервера, на котором все крутится. Платишь ты тоже помесячно, а если вдруг каждую
пятницу вечером тебе надо быстро расширить сервер для приема толпы посетителей,
это никого не волнует.

Первым уровнем для настоящего Cloud-а будет предоставление виртуализированной
среды на базе некоторых стандартных "юнитов", которые по ресурсам могут
равняться на определенные реальные железные сервера (сугубо для легкости
сравнения и учета). Фактически, тебе выдается виртуальная машина, которая
работает на системах провайдера, а внутри нее есть все возможности для установки
сначала любой ОС (из поддерживаемых, конечно), а потом уже настройки
необходимого ПО. Ограничения такой машины, как уже сказано, выражаются в
некоторых приближениях к реальному железу, но, в отличие от VDS, могут гибко и
почти мгновенно быть изменены в большую или меньшую сторону. Также разрешено на
один аккаунт поднимать несколько таких виртуальных серверов; соответственно,
можно создать между ними свою сеть. Ты по-прежнему не знаешь, что там ниже
уровнем, чем слой виртуализации (наиболее часто используется Xen или VMware), но
дальше можешь делать все, что захочется. Расширение ресурсов также может
разниться – самый простой вариант, когда тебя не ограничивают в количестве таких
виртуальных серверов, однако их параметры выбираются из нескольких типовых
планов. Пример – Amazon EC2, где ты выбираешь из пяти различных типов инстансов.
Так легче для провайдера, однако, не для тебя, – если приложение не умеет
масштабироваться и добавлять новые сервера на лету.

"Самый облачный" вариант подразумевает наличие своеобразного ползунка (вроде
регулятора громкости), с помощью которого можно менять количество выделенных
твоему серверу ресурсов. Понадобилось 12 Гб оперативки - передвинул ползунок, и
через несколько секунды ресурсы сервера стали больше.

На рынке работают компании (к примеру, Mosso.com), предоставляющие как
облачные сервера, так и другие сервисы, вроде файлового хранилища или обычного,
но высоконадежного хостинга. Также отмечу Apatana Cloud, от разработчиков одной
из лучших IDE, Stax.net – это если тебе надо только масштабируемый хостинг
Java-приложения, или Engine Yard, если любишь побаловаться Ruby.

Разработчики так называемых web-OS часто позиционируют себя как облака, хотя
они лишь предоставляют некоторые приложения (SaaS-модель) – пусть и не обычный,
скажем, текстовый редактор, а целое семейство приложений, объединенных в общий,
схожий с настольными ОС интерфейс. Такой виртуальный десктоп доступен всегда и
везде, был браузер! Обычно, вебОС работают на базе AJAX-технологий или Flash.
Среди интересных систем отмечу Cloudo (www.cloudo.com),
eyeOS (eyeos.org, также
доступна как OpenSource) и Jooce (jooce.com).

 

Программы верхом на облаке

Облака третьего типа обладают максимальной гибкостью и расширяемостью, но это
оборачивается предоставлением не просто виртуальной машины или некоторых
ресурсов, но целых библиотек и API. Тебе дают возможность запускать собственные
приложения, часто серьезно ограничивая в выборе языка и дополнительных
библиотек. Зато такое приложение сможет реализовать "заветную мечту всех
облаков" и гибко получать ресурсы по запросу. Ограничений виртуальной машины ты
не видишь; более того, не подозреваешь об ее существовании: все, с чем работает
программа – это вызовы API и библиотек, предоставленных сервисом. Казалось бы,
разве можно что-то сделать в таких условиях? Еще как! Вообще, такая степень
абстракции сейчас модный тренд в IT.

Существует зависимость: чем проще язык и API, в рамках которых работают
программы, тем легче и гибче их масштабировать. Поэтому крайне сложно встретить
в облачных системах привычные для веб-разработчиков ресурсы, по крайней мере, в
стандартном виде. Взять хотя бы базы данных. Традиционные SQL-реляционные СУБД
крайне плохо подходят для масштабируемых систем (за редким исключением, вроде
Oracle или DB2). Вместо них используются собственные разработки, каждая из
которых обычно очень интересна в техническом плане, а также – сторонние открытые
решения. Одним из самых популярных решений стали key-value хранилища данных и
системы на базе Google BigTable, а также его открытых аналогов. Это очень похоже
на обычный кеш – любые данные приложение записывает в хранилище, ассоциируя их с
некоторым ключом, цифровым или простой строкой, потом извлекает или удаляет,
указывая ключ. Более продвинутые системы реализуют целые структуры данных,
списки, очереди и даже допускают приближенные к SQL выборки с сортировкой и
фильтрами. Зачастую достается и файловой системе, которая заменяется подобием
привычного хранилища, дополненного системой map/reduce для обработки больших
объемов данных.

Подобные особенности требуют пересмотра архитектуры существующих приложений,
когда требуется развернуть их в условиях облака. Непросто перейти от обычных баз
данных, особенно если раньше только и делал, что писал на PHP и MySQL!

 

Amazon и Google

С развитием технологий появилась возможность укрыться за слоем виртуализации
и промежуточных библиотек, так что программисту реальных приложений совсем не
надо думать о том, какой же там сервер под этим крутится. Подумай, ведь все
основные языки современности давно уже исполняются на собственных виртуальных
машинах! Разработчики оторвались от железа и возвращаться к нему не очень-то и
хотят. Если инфраструктура облака хорошо спроектирована, а язык выбран
правильно, то достаточно просто сделать так, чтобы большинство программ (заметь:
не все) смогли работать и масштабироваться практически линейно. При этом
разработчик и пользователь ничего не будет знать о том, как ты внутри запускаешь
все на десятке виртуальных серверов, каждый из которых работает на паре
реальных. Появление первого серьезного и доступного cloud-хостинга от Amazon-а
породило, по сути, целую индустрию, явив простым смертным самые продвинутые
технологии.

Наиболее известной системой такого рода является Google AppEngine,
который предоставляет некую "песочницу", ограниченную вполне конкретным API и
системными сервисами. "Песочница" ограничена несколькими языками – сейчас это
Python и Java, однако ресурсные ограничения достаточно либеральны, чтобы ты еще
долго о них не думал (заявлено, что сервис доступен бесплатно для сайтов,
имеющих до 5 миллионов хитов в месяц; более точные ограничения смотри в
документации). Сервис работает как бета, поэтому только недавно стало возможным
зарегистрироваться всем желающим. Цены на сервис для коммерческого использования
или тех, кому мало лимитов, разумны и сравнимы с конкурентами (как обычно –
оплата часов или некоторых абстрактных единиц ресурсов).

Как ни странно, такой же сервис выпустила другая "империя зла" - Microsoft
Azure
. В основе лежит специальная версия Windows Server 2008; остальные
сервисы, доступные разработчику, базируются на уже зарекомендовавших себя
технологиях - .NET Runtime, SQL Service, Live, SharePoint, Dynamics CRM.
Приложения имеют доступ ко всем сервисам посредством абстрагированного от
деталей API, через HTTP, REST, SOAP. Судя по включению в cloud типичных
бизнес-платформ, система будет в основном ориентирована на построение
корпоративных приложений и сервисов. Пока идет тестирование, можно получить
совершенно бесплатный доступ ко всем материалам.

Amazon – один из самых больших и масштабных игроков на рынке облачных систем.
Его сервисами пользуются множество компаний, почти все – стартапы, например,
нашумевший Twitter решил проблему масштабирования именно при помощи Amazon
EC2
. Расшифровывается, как Elastic Compute Cloud, и сегодня это самый
доступный и надежный вариант на рынке. Однако учти, что придется платить за все
ресурсы (передаваемые данные, процессорное время, хранение данных), а
возможности расширения каждого конкретного сервера все же ограничены. Также в
реальной работе надо учитывать массу нюансов, например, что при выключении
виртуальная машина (инстанс) не сохраняет данные и теряет свой IP-адрес.

Все облачные услуги от Amazon предоставляются под общим брендом Web Services
и включают, кроме EC2:

  • SimpleDB – сервис базы данных с простым интерфейсом и SQL-подобными
    возможностями;
  • Simple Storage Service или S3 для хранения больших объемов данных и
    REST-API для доступа;
  • CloudFront – распределенная сеть хранения и доставки контента;
  • Simple Queue Service – система очередей сообщений для создания
    распределенных приложений;
  • Elastic MapReduce – система обработки и анализа больших объемов данных
    на базе открытой Apache Hadoop.
 

Что мне стоит облако построить?

Не думай, что облачные штучки доступны только тем, у кого много денег. Хотя
ты недалек от истины, так как почти все компании не предлагают ничего на халяву
и, попользовавшись сервисом хотя бы час, тебе уже придется платить. Есть
приятные исключения, вроде Aptana Cloud, где можно без финансовых вложений в
течение 30 дней пользоваться самой маленькой виртуальной машинкой. Но если тебе
уже не терпится что-то попробовать разобрать своими руками, я расскажу о парочке
проектов, которые позволят бесплатно, то есть даром, создать в домашних условиях
аналоги Google AppEngine и Amazon EC2.

Как ты помнишь, AppEngine – это такая среда для исполнения программ (на
Python-е), где твой скрипт работает внутри облака в специальной песочнице и
взаимодействует с миром через API. Ресурсы для него выделяются динамически и
очень гибко. Это идеально подходит как для различных исследовательских проектов,
так и для быстрого построения веб-приложений, тогда точно можно не бояться
перегрузок и digg-эффекта. Открытая реализация называется AppScale и на ней
можно запускать те же самые программы, что и в оригинальной Google-поделке.

Если у тебя есть мощный компьютер, ты можешь развернуть такую систему на
нескольких виртуальных машинах, имитируя кластер, или же просто одолжить у
друзей несколько системников и собрать кластер в отдельно взятой комнате.
AppScale поставляется в виде уже настроенного образа Linux-системы, который
ставится или на виртуальную машину Xen, или на буржуйском Amazon EC2, а для
самых умных – работает на основе открытого аналога, Eucalyptus, о котором ниже.

Учитывай, что надо, как минимум, 4 сервера, а значит, компьютер должен быть
мощным, очень желательно – 64-битным. И – побольше памяти, ведь 4 Xen-а будут
кушать ресурсы с непомерным аппетитом! Детальная инструкция по установке и
запуску достаточно объемная, поэтому читай ее на официальном сайте:

http://code.google.com/p/appscale/wiki/Deploying_AppScale_via_Xen
. Если все
получится, у тебя будет свое собственное облако, где можно экспериментировать с
различными программами на питоне. Потом, если очень хочешь, их можно перенести и
на Google. Они должны работать совершенно одинаково, несмотря на то, что
AppScale опирается на открытые аналоги гугловских технологий (и не факт, что
внутри все работает точно так же).

Если Python тебя не устраивает, и ты хочешь попробовать что-то еще, можно
попытаться построить облачный хостинг виртуальных машин, такой же, как у Amazon
EC2, в котором ты и друзья могут инсталлировать свои собственные операционные
системы и творить там что угодно. Для этого используется другая открытая
разработка – EUCALYPTUS, что совсем не дерево, а Elastic Utility
Computing Architecture for Linking Your Programs To Useful Systems
. Если
кратко, – это промежуточная среда, которая работает на множестве компьютеров
(кластере) и предоставляет через веб и консоль возможность загрузить собственный
образ виртуальной машины и управлять им, получая тот самый Amazon, только
бесплатно. Говорят, что даже утилиты и API стырены аналогично амазоновским,
поэтому потренироваться сначала можно на них, а потом уже перейти на амазон,
если страшно наобум выбрасывать столько денег. Кстати, тот самый AppScale
отлично работает поверх Eucalyptus-а, избавляя тебя от необходимости химичить с
Xen и образами. Просто взял и запустил!

Если надо управлять множеством виртуальных машин, формируя из них одно или
несколько облаков, попробуй еще одну открытую разработку – Enomalysm (www.enomaly.com).
Это платформа, позволяющая объединить как коммерческие виртуальные машины (VMware,
KVM, Xen и другие), так и облачные системы типа Amazon EC2 в один большой
виртуальный дата-центр, управляемый одной веб-консолью. Доступ к платформе из
твоих приложений очень прост и основан на стандартных протоколах XMPP, REST,
JSON.

 

С небес на землю

Самое главное, что нужно понять: облачные системы – это средство для
получения некоторой среды, в которой могут работать как обычные виртуальные
машины с пользовательскими ОС, так и целые платформы для исполнения приложений.
Важным преимуществом Cloud-а является независимость от аппаратного обеспечения и
гибкая масштабированность, хотя в этом направлении еще много чего можно сделать.
Обычно в облаках размещаются молодые проекты, которые еще фиг знает, выстрелят
или нет. Поэтому лучше оплачивать все ресурсы (CPU, за каждый гигабайт трафика,
за место в хранилище) по часам. В этом отличие от обычного хостинга, где деньги
надо отдать сразу за месяц. Вторым преимуществом будет SLA – уровень
предоставления сервиса обычно намного выше, чем у стандартных хостингов, а
облако предлагает уровень надежности в 99,999. Так что, отказ любой из систем
или даже всего сервера/стойки никак не уронит твой сайт!

Если не хочется заморачиваться с установкой операционной системы,
виртуализацией и прочими сисадминскими деталями, выбирай облачные системы,
предоставляющие сразу платформу на твоем любимом языке (выбор, обычно – или Java
или Python). Ты будешь ограничен заранее заданным API, часто не будет хватать
обычных сервисов и приложений, в первую очередь SQL-базы данных, но когда
привыкнешь, сможешь делать приложения, которые выдержат миллионы хитов, а
сломать хрен кто сумеет! Облачные системы, как правило, гораздо лучше защищены,
да и до конечной ОС тяжело добраться, ведь там может быть несколько уровней
виртуализации, мониторинга и систем безопасности (попробовать, впрочем,
можно...).

 

DVD

Загрузить EUCALYPTUS можно c сайта
eucalyptus.cs.ucsb.edu
или же взять с нашего диска. Там же ты
найдешь исходные коды eyeOS.

 

INFO

Если хочешь разрабатывать серьезные приложения и знаешь Java, попробуй
GridGain (www.gridgain.com). Это один из мощнейших инструментов для создания приложений, идеально
работающих в облаках.

Самые популярные языки программирования в облачных системах: Java, Python,
JavaScript, Ruby, C# и, с некоторыми ограничениями – почти все языки, которые
могут работать поверх JVM.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии