Концепция Cloud Computing ("вычислительное облако") дает возможность масштабировать физические ресурсы (например, процессор и дисковое пространство) и предоставлять к ним доступ через Интернет; при этом обработка и хранение рассматриваются как сервис. Идея далеко не нова, однако благодаря развитию технологий виртуализации стало возможно еще более эффективно организовывать доступ к общим ресурсам посредством серверной виртуализации. Принцип Cloud Computing предполагает, что пользователь получает доступ к мощным вычислительным и дисковым ресурсам, совершенно не задумываясь о расположении и настройке этих ресурсов. Нетрудно догадаться, что Linux® здесь играет далеко не последнюю роль. Прочитайте эту статью и узнайте, почему из-за "облаков" выглядывает пингвин.
Читая материалы технических Web-сайтов, нельзя не наткнуться на термин "Cloud Computing" (linux cloud) . Говоря кратко, этот подход – это всего-навсего предоставление компьютерных ресурсов (обработки и хранения данных) в качестве сервиса. Такой подход дает возможность небольшими усилиями динамически расширять эти сервисы за счет установки новых серверов и систем хранения, причем для клиентов этот процесс будет незаметен. Идеи Cloud Computing близки другому подходу под названием utility computing, при котором вычислительные ресурсы рассматриваются как услуга, объем потребления которой учитывается подобно обычным коммунальным услугам (электричеству или воде). Концепции Utility и Cloud Computing преследуют схожие цели, а разница между ними в том, каким технологиям они обязаны своему появлению.
Важнейший принцип, лежащий в основе Cloud Computing, – это масштабируемость, а технологии виртуализации позволяют претворить его в жизнь. Виртуализация позволяет более эффективно задействовать сервер путем консолидации множества операционных систем и приложений на единственном общем компьютере. Виртуализация также дает возможность переноса работающего экземпляра гостевой операционной системы вместе со всеим работающими приложеними с одного сервера на другой, менее загруженный.
Внешне Cloud Computing выглядит как перенос компьютеров и систем хранения из предприятия в отдельную общую группу, или "облако". Конечный пользователь выставляет определенные требования к ресурсам (например, ему требуются вычисления и доступ в глобальную сеть с определенной скоростью), а "облако" собирает из своих внутренних компонентов нужные мощности и предоставляет их.
Но зачем вам добровольно терять контроль над своими ресурсами и позволять им виртуально существовать в "облаке"? На это есть несколько причин, я назову две из них, на мой взгляд, самые главные – это экономия средств и масштабируемость. Одна из целей, которую преследует Cloud Computing, – предоставить более дешевые ресурсы, чем те, которые есть у вас и которые вы сами обслуживаете. Помимо экономии, мы также получаем небывалую гибкость и масштабируемость, так как поставщик "облачных" ресурсов имеет возможность легко расширить виртуальную среду потребителя за счет своей виртуальной инфраструктуры, предоставив ему более высокую пропускную способность или более мощные вычислительные ресурсы.
Есть и экологическое преимущество Cloud Computing. Ресурсы можно сделать виртуальными, сделав сервер общим для нескольких разных приложений. При этом сервер будет использоваться более эффективно. Так, можно задействовать три разных сервера, на каждом из которых работает свое приложение. Но гораздо лучше дать возможность каждому серверу исполнять несколько операционных систем и приложений. В результате понадобится меньшее количество серверов, и как следствие – меньше места для их размещения (экономия пространства дата-центров) и меньше электроэнергии (экономия природных ресурсов).
Но Cloud Computing имеет и свои недостатки, некоторые из которых будут рассмотрены далее. А сейчас предлагаю погрузиться глубже в "облака" и понять, зачем все это нужно.
Архитектура Cloud Computing
При детальном рассмотрении "облако" представляет собой не единственный сервис, а набор сервисов. Каждый уровень на этом рисунке вносит свой вклад в предоставление сервисов.
Начнем с самого нижнего уровня, который отвечает за инфраструктуру (Infrastructure-as-a-Service или IaaS, инфраструктура как сервис). IaaS представляет собой сервис по аренде инфраструктуры, т. е. вычислительных ресурсов и систем хранения. К этим ресурсам относятся не только виртуальные серверы с гарантированной вычислительной мощностью, но и каналы связи требуемой пропускной способности для доступа к хранилищам данных и Интернет. Короче, на этом уровне предоставляется возможность временного использования компьютеров или дата-центров при требуемом качестве обслуживания, с возможностью исполнения произвольной операционной системы и программ.
Следующий уровень сервиса при движении на диаграмме вверх – уровень платформы (Platform-as-a-Service или PaaS, платформа как сервис). PaaS похож на уровень IaaS, но включает в себя операционные системы и сопутствующие службы, ориентированные на определенные приложения. Например, PaaS совместно с виртуальными серверами и системами хранения предоставляет определенную операционную систему и набор приложений (обычно в виде образа виртуальной машины, например, файла формата .vmdk для VMWare), а также доступ к различным специализированным локальным сервисам (например, базе данных MySQL). Другими словами, PaaS – это IaaS вместе со стеком приложений, выполняющим конкретную задачу.
И наконец, на самом верху схемы располагается наиболее простой предоставляемый уровень – уровень приложений (Software-as-a-Service или SaaS, программное обеспечение как сервис), который предполагает использование приложения из централизованной (и, возможно, удаленной – из "облака") системы для работы на локальном компьютере. SaaS является измеряемой услугой и позволяет как бы арендовать приложение и оплачивать только время работы с ним.
Так выглядит "облачные" Cloud Computing в самых общих чертах. В приведенной схеме опущены некоторые составляющие, например data-Storage-as-a-Service (dSaaS, хранилище как сервис). Это платная услуга по предоставлению места для хранения, причем размер платы зависит от максимального объема хранилища и условий доступа, определяемых пропускной способностью канала. Также стали появляться специальные "облачные" сервисы, обеспечивающие взаимодействие как между внутренними компонентами, так и с внешними системами (при помощи некого API), например Web.
Современное состояние Cloud Computing
За последние месяцы наблюдается стремительный рост инвестиций в Cloud Computing и сопутствующие области. Этот рост объясняется спросом на виртуальные "облачные" ресурсы. За прошедшие несколько лет появилось множество новых сервисов.
Очевидно, перечень существующих решений не исчерпывается этим списком и постоянно пополняется. Тем не менее список дает общее представление и позволяет сориентироваться в многообразии сервисов. Ссылки на некоторые решения из приведенного списка можно найти в разделе "Ресурсы".
Linux, open source и "облака"
Теперь разберемся, каков вклад Linux и сообщества open source в развитие Cloud Computing. Как и можно догадаться, их роль трудно переоценить.
Программное обеспечение как сервис
Концепция SaaS означает возможность пользования программой как услугой через Интернет. Одним из ранних воплощений SaaS являлись поставщики программных услуг (Application Service Provider, ASP), которые хранили или распространяли программы через Интернет своим подписчикам. За предоставление софта и его использование они взимали определенную плату. Получалось, что вы не покупаете программу целиком, а просто временно используете ее при возникновении потребности.
Одна из разновидностей SaaS – это работа с удаленно запущенными программами через Интернет. В частности, локальное приложение может использовать удаленные сервисы, которые мы называем Web-сервисами, либо пользователь работает с удаленным приложением через Web-браузер. Пример удаленного приложения – сервис Google Apps, дающий доступ к готовым приложениям через обычный Web-браузер. Обычно удаленно работающие программы имеют в основе некий сервер приложений, с помощью которого обеспечивается доступ к нужным сервисам. Сервером приложений называется программная среда, предоставляющая API имеющихся сервисов (например, API для управления транзакциями или доступа к базе данных). Среди известных серверов приложений можно назвать Red Hat JBoss Application Server, Apache Geronimo и IBM® WebSphere® Application Server. Есть и много других примеров, а обширный их список можно найти в разделе "Ресурсы".
Еще одним представителем SaaS является новейший браузер Chrome от Google. Этот браузер можно считать идеальной средой, заменяющей традиционный рабочий стол (desktop), через которую, помимо обычного Web-серфинга, пользователь получает доступ к различным приложениям (как локальным, так и удаленным).
Платформа как сервис
PaaS можно представить как готовую виртуальную платформу, состоящую из одного или нескольких виртуальных серверов (работающих на наборе физических серверов), операционных систем и специализированных приложений (таких как Apache или MySQL, обслуживающих Web-приложения). Иногда есть возможность выбрать подходящую платформу из имеющихся готовых, в других случаях клиент может предоставить образ виртуальной машины, содержащий все необходимые ему приложения.
Одним из интересных примеров PaaS является Google App Engine. Платформа Google App Engine дает возможность развертывать Web-приложения на основе отлично масштабируемой архитектуры Google. Делается это так: ваше Python-приложение помещается в изолированную программную среду (sandbox), которая обеспечивает доступ к нему через Интернет (в будущем планируется поддержка других языков программирования). Google создала API для Python, содержащий функции для хранения и управления данными, хранящимися на сервере (с помощью специального языка запросов Google – Google Query Language, GQL), а также для аутентификации пользователей, работы с изображениями и отправки электронной почты. Важно, что sandbox-среда ограничивает доступ выполняющегося Web-приложения к операционной системе. С одной стороны, платформа App Engine имеет ограниченную функциональность, с другой – с помощью нее вы можете создавать готовые Web-сервисы. Обратитесь к разделу "Ресурсы" для получения подробной информации.
Примечание: Написание приложений на основе App Engine бесплатно, однако при этом есть ограничения на скорость передачи и максимальный объем пользовательских данных. При создания же коммерческих Web-сайтов с App Engine вам придется заплатить.
Еще один пример PaaS – это проект 10gen, обозначающий как "облачную" платформу, так и доступный для скачивания пакет с открытым кодом, позволяющий создать свое собственное "облако". Программный стек 10g похож по функциональности на App Engine, однако есть и различия. Здесь вы можете создавать приложения на языках Python, jаvascript и Ruby. 10g также применяет программную изоляцию приложений и предоставляет надежную платформу, способную охватить большое количество машин (под управлением, конечно, Linux), исполняющий собственный сервер приложений 10gen.
Инфраструктура как сервис
Уровень IaaS означает использование компьютерной инфраструктуры как сервиса и характеризуется тем, что виртуальное аппаратное обеспечение предоставляется без программного стека, что отличает его от PaaS, а от клиента требуется предоставить свой образ виртуальной машины, который и будет запущен на одном или нескольких виртуальных серверах. IaaS является самой близкой к физическому представлению формой вычислений в виде сервиса (не считая доступа к физической аппаратуре). Самый известный коммерческий IaaS-проект – Amazon Elastic Compute Cloud (EC2). Он поддерживает разные типы пользовательских виртуальных образов, включающих в себя ОС и нужные программы. Вы снабжаете образ требуемыми приложениями, а EC2 запускает его на своих серверах, при этом вы оплачиваете время, дисковое пространство и сетевой канал.
Проект Eucalyptus (расшифровывается как Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems) – свободная реализация Amazon EC2, имеющая совместимый с ним интерфейс. Как и EC2, виртуализация ОС в Eucalyptus основана на Linux с Xen. Проект был разработан в Университете Калифорнии в Санта-Барбаре для исследований в сфере Cloud Computing. Он доступен для загрузки с сайта университета. Вы можете поэкспериментировать с Eucalyptus, попробовав общедоступное Eucalyptus-"облако" (Eucalyptus Public Cloud) с некоторыми ограничениями.
Еще одна IaaS-платформа для Cloud Computing – Enomalism – open source-система, похожая на EC2. Она имеет схожую с EC2 функциональность, основана на Linux и поддерживает как Xen, так Kernel Virtual Machine (KVM). Однако Enomalism – не чистая IaaS-платформа, так как включает в себя также и программный стек на основе Python и среды Web-приложений TurboGears.
Другие разработки в сфере Cloud Computing
Помимо к рассмотренных проектов, существует ряд других успешных open source-разработок для Linux, применимых в Cloud Computing. Открытую программную платформу на основе Java™ Hadoop можно отнести к PaaS, однако она ориентирована на передачу больших объемов данных между сетевыми серверами (разработчиков вдохновил проект Google MapReduce, позволяющий обрабатывать большие объемы данных). Как следствие, платформа применяется в системах Web-поиска и рекламы, например в Yahoo! Hadoop также имеет дочерние проекты по образу и подобию приложений Google: HBase повторяет функциональность базы данных Google BigTable, а Hadoop Distributed File System (распределенная файловая система Handoop, HDFS) аналогична Google File System (файловая система Google, GFS).
Проблемы и пути их решения
Очевидны две главные проблемы Cloud Computing – конфиденциальность и безопасность. Личные данные могут быть защищены путем шифрования, однако при выборе "облачной" системы необходима должная осмотрительность. Вспомним, что на заре появления Web на электронную торговлю тоже смотрели скептически. Тем не менее на сегодняшний день электронные транзакции насчитывают триллионы долларов в год, а значит, Cloud Computing возьмет на вооружения все существующие технологии (такие как Secure Socket Layers, SSL) защиты информации в Web.
Что дальше
Бурное развитие Cloud Computing началось совсем недавно, но Linux и Open Source уже берут бразды правления в свои руки. В Cloud Computing идут огромные инвестиции, поэтому очевидно, что централизованные дата-центры не останутся в стороне, а новые технологии и архитектуры не замедлят появиться на горизонте.