Библиотека классов .NET для управления ресурсами OpenStack облака

Обзор технологии OpenStack, область ее применения. Реализация библиотеки классов. Реализация базовых классов и интерфейсов архитектуры. Создание виртуального сервера. Интеграция разработанной библиотеки классов и архитектура проектного решения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 09.08.2016
Размер файла 1,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

b) Данные, необходимые для выполнения команды, по протоколу HTTP, передаются на сервер для их обработки.

c) Серверное приложение обрабатывает полученные данныеи выполняет некоторые действия в соответствии со спецификой бизнес-логики проекта и конкретной задачи, например, добавляет в базу данных счёт на оплату в случае, если создаётся новый виртуальный сервер. После этого, серверное приложение инстанциирует необходимые классы библиотеки OpenstackManager и отправляет запрос на выполнение задачи облачной инфраструктуре.

d) OpensatckAPI обрабатывает запрос, инициирует выполнение задачи внутри вычислительного кластера и возвращает ответ, который может содержать различную информацию, например, состояние задачи или состояние ресурсов облака.

e) Серверное приложение обрабатывает ответ средствами библиотеки OpenSatckManager, снова выполняет некоторые действия, определенные нюансами бизнес-логики, и возвращает определенный набор данных клиентскому приложению.

f) Клиентское приложение обрабатывает полученные данные и обновляет web-интерфейс пользователя.

Рисунок 8. Архитектура проекта vds.ultrazoom.ru

3.2 Инфраструктура OpenStack

Инфраструктура OpenStack облака, спроектированная и развёрнутая для проекта vds.ultrazoom.ru изображена на рисунке 9.

Рисунок 9. Архитектура облака

Данная инфраструктура включает себя следующие функциональные узлы:

· Контроллер облака. Данный узел содержит в себе инструментальную панель, службы API, базу данных (MySQL), сервер очереди сообщений (RabbitMQ), планировщик для выбора вычислительных ресурсов (nova-scheduler), службы идентификации (keystone, nova-consoleauth), службы образов (glance-api, glance-registry), консольный клиент, а также службы блочного хранения, включающие планировщик для ресурсов хранения (cinder-api и cinder-scheduler).

· Вычислительные узлы облака. Данные узлы содержат гипервизор (KVM), libvirt (драйвер для гипервизора, который позволяет динамическую миграцию с узла на узел), nova-compute, nova-api-metadata (как правило, используется только при работе в режиме мульти-хоста, он извлекает метаданные определенных экземпляров), nova-vncproxy и nova-network.

· Сервера хранения данных. На одном из таких узлов расположено блочное хранилище, реализованное помощью OpenStack Block Storage (Cinder).Данный узел позволяет пользователям присоединять несколько томов блочного хранилища к работающим экземплярам виртуальных серверов. На другом узле расположенохранилище файлового уровня, реализованное на основе NFS. Данный узел выполняет функции хранения образов виртуальных машин для службы образов OpenStack Glance.

Характеристики аппаратной реализации данных узлов отображены в таблице 8.

3.3 Тестирование результатов интеграции

На этапе исполнения сервер IIS слушает порт 80. В программе есть несколько контроллеров, которые обрабатывают запросы, отправленные клиентским приложением. В процессе интеграции библиотеки в проект компании был создан VdsController, в котором были реализованы методы обработки запросов, подразумевающих взаимодействие с развёрнутой в описанном ранее кластере облачной инфраструктурой. После того, как пользователь прошёл процедуру регистрации в системе vds.ultrazoom.ru, он получает доступ к панели управлениявыделенными ему ресурсами. Создание пользователя непосредственно внутри системы облачной инфраструктуры происходит перед созданием первого виртуального сервера.

Таблица 8. Аппаратная реализация узлов

Узел

Аппаратная реализация

Контроллер

Модель: Dell R620

ЦПУ: 2x Intel® Xeon® CPU E5-2620 0 @ 2.00 GHz

Оперативная память: 32 ГБ

Диск: два 300 ГБ 10000 RPM SAS диска

Сеть: два сетевых порта 10G

Вычислительный узел

Model: Dell R620

ЦПУ: 2x Intel® Xeon® CPU E5-2650 0 @ 2.00 GHz

Оперативная память: 128 GB

Диск: два 600 GB 10000 RPM SAS диска

Сеть: четыре сетевых порта 10G

Узел хранения

Модель: Dell R720xd

ЦПУ: 2x Intel® Xeon® CPU E5-2620 0 @ 2.00 GHz

Оперативная память: 64 ГБ

Диск: два диска 500 ГБ 7200 RPM SAS и двадцать четыре диска 600 ГБ 10000 RPM SAS Disks

Raid контроллер: PERC H710P интегрированный RAID контроллер, 1 ГБ NV кеш

Сеть: два сетевых порта 10G

Для тестирования работы и результатов интегрирования библиотеки, была создана тестовая учётная запись на порталеvds.ultrazoom.ru. В разделеWeb-интерфейса сайта, отображающего средствасоздания новой виртуальной машины была выбрана тестовая конфигурация сервера под управлением операционной системы Windows Server 2008 и запущен процесс создания виртуальной машины. В результате соответствующий метод серверного приложения выполнил следующие действия:

1) Инстаниировал классы RegistrationQuery и AuthorizationQuery разработанной библиотеки OpenstackManager для выполнения операции создания пользователя облачной платформы. В качестве учётных данных были использованы логин и пароль, предоставленные на этапе регистрации на портале vds.ultrazoom.ruи хранящиеся в базе данных системы.

2) Выполнил задачу регистрации и авторизации пользователя в облаке средствами классов RegistrationQuery и AuthorizationQuery соответственно.

3) На основе выбранной конфигурации получил имена шаблона виртуальной конфигурации и образа виртуального сервера в соответствии с правилами именования данных элементов системы, установленными системными администраторами проекта и описанными в конфигурационном файле серверного приложения.

4) Инстанциировал класс CreateServerQuery, передав в конструктор токен, полученный на втором шаге и данные, полученные на третьем шаге. Инициализировал задачу по созданию виртуального сервера средствами класса CreateServerQuery.

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

6) Отправил клиентскому приложению все необходимые данные для обновления Web-интерфейса пользователя.

На рисунке 9 показан пользовательский интерфейс портала vds.ultrazoom.ru,предоставляющий информацию о созданном виртуальном сервере.

Рисунок 10. Интерфейс пользователя vds.ultrzoom.ru

3.4 Вывод

На этапе интеграции классы разработанной ранее библиотеки были успешно использованы в серверном приложении портала самообслуживания vds.ultrazoom.ruдля решения задач по управлению ресурсами облка, развёрнутого средствами OpenStack на серверах компании UltraZoom.

Заключение

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

· Спроектирована архитектура библиотеки классов

· Реализованы базовые классы и интерфейсы архитектуры

· Реализованы классы базовых команд

· Реализованы классы сценариев

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

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

· Содержит средства аутентификации, необходимые для взаимодействия пользователя с облачной платформой.

· Содержит функционал, позволяющий пользователю создавать новые виртуальные сервера и управлять существующими.

· Содержит функционал, необходимый для создания и управления резервными копиями виртуальных серверов пользователя.

Список используемой литературы

1. Технология облачных вычислений [Электронный ресурс] http://mirtelecoma.ru/magazine/elektronnaya-versiya/31/

2. Что такое инфраструктура как услуга [Электронный ресурс] https://technet.microsoft.com/ru-ru/cloud/hh744751.aspx

3. Маркелов, А. А. OpenStack. Знакомство с облачной операционной системой/ А. А. Маркелов -ДМК Пресс, 2016 г. - 160 с.

4. Внедрение OpenStack и куда двигаться дальше? [Электронный ресурс] https://habrahabr.ru/company/icl_services/blog/281068/

5. Знакомство с OpenStack : архитектура, функции, взаимодействия [Электронный ресурс] http://www.ibm.com/developerworks/ru/library/cl-openstack-overview/index.html

6. OpenStack API Complete Reference [Электронныйресурс] http://developer.openstack.org/api-ref.html

7. РихетД. CLRviaC#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C# /Д.Рихтер-Питер, 2012 г. - 928 с.

8. Общие сведения о платформе .NET Framework [Электронный ресурс] https://msdn.microsoft.com/ru-ru/library/zw4w595w(v=vs.110).aspx

9. ШилдтГ. C# 4.0. Полное руководство / Г. Шилдт -Вильямс, 2015 г. - 1056 с.

10. Гамма Э. Приёмы объектно-ориентированного проектирования. Паттерны проектирования / Э.Гамма, Р.Хелм, Р. Джонсон, Дж.Влиссидес -Питер, 2013 г. - 386 с.

11. Р. С. МартинПринципы, паттерны и методики гибкой разработки на языке C# / Р. С. Мартин, М. Мартин. -Символ-Плюс, 2011 г. - 768 с.

12. Знакомство с OpenStack : Компонент Identity (Keystone) [Электронный ресурс] http://www.ibm.com/developerworks/ru/library/cl-openstack-keystone/index.html

13. Знакомство с OpenStack: компонент Glance и компонент Nova [Электронный ресурс] http://www.ibm.com/developerworks/ru/library/cl-openstack-nova-glance/index.html/

Приложение а

Листинг 1

public interface ICommand

{

void Execute();

}

public interface IQuery<T>

{

T Execute();

}

Листинг3

public abstract class CommandBase : ICommand

{

public void Execute()

{

var webClient = new WebClient();

var httpParams = GetHttpRequestParams();

webClient.Headers.Add(HttpRequestHeader.ContentType, httpParams.ContentType);

if (string.IsNullOrEmpty(httpParams.XAuthToken))

webClient.Headers.Set("X-Auth-Token", httpParams.XAuthToken);

webClient.UploadString(httpParams.Url, httpParams.Method, httpParams.MessageBody);

}

abstract protected HttpRequestParams GetHttpRequestParams();

}

public abstract class QueryBase<T> : IQuery<T>

{

public void Execute()

{

var webClient = new WebClient();

var httpParams = GetHttpRequestParams();

webClient.Headers.Add(HttpRequestHeader.ContentType, httpParams.ContentType);

if (string.IsNullOrEmpty(httpParams.XAuthToken))

webClient.Headers.Set("X-Auth-Token", httpParams.XAuthToken);

var result = webClient.UploadString(httpParams.Url, httpParams.Method, httpParams.MessageBody);

return JsonConvert.DeserializeObject<T>(result);

}

abstract protected HttpRequestParams GetHttpRequestParams();

}

Листинг4

public class CreateUserResponse

{

public string id {get; set;}

public string name {get; set;}

public string domain_id {get; set;}

public string enabled {get; set;}

}

public class CreateUserQuery : QueryBase<CreateUserCommand>

{

private string _url;

private string _name;

private string _password;

private string _domainUuid;

public CreateUserQuery(string url,

string name, string password, string domainUuid)

{

_xAuthToken = xAuthToken;

_name = name;

_password = password;

_url = url;

_domainUuid = domainUuid;

}

protected override HttpRequestParams GetHttpRequestParams()

{

var url = _url + "v3/";

var messageBodyObj = new

{

auth = new

{

identity = new

{

methods = new[] { "password" },

password = new

{

user = new

{

domain_id = _domainUuid,

name = _name,

password = _password

}

}

},

}

};

var method = "POST";

var contentType = "application/json";

var messageBody = JsonConvert.SerializeObject(messageBodyObj);

return new HttpRequestParams

{

Url = url,

ContentType = contentType,

MessageBody = messageBody,

Method = method,

};

}

}

Листинг 5

public class CreateServerResponse

{

public string id {get; set;}

public DateTime created {get; set;}

public string name {get; set;}

public string accessIPv4 {get; set;}

public string accessIPv6 {get; set;}

public string vm_state {get; set;}

public string user_Id {get; set;}

}

public class CreateServerQuery : QueryBase<CreateServerResponse>

{

private string _flavorRef;

private string _imageRef;

private string _name;

private string _adminPass;

private string _xAuthToken;

private string _baseUrl;

public CreateServerQuery(string flavorRef, string imageRef, string name,

string adminPass, string xAuthToken, string baseUrl)

{

_flavorRef = flavorRef;

_imageRef = imageRef;

_name = name;

_adminPass = adminPass;

_xAuthToken = xAuthToken;

_baseUrl = baseUrl;

}

protected override HttpRequestParams GetHttpRequestParams()

{

var url = _baseUrl + "v3/";

var messageBodyObj = new

{

server = new

{

name = _name,

imageRef = _imageRef,

flavorRef = _flavorRef,

adminPass = _adminPass

}

};

var method = "POST";

var contentType = "application/json";

var messageBody = JsonConvert.SerializeObject(messageBodyObj);

return new HttpRequestParams

{

Url = url,

ContentType = contentType,

MessageBody = messageBody,

Method = method,

XAuthToken = _xAuthToken

};

}

}

Листинг 6

public class CreateServerQuery: IQuery<CreateServerResponse>

{

private string _xAuthToken;

private string _baseUrl;

private string _flavorName;

private string _imageName;

private string _serverName;

private string _adminUrl;

private string _adminPass;

public CreateServerByNamesCommand(string xAuthToken, string baseUrl, string adminUrl, string flavorName, string imageName, string serverName, string adminPass)

{

_xAuthToken = xAuthToken;

_baseUrl = baseUrl;

_flavorName = flavorName;

_imageName = imageName;

_serverName = serverName;

_adminUrl = adminUrl;

_adminPass = adminPass;

}

public CreateServerResponseExecute()

{

var getFlavorsQuery = new GetFlavorQuery(_adminUrl);

var flavorsList = getFlavorsQuery.Execute();

var flavor = flavorsList.FirstOrDefault(f => f.name == _flavorName);

if (flavor == null)

return;

var flavorId = flavor.id;

var getImagesQuery = new GetImagesQuery(_adminUrl);

var imagesList = getImagesQuery.Execute();

var image = flavorsList.FirstOrDefault(i => i.name == _imageName);

if (image == null)

return;

var imageId = image.id;

var createServerQuery = new CreateServerQuery(flavorId, imageId, _serverName, _adminPass, _xAuthToken, _baseUrl);

return createServerQuery.Execute();

}

}

Размещено на Allbest.ru


Подобные документы

  • Определение программного модуля. Принципы использования dll-библиотеки. Преимущества и недостатки использования dll-библиотек. Описание коэффициентов моделей. Разработка структуры классов. Реализация библиотеки классов в среде разработки MS Visual Studio.

    дипломная работа [676,6 K], добавлен 16.06.2015

  • Создание библиотеки классов на основе C-строк и управляемую пользователем программу с псевдографическим интерфейсом, тестирующую её работу и отображающую результат. Упрощённая структура библиотек, взаимодействие классов и объектов, основные алгоритмы.

    курсовая работа [37,5 K], добавлен 15.08.2012

  • Иерархия основных классов MFC (базовой библиотеки классов). Структура простой MFC программы. Работа с текстом в MFC. Функции вывода текста, установки цветов, режимов отображения, получение метрик. Применение контекста устройства, обработка сообщений.

    контрольная работа [27,8 K], добавлен 11.08.2010

  • Разработка иерархии классов, содержащей не менее трех уровней. Определение базовых и производных классов. Анализ технического задания. Проектирование структуры программы и базовых алгоритмов. Программная реализация разработанной структуры и алгоритмов.

    курсовая работа [34,9 K], добавлен 11.01.2011

  • Обзор криптографических классов библиотеки Framework Class Libr: классы алгоритмов симметричного и асимметричного шифрования, хеширования. Классы-форматеры и деформатеры. Классы для формирования и проверки цифровой подписи. Примеры применения классов.

    курсовая работа [30,0 K], добавлен 27.12.2011

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

    курсовая работа [710,2 K], добавлен 26.07.2014

  • Разработка модели, которая способна отобразить все функциональные возможности библиотеки. Субъекты модели публичной библиотеки. Диаграммы классов в соответствии с направлениями развития. Распечатка, зал ожидания для посетителей, продление пользования.

    реферат [962,5 K], добавлен 31.05.2014

  • Создание Win-приложения для библиотеки, которое позволяло бы осуществлять операции выдачи и сдачи книг в соответствии со сроками. Выбор программных и технических средств реализации проекта. Разработка интерфейса системы, описание реализованных классов.

    курсовая работа [3,1 M], добавлен 14.08.2015

  • Классы и свойства объектно-ориентированного пространства. Методика создания новых классов в delphi: выбор родительского класса, изменение существующих компонентов, создание подклассов для элементов управления windows. Создание новой ветви классов.

    контрольная работа [13,0 K], добавлен 07.07.2012

  • Цели объектно-ориентированного программирования, абстрактные классы и адреса базовых классов, множественное и виртуальное наследование. Инициализация элементов производного класса, программный вызов конструкторов базового и производного классов.

    реферат [21,8 K], добавлен 31.10.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.