Анатомия облака с открытым кодом

Собираем по кирпичикам решение «инфраструктура как сервис» (Infrastructure as a Service)

Облачные вычисления сегодня являются уже не зарождающейся, а ценной и важной технологией, коренным образом изменяющей подходы к использованию и разработке приложений. Как можно ожидать, Linux® и решения с открытым кодом предоставляют фундамент для организации облака (как с открытой, так и закрытой инфраструктурой). Изучите анатомию облака, его инфраструктуру и технологии с открытым кодом, используемые для создания этих динамических и масштабируемых платформ вычислений и хранения данных.

M. Тим Джонс, инженер-консультант, Emulex Corp.

М. Тим ДжонсМ. Тим Джонс - архитектор встроенного ПО и, кроме того, автор книг Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (выдержавшей на данный момент второе издание), AI Application Programming (второе издание) и BSD Sockets Programming from a Multilanguage Perspective. Он имеет обширный опыт разработки ПО в самых разных предметных областях - от ядер специальных ОС для геосинхронных космических аппаратов до архитектур встраиваемых систем и сетевых протоколов. Тим - инженер-консультант Emulex Corp., Лонгмонт, Колорадо.



15.06.2011

Развить навыки по этой теме

Этот материал — часть knowledge path для развития ваших навыков. Смотри Облачные вычисления: Основы

Использование облака в качестве абстракции довольно типично для распределенных систем, подобных Интернету. Однако в последние годы этот термин стал применяться и для виртуальных масштабируемых инфраструктур, предоставляемых в качестве сервиса (локально либо удаленно). В этой статье мы обойдемся без рассмотрения детальных определений облачной инфраструктуры и ее преимуществ; при желании вы можете ознакомиться с ними в материалах, указанных в разделе Ресурсы.

Анатомия облачных вычислений

Мы начнем эту статью с изучения базовых абстракций облачной архитектуры (с понятия «инфраструктура как сервис» - Infrastructure as a Service, IaaS), после чего перейдем к рассмотрению средств создания ее компонентов, а затем и к более интегрированным решениям.

Часто используемые сокращения

  • API: интерфейс программирования приложений
  • I/O: ввод/вывод
  • SLA: соглашение об уровне сервиса
  • UI: пользовательский интерфейс

Виртуализация предоставляет уникальные преимущества, хотя и не является обязательной для создания динамически масштабируемых архитектур. Помимо масштабируемости, виртуализация предоставляет возможность переносить виртуальные машины (virtual machine, VM) между физическими серверами в целях выравнивания нагрузки. Как показано на рисунке 1, виртуализация обеспечивается программным уровнем, который называется гипервизором (другое название - монитор виртуальных машин - virtual machine monitor, VMM). Этот уровень обеспечивает возможность одновременной работы множества операционных систем (и их приложений) на одной физической машине. В гипервизоре имеется объект, называемый виртуальной машиной, который инкапсулирует в себе операционную систему, её приложения и конфигурацию. Также гипервизор или виртуальная машина могут эмулировать работу различных устройств. Наконец, для новой динамической природы виртуализации и новых возможностей, которые она предоставляет, необходимы новые схемы управления. Это управление лучше всего осуществлять на различных уровнях, разделяя локальное управление на сервере и более высокоуровневое управление инфраструктурой, обеспечивая тем самым всеобъемлющее управление виртуальной средой.

Рисунок 1. Базовые элементы узла облака
An architectural chart shows a layer view of the core cloud elements

Если взять узлы из рисунка 1 и размножить их в физической сети с совместным доступом к устройству хранения данных, организовать управление всей этой инфраструктурой, а затем обеспечить балансировку нагрузки от входящих соединений (если ваша система находится в открытом доступе), а также кэширование и фильтрацию, то получится виртуальная инфраструктура, именуемая облаком. Эта новая конструкция показана на рисунке 2. Бездействующие машины можно выключить до тех пор, пока не появится необходимость в дополнительных вычислительных мощностях (что обеспечивает лучшую энергоэффективность) при этом виртуальные машины можно распределять (даже динамически) между узлами в зависимости от их индивидуальной загруженности.

Рисунок 2. Инфраструктура облачных вычислений
Diagram shows how the various layers of cloud interact, starting with physical networking/storage and working up to the users/Internet

Мы определили основные элементы архитектуры облака, а теперь давайте посмотрим, какие решения с открытым кодом применяются для построения динамичной облачной инфраструктуры.


Основные технологии с открытым кодом

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

Гипервизоры

Основой облака на уровне узла является гипервизор. Хотя виртуализация не является обязательным требованием к облачным средам, она предоставляет широкие возможности для создания масштабируемых и энергоэффективных архитектур. Имеется немало открытых решений для виртуализации, однако ключевыми являются два решения, превращающие операционную систему Linux в гипервизор: Linux Kernel Virtual Machine (KVM) и Lguest. Гипервизор KVM является официальным решением, используемым в производственных средах. Lguest - это сфокусированное на Linux решение, позволяющее запускать только виртуальные машины с Linux, однако это решение интегрировано в ядро и становится все более популярным.

Помимо преобразования Linux в гипервизор, есть и другие решения, фокусирующиеся на гостевой виртуальной машине. Одно из них – это пользовательский режим Linux (User-Mode Linux, UML), в котором ядро гостевой системы Linux специальным образом модифицируется для работы поверх другой операционной системы Linux (без расширений гипервизора). Большинство пользователей хотят запускать неизмененное ядро, поэтому для них предпочтительнее решения полной виртуализации (например, KVM).

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

Эмуляция устройств

Гипервизор предоставляет средства для совместного доступа к ресурсам процессора множеству операционных систем (виртуализация процессора), однако для обеспечения полной виртуализации необходимо реализовать для виртуальных машин полностью виртуальную среду. Эмуляцию машины или платформы можно осуществлять различными средствами, среди которых стоит отметить QEMU - популярный пакет с открытым кодом, поддерживающий различные гипервизоры. QEMU - это полноценный эмулятор и гипервизор. Однако в KVM QEMU используется для эмуляции устройств в виде отдельного процесса пользовательского пространства (см. рисунок 1). Интересной возможностью QEMU является то, что благодаря эмуляции дисков (в формате QCOW) в QEMU доступна такая продвинутая функциональность, как создание снимков системы и миграция виртуальных машин на лету.

В KVM начиная с версии ядра 2.6.25 для оптимизации производительности виртуального ввода/вывода применяется инфраструктура virtio. В ней используются находящиеся в гипервизоре паравиртуальные драйверы с обработчиками прерываний, позволяющими довести производительность гостевой операционной системы почти до уровня хост-системы. Этот подход работает только в случае, если есть возможность специальным образом изменить гостевую операционную систему. Он нашел применение в гостевых системах Linux, работающих на гипервизоре Linux.

В настоящее время virtio и QEMU совместно работают над оптимизацией транзакций эмулируемых устройств, выполняемых между гостевой системой Linux и эмулятором QEMU в пользовательском пространстве.

Виртуальная сеть

При консолидации виртуальных машин на физических серверах растут требования к производительности работы сети на платформе. Однако вместо реализации работы сети виртуальных машин на физическом уровне платформы можно также виртуализировать их локальное взаимодействие. Для оптимизации сетевой производительности виртуальных машин служит виртуальный коммутатор, или vSwitch. Он работает как физический коммутатор, однако является частью платформы виртуализации (см. рисунок 3). На этом рисунке виртуальные интерфейсы (virtualized interfaces, VIF), ассоциированные с виртуальными машинами, взаимодействуют посредством виртуального коммутатора с физическими интерфейсами (physical interfaces, PIF).

Рисунок 3. Высокоуровневое представление открытого виртуального коммутатора Open vSwitch с виртуальными и физическими интерфейсами
Diagram shows layers starting on the bottom with the pysical domain, then physical interfaces, virtual interfaces and the VMs at the top

Для решения этой проблемы имеется очень интересное решение с открытым кодом, называемое Open vSwitch. Помимо реализации виртуального коммутатора для виртуальных сред, vSwitch также может интегрировать несколько физических платформ и предоставлять функциональность корпоративного уровня, такую как виртуальные локальные сети (virtual local area networks, VLAN), основанное на приоритетах качество обслуживания (Quality of Service, QoS), агрегация каналов и поддержка аппаратного ускорения (например single-root I/O virtualization, IOV, для сетевых адаптеров). Решение Open vSwitch доступно начиная с ядра версии 2.6.15; оно поддерживает ряд решений виртуализации (Xen, KVM, VirtualBox) и стандартов управления (Remote Switched Port Analyzer [RSPAN], NetFlow и т.д.).

Инструменты и технологии для работы с виртуальными машинами

Так как виртуальные машины представляют собой объединение операционной системы, корневой файловой системы и конфигурации, имеется очевидный спрос на разработку инструментов для работы с ними. Однако чтобы ощутить весь потенциал виртуальных машин и инструментов, должен существовать переносимый способ для их сборки. Текущий подход, называемый Open Virtualization Format (OVF), - это гибкий, эффективный и переносимый способ создания виртуальных машин. OVF создает для образа виртуального диска XML-обертку, в которой определяется конфигурация виртуальной машины, в том числе настройки сети, требования к процессору и памяти и множество расширяемых метаданных для еще более подробного описания образа и требований к платформе. Ключевой качеством OVF является то, что с его помощью можно распределять и переносить виртуальные машины независимо от гипервизора.

Есть несколько утилит для управления образами виртуальных машин (VM images, VMI), а также их конвертации из одного формата в другой. Разработанная VMware утилита ovftool - это полезный инструмент, который можно использовать для конвертации VMI (например, для преобразования формата VMDK - VMware Virtual Disk Development Kit в OVF). Этот и другие инструменты полезны, если у вас есть VMI-образ, однако что делать, если у вас есть физический сервер, который вы хотите конвертировать в VMI? Для этого можно использовать инструмент Clonezilla. Хотя изначально он разрабатывался как инструмент клонирования дисков для восстановления после аварий, его можно использовать для конвертации физического сервера в образ виртуальной машины, который затем легко развернуть в виртуальной инфраструктуре. Формат OVF набирает популярность, и уже есть несколько готовых, а также находящихся в разработке инструментов (например, утилиты, построенные поверх libvirt) для конвертирования образов и управления ими.

Локальное управление

В данной статье мы рассмотрим управление виртуальной средой с двух точек зрения. В этом разделе мы обсудим управление платформой, а в следующем перейдем к более высокоуровневому управлению инфраструктурой.

Red Hat представила библиотеку libvirt в качестве API для управления платформой виртуализации (гипервизорами и виртуальными машинами). Интересно то, что libvirt поддерживает несколько типов гипервизоров (среди которых KVM и Xen), а также предоставляет привязки к своему API для нескольких языков (например, C, Python и Ruby). Она реализует "последнюю милю" управления, взаимодействуя непосредственно с гипервизором платформы и расширяя API-интерфейсы для более крупных решений управления инфраструктурой. С помощью libvirt легко запускать и останавливать виртуальные машины; она также предоставляет API-интерфейсы для более сложных операций, таких как миграция виртуальных машин между платформами. Можно также использовать shell-оболочку libvirt (построенную поверх libvirt), которая называется virsh.


Открытые технологии уровня инфраструктуры

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

Технологии ввода/вывода

Построение масштабируемой и сбалансированной Web-архитектуры зависит от умения распределять Web-трафик между серверами, реализующими функциональность системы. Существует несколько решений для балансировки нагрузки, среди которых мы отметим Traffic Server - решение Yahoo!, которая недавно открыла его код. Traffic Server интересен тем, что инкапсулирует в одном пакете большое количество функциональности, в том числе управление сеансами, аутентификацию, фильтрацию, балансировку нагрузки и маршрутизацию. Изначально Yahoo! приобрела этот продукт у компании Inktomi, а сейчас расширила его и опубликовала его исходный код.

Управление инфраструктурой

Более масштабное управление инфраструктурой (управление множеством гипервизоров и еще большим количеством виртуальных машин) можно осуществлять различными способами. Два самых распространенных решения построены на основе одной и той же платформы (libvirt). Пакет oVirt - это открытый инструмент управления виртуальными машинами, который масштабируется от небольшого количества виртуальных машин до тысяч виртуальных машин, работающих на сотнях хост-компьютеров. Пакет oVirt разработан компанией Red Hat; он представляет собой основанную на Web консоль управления, которая помимо традиционного управления предоставляет средства автоматизации создания кластеров и балансировки нагрузки. oVirt написан на языке Python. Еще есть приложение VirtManager, которое также основано на libvirt и разрабатывалось в Red Hat. Оно имеет графический интерфейс, созданный с помощью GTK+ (вместо Web-интерфейса oVirt). VirtManager обладает гораздо более богатыми графическими возможностями представления данных (для отображения в реальном времени производительности и загруженности систем), а также включает в себя VNC-клиент для полноценной графической работы на удаленных виртуальных машинах.

Puppet - это еще один открытый пакет, предназначенный для управления инфраструктурой центра обработки данных (облака). Хотя он не разрабатывался специально для работы с виртуальными инфраструктурами, он тем не менее упрощает управление крупной инфраструктурой, абстрагируя детали операционных систем. Он делает это с помощью языка Puppet - очень удобного и популярного языка для автоматизации выполнения задач администрирования на большом количестве серверов.


Интегрированные IaaS-решения

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

Eucalyptus

Одним из самых популярных пакетов с открытым кодом для построения облачной инфраструктуры является Eucalyptus (или Elastic Utility Computing Architecture for Linking Your Programs to Useful Systems). Этот пакет уникален тем, что его интерфейс совместим с Amazon Elastic Compute Cloud (Amazon EC2 — интерфейсом облачных вычислений Amazon). Кроме того, в Eucalyptus входит Walrus - приложение для облачного хранения данных, совместимое с Amazon Simple Storage Service (Amazon S3 — интерфейсом Amazon для облачного хранения данных).

Eucalyptus поддерживает гипервизоры KVM/Linux и Xen, а также включает в себя пакет Rocks для управления кластерами.

OpenNebula

OpenNebula - это еще одно интересное приложение с открытым кодом (распространяемое под лицензией Apache), разработанное в Мадридском университете Комплутенсе (Universidad Complutense de Madrid). Помимо поддержки частных облачных инфраструктур, OpenNebula поддерживает идею создания гибридных облаков. Гибридные облака позволяют для улучшения масштабируемости комбинировать частную облачную инфраструктуру с открытой облачной инфраструктурой (например, Amazon).

OpenNebula поддерживает Xen, KVM/Linux и VMware. Реализация управления и интроспекции в этом приложении основана на библиотеке libvirt.

Nimbus

Nimbus – это IaaS-решение, предназначенное для научных вычислений. Используя Nimbus, можно брать в аренду удаленные ресурсы (например, предоставляемые Amazon EC2) и управлять ими локально (конфигурировать, разворачивать виртуальные машины, следить за их работой и т.д.). Решение Nimbus образовалось из проекта Workspace Service (который является частью Globus.org). Nimbus зависит от Amazon EC2 и поддерживает гипервизоры Xen и KVM/Linux.

Xen Cloud Platform

Компания Citrix интегрировала Xen в свою IaaS-платформу. В ней используется Xen в качестве гипервизора, а также применяются другие компоненты с открытым кодом, например Open vSwitch. Интересным преимуществом решения Xen является управление на основе стандартов (таких как OVF, Distributed Management Task Force [DTMF], Common Information Model [CIM] и Virtualization Management Initiative [VMAN]) из проекта Kensho. Стек управления Xen поддерживает SLA-гарантии, а также подробные метрики для взимания платежей.

OpenQRM

Последним в списке, но не по значимости, является решение OpenQRM, которое классифицируют как платформу управления центом обработки данных. OpenQRM предоставляет единую консоль для управления целым виртуальным центром обработки данных. Его модульная архитектура позволяет интегрировать сторонние инструменты и приложения. В OpenQRM интегрирована поддержка отказоустойчивости (посредством избыточности), также он поддерживает множество гипервизоров, в том числе KVM/Linux, Xen, VMware и Linux VServer.


Двигаемся дальше

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

Ресурсы

Научиться

  • Оригинал статьи: "Anatomy of an open source cloud.(EN)
  • Статья Майкла Галпина (Michael Galpin) "Realities of open source cloud computing, Part 1: Not all clouds are equal представляет собой отличное введение в облачные вычисления, их преимущества и проблемы этой технологии, а также обзор некоторых имеющихся базовых и специализированных платформ.(EN)
  • Узнайте больше о работе Linux в качестве гипервизора в статье "Anatomy of a Linux hypervisor", а также узнайте больше о виртуальных устройствах и использовании OVF в статье "Virtual appliances and the Open Virtualization Format".(EN)
  • Kernel Virtual Machine был первым основанным на Linux гипервизором. О его архитектуре можно почитать в статье "Узнайте о виртуальной машине ядра Linux (KVM)". Вскоре после него появился более компактный (5000 дополнительных строк кода) Lguest . В качестве еще одной альтернативы мы говорили о пользовательском режиме Linux, который, в отличие от гипервизора, модифицирует гостевую операционную систему и запускает ее на стандартном ядре. Xen - это популярный гипервизор, используемый в некоторых из крупнейших облачных инфраструктур (например, Elastic Compute Cloud от Amazon); он поддерживает как полную виртуализацию, так и паравиртуализацию.(EN)
  • Прочтите больше о QEMU в статье "Эмуляция систем с помощью QEMU". Узнать о дополнительных ресурсах для эмуляции устройств и виртуального ввода/вывода можно в статьях "Linux virtualization and PCI passthrough" и "Virtio: An I/O virtualization framework for Linux." (EN)
  • Виртуальный коммутатор Open vSwitch может использоваться во всех известных гипервизорах (KVM, Xen, VirtualBox). Узнайте подробнее о его архитектуре и причинах создания в статье "Extending Networking into the Virtualization Layer (PDF)".(EN)
  • Yahoo! открыла код своего продукта Traffic Server под лицензией Apache Software Foundation. Это ПО предоставляет внешний интерфейс к облачной инфраструктуре; Yahoo! также использует его для внутренних нужд. Traffic Server объединяет в себе балансировку нагрузки, управление сеансами, аутентификацию, управление конфигурацией и маршрутизацию для крупных инфраструктур Web 2.0. Узнайте о нем подробнее из объявления на сайте компании и wiki-раздела проекта Traffic Server. (EN)
  • С детальными инструкциями по созданию виртуальной машины на основе KVM можно познакомиться в статье "Create a KVM-based virtual server."(EN)
  • Инструменты для работы с виртуальными машинами развиваются, но эффектино работать с ними можно уже сейчас. В статье "Переход на виртуальную среду Linux при помощи Clonezilla" рассказывается об инструменте Clonezilla, с помощью которого можно создавать виртуальные машины на основе физической системы. Есть также инструмент ovftool от VMware, полезный при конвертации виртуальных машин.(EN)
  • В этой статье мы рассмотрели несколько приложений для управления виртуальными инфраструктурами, два из которых созданы на API библиотеки libvirt. Почитайте больше о libvirt в статье "Anatomy of the libvirt virtualization library". Узнайте больше о высокоуровневых решениях управления виртуальной инфраструктурой: oVirt, Virtual Machine Manager (virt-manager) и Puppet.(EN)
  • Слушайте интересные интервью и дискуссии разработчиков в подкастах developerWorks.(EN)
  • Следите за новостями в разделе технических мероприятий и web-трансляций developerWorks.(EN)
  • Следите за developerWorks в Twitter.(EN)
  • Узнавайте о предстоящих конференциях, торговых выставках, web-трансляциях и других Событиях по всему миру, представляющих интерес open source разработчикам(EN) IBM.
  • Смотрите бесплатные доступные по требованию презентации developerWorks, чтобы узнать об IBM и возможностях продуктов компании и технологий с открытым кодом.(EN)

Получить продукты и технологии

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=680909
ArticleTitle=Анатомия облака с открытым кодом
publish-date=06152011