SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Подходы к расширению
OpenStack
Владимир Еремин
1. Почему OpenStack
2. Как устроен OpenStack, батарейки
3. Как писать для OpenStack
4. Что мы пишем
3Подходы к расширению OpenStack
Оглавление
〉 Масштабируемость
〉 Кастомизируемость
〉 Заменяемость
4Подходы к расширению OpenStack
Как мы выбирали облако
〉 Он задуман как платформа для облаков любых типов и размеров
〉 Его компоненты взаимосвязаны на уровне API
〉 Построен на известных компонентах
5Подходы к расширению OpenStack
Почему OpenStack
Подходы к расширению OpenStack
Как устроен OpenStack
Веб-приложения
〉 HTTP API
〉 Backend
〉 RPC между ними
〉 События
7Как устроен OpenStack
Сервисы
〉 Приложения взаимодействуют между собой через разнообразные
HTTP API
〉 Keystone предоставляет общее пространство имен и систему
авторизации
8Как устроен OpenStack
Взаимодействие
〉 Приложения генерируют события, на которые можно реагировать
〉 Зависит от инсталляции
9Как устроен OpenStack
Взаимодействие
〉 Компоненты приложения можно переопределить
10Как устроен OpenStack
Взаимодействие
〉 Каталог проектов и пользователей и их ролей
〉 Концепция проектов
〉 Система аутентификации и авторизации
〉 Генерация и проверка токена
〉 Каталог сервисов
11Как устроен OpenStack
Keystone, the OpenStack Identity Service
Токен определяет пользователя
〉 авторизация и роли
〉 имперсонификация
12Как устроен OpenStack
Auth Token
Как устроен OpenStack
Сервис OpenStack —
HTTP-API приложение
на Python с авторизацией
в Keystone и плагинами
〉 WSGI, middleware и Paste Deploy
〉 Entry Points
14Как устроен OpenStack
Батарейки
def app(env, start_response):

if env['REQUEST_METHOD'] == "POST":

do(env['wsgi.input'].read())

...

start_response(status=200,...)

return ...
15Как устроен OpenStack
WSGI, middleware и Paste Deploy
〉 PEP 0333, PEP 3333
〉 WebOb, Flask, Python Paste
〉 Декларативный деплоймент
16Как устроен OpenStack
WSGI, middleware и Paste Deploy
from flask import Flask

app = Flask()

@app.route('/')

def handler():

...

return ...
17Как устроен OpenStack
WSGI, middleware и Paste Deploy
from webob import Response

def app(env, start_response):

...

return Response(

status=200,

content_type="application/json",

body=data)(env, start_response)
18Как устроен OpenStack
WSGI, middleware и Paste Deploy
class Middleware(object):

def __init__(self, app, conf):

self.app = app

def __call__(self, env, start_response):

return self.app(env, start_response)
19Как устроен OpenStack
WSGI, middleware и Paste Deploy
# your /usr/bin/app

from yourapp import CacheMiddleware, AuthMiddleware

app = App()

app_with_cache = CacheMiddleware(app, conf)

app_with_auth = AuthMiddleware(app, conf)

WSGIServer(app_with_auth).serve()
20Как устроен OpenStack
WSGI, middleware и Paste Deploy
[app:app]

paste.app_factory = yourapp:app_factory

[filter:cache]

paste.filter_factory = yourapp:cache_factory

[filter:auth]

paste.filter_factory = yourapp:auth_factory

[pipeline:main]

pipeline = auth cache app
21Как устроен OpenStack
WSGI, middleware и Paste Deploy
[composite:metaapp]

use = egg:Paste#urlmap

/:main 

[app:app]

paste.app_factory = yourapp:app_factory

[filter:cache]

paste.filter_factory = yourapp:cache_factory

[filter:auth]

paste.filter_factory = yourapp:auth_factory

[pipeline:main]

pipeline = auth cache app
22Как устроен OpenStack
WSGI, middleware и Paste Deploy
[entry_points]

nova.api.v3.extensions =

yandexresponsibles = myext:MyMethod
23Как устроен OpenStack
Entry Points
from pkg_resources import iter_entry_points

iter_entry_points(

group='nova.api.v3.extensions', name=None)
24Как устроен OpenStack
Entry Points
〉 единый механизм логгирования через logging
〉 oslo.config
25
И еще
Подходы к расширению OpenStack
Как писать для OpenStack
〉 Использование API и событий
〉 Только поддержка токена
〉 Готовые библиотеки
〉 Полная свобода
27Как писать для OpenStack
Новое приложение
Вся реализация абстракций:
〉 методы аутентикации в Keystone
〉 драйверы виртуализации, образов, томов и т.д. в Nova
〉 драйверы сетевого оборудования в Neutron
28Как писать для OpenStack
Драйверы
〉 Атомарное API
〉 Можно использовать для модификация поведения
29Как писать для OpenStack
Драйверы
〉 Сложно писать
〉 Внутренний API меняется
30Как писать для OpenStack
Драйверы
〉 Тот же драйвер, но запускается отдельно
〉 Доступен только через RPC
31Как писать для OpenStack
Агенты
Позволяет изменять запрос или ответ:
〉 в Swift всё — middleware
〉 ограничения и аудит
〉 вне контекста приложения
32Как писать для OpenStack
Middleware
Позволяют работать с API:
〉 новые вызовы
〉 обработка существующих вызовов после роутинга и до
сериализации
〉 контекст приложения
33Как писать для OpenStack
Расширения
Механизм хуков:
〉 наилучший вариант при изменении внутреннего поведения
〉 требует апстрима
34Как писать для OpenStack
Хуки
35
Как писать для OpenStack
Новое
приложение
Драйверы Middleware Расширения Хуки
Возможности Любые
Определены
API Мало Любые Минимальны
Интеграция Сильная Сильная Сильная Сильная Не для
этого
Интерфейс Легкий Сложный Легкий Несложный Легкий
Поддержка
Не
требуется
Как
написание
Легко Легко Сложно
Модификация
апстрима Нет Нет Нет Нет Да
〉 Фреймворк для построения интерфейсов
〉 Переопределение через monkey patch
〉 Подключение новых интерфейсов
36Как писать для OpenStack
Веб-интерфейс Horizon
Подходы к расширению OpenStack
Что мы пишем
〉 Расширения Keystone для хранения маппингов и синхронизации
пользователей
〉 Расширения системы авторизации для приема Cookies
〉 Переопределение модуля проверки пароля
〉 Переписанный Horizon для передачи Cookies
〉 Приложения Horizon для управления
38Что мы пишем
Аутентификация и Single Sign-On
〉 Новый backend-драйвер для nsupdate
〉 Новый драйвер обработки событий
〉 Расширения здесь и в Nova для проверки и синхронизации
39Что мы пишем
Designate
〉 Агент для получения LLDP
〉 API extension для заведения сетей
〉 API extension для настройки VLAN
40Что мы пишем
Neutron
〉 Регистрация во всяких системах через обработку событий
〉 Выдача информации внешним системам через API extensions
〉 Свои команды в клиенте через entry points
〉 Визуализации и автоматизации в отдельных приложениях
41Что мы пишем
Интеграция
Владимир Еремин
OpenStack DevOps
Контакты
@yottatsa
yottatsa
+7 (495) 739 70 00
yottatsa@yandex-team.ru

Contenu connexe

Tendances

Functional Testing with Selenium
Functional Testing with SeleniumFunctional Testing with Selenium
Functional Testing with SeleniumQA Club Kiev
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureAlexander Feschenko
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsStanislav Gumeniuk
 
"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik HimiranovFwdays
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5Technopark
 
InterSystems Caché REST Forms
InterSystems Caché REST FormsInterSystems Caché REST Forms
InterSystems Caché REST FormsInterSystems
 
Апгрейд и миграция на SharePoint 2016
Апгрейд и миграция на SharePoint 2016Апгрейд и миграция на SharePoint 2016
Апгрейд и миграция на SharePoint 2016Boris Zhurkin
 
Kubernetes
KubernetesKubernetes
KubernetesSQALab
 
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и GrafanaВсевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и GrafanaSQALab
 
Расширение Confluence c помощью xwork модулей
Расширение Confluence c помощью xwork модулейРасширение Confluence c помощью xwork модулей
Расширение Confluence c помощью xwork модулейTeamlead
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...CodeFest
 
DeepSee SYSMON - InterSystems Caché System Monitoring Analytics
DeepSee SYSMON - InterSystems Caché System Monitoring AnalyticsDeepSee SYSMON - InterSystems Caché System Monitoring Analytics
DeepSee SYSMON - InterSystems Caché System Monitoring AnalyticsInterSystems
 
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверамиСтажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверами7bits
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковEYevseyeva
 
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинvSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинPositive Hack Days
 
Source Control Addon for InterSystems Caché with UDL support
Source Control Addon for InterSystems Caché with UDL supportSource Control Addon for InterSystems Caché with UDL support
Source Control Addon for InterSystems Caché with UDL supportInterSystems
 
Используем контейнеры, или Не дай заказчику повалить продакшн
Используем контейнеры, или Не дай заказчику повалить продакшнИспользуем контейнеры, или Не дай заказчику повалить продакшн
Используем контейнеры, или Не дай заказчику повалить продакшнVitebsk Miniq
 

Tendances (20)

Functional Testing with Selenium
Functional Testing with SeleniumFunctional Testing with Selenium
Functional Testing with Selenium
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
 
Docker&Azure
Docker&AzureDocker&Azure
Docker&Azure
 
"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5
 
InterSystems Caché REST Forms
InterSystems Caché REST FormsInterSystems Caché REST Forms
InterSystems Caché REST Forms
 
Апгрейд и миграция на SharePoint 2016
Апгрейд и миграция на SharePoint 2016Апгрейд и миграция на SharePoint 2016
Апгрейд и миграция на SharePoint 2016
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
CD&Azure
CD&AzureCD&Azure
CD&Azure
 
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и GrafanaВсевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
 
Расширение Confluence c помощью xwork модулей
Расширение Confluence c помощью xwork модулейРасширение Confluence c помощью xwork модулей
Расширение Confluence c помощью xwork модулей
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
 
DeepSee SYSMON - InterSystems Caché System Monitoring Analytics
DeepSee SYSMON - InterSystems Caché System Monitoring AnalyticsDeepSee SYSMON - InterSystems Caché System Monitoring Analytics
DeepSee SYSMON - InterSystems Caché System Monitoring Analytics
 
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверамиСтажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил Павлючков
 
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинvSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
 
Source Control Addon for InterSystems Caché with UDL support
Source Control Addon for InterSystems Caché with UDL supportSource Control Addon for InterSystems Caché with UDL support
Source Control Addon for InterSystems Caché with UDL support
 
Используем контейнеры, или Не дай заказчику повалить продакшн
Используем контейнеры, или Не дай заказчику повалить продакшнИспользуем контейнеры, или Не дай заказчику повалить продакшн
Используем контейнеры, или Не дай заказчику повалить продакшн
 

Similaire à Владимир Еремин. Extending Openstack. PyCon Belarus 2015

Конкурс для разработчиков от Evernote
Конкурс для разработчиков от EvernoteКонкурс для разработчиков от Evernote
Конкурс для разработчиков от EvernoteEvernote
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
 
СISCO: групповые политики в OpenStack
СISCO: групповые политики в OpenStackСISCO: групповые политики в OpenStack
СISCO: групповые политики в OpenStackMirantis IT Russia
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVCmandrew182
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryMax Rozdobudko
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETMikhail Shcherbakov
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
Непрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеНепрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеdevclub
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...CodeFest
 
Mobile automation with Appium
Mobile automation with AppiumMobile automation with Appium
Mobile automation with AppiumOksanaBisyuk
 
Solit 2012, Облачная разработка в Беларуских условиях, Сергей Сыцевич
Solit 2012, Облачная разработка в Беларуских условиях, Сергей СыцевичSolit 2012, Облачная разработка в Беларуских условиях, Сергей Сыцевич
Solit 2012, Облачная разработка в Беларуских условиях, Сергей Сыцевичsolit
 
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникСоздаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникSigma Software
 
Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Artur Baranok
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 

Similaire à Владимир Еремин. Extending Openstack. PyCon Belarus 2015 (20)

Конкурс для разработчиков от Evernote
Конкурс для разработчиков от EvernoteКонкурс для разработчиков от Evernote
Конкурс для разработчиков от Evernote
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
СISCO: групповые политики в OpenStack
СISCO: групповые политики в OpenStackСISCO: групповые политики в OpenStack
СISCO: групповые политики в OpenStack
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
 
PureMVC and Papervision
PureMVC and PapervisionPureMVC and Papervision
PureMVC and Papervision
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NET
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Непрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеНепрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применение
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Middleware
MiddlewareMiddleware
Middleware
 
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
 
RichFaces: обзор
RichFaces: обзорRichFaces: обзор
RichFaces: обзор
 
Mobile automation with Appium
Mobile automation with AppiumMobile automation with Appium
Mobile automation with Appium
 
Solit 2012, Облачная разработка в Беларуских условиях, Сергей Сыцевич
Solit 2012, Облачная разработка в Беларуских условиях, Сергей СыцевичSolit 2012, Облачная разработка в Беларуских условиях, Сергей Сыцевич
Solit 2012, Облачная разработка в Беларуских условиях, Сергей Сыцевич
 
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникСоздаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
 
Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Service stack
Service stackService stack
Service stack
 

Plus de Alina Dolgikh

Reactive streams. Slava Schmidt
Reactive streams. Slava SchmidtReactive streams. Slava Schmidt
Reactive streams. Slava SchmidtAlina Dolgikh
 
Scala for the doubters. Максим Клыга
Scala for the doubters. Максим КлыгаScala for the doubters. Максим Клыга
Scala for the doubters. Максим КлыгаAlina Dolgikh
 
Orm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел ВейникOrm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел ВейникAlina Dolgikh
 
No sql unsuccessful_story. Владимир Зеленкевич
No sql unsuccessful_story. Владимир ЗеленкевичNo sql unsuccessful_story. Владимир Зеленкевич
No sql unsuccessful_story. Владимир ЗеленкевичAlina Dolgikh
 
Java Concurrency in Practice
Java Concurrency in PracticeJava Concurrency in Practice
Java Concurrency in PracticeAlina Dolgikh
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAlina Dolgikh
 
Cracking android app. Мокиенко Сергей
Cracking android app. Мокиенко СергейCracking android app. Мокиенко Сергей
Cracking android app. Мокиенко СергейAlina Dolgikh
 
David Mertz. Type Annotations. PyCon Belarus 2015
David Mertz. Type Annotations. PyCon Belarus 2015David Mertz. Type Annotations. PyCon Belarus 2015
David Mertz. Type Annotations. PyCon Belarus 2015Alina Dolgikh
 
Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015
Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015
Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015Alina Dolgikh
 
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...Alina Dolgikh
 
Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...
Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...
Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...Alina Dolgikh
 
Austin Bingham. Transducers in Python. PyCon Belarus
Austin Bingham. Transducers in Python. PyCon BelarusAustin Bingham. Transducers in Python. PyCon Belarus
Austin Bingham. Transducers in Python. PyCon BelarusAlina Dolgikh
 
Austin Bingham. Python Refactoring. PyCon Belarus
Austin Bingham. Python Refactoring. PyCon BelarusAustin Bingham. Python Refactoring. PyCon Belarus
Austin Bingham. Python Refactoring. PyCon BelarusAlina Dolgikh
 
Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.Alina Dolgikh
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
Максим Харченко. Erlang lincx
Максим Харченко. Erlang lincxМаксим Харченко. Erlang lincx
Максим Харченко. Erlang lincxAlina Dolgikh
 
Пиар в стартапе: извлекаем максимум пользы. Алексей Лартей
Пиар в стартапе: извлекаем максимум пользы. Алексей ЛартейПиар в стартапе: извлекаем максимум пользы. Алексей Лартей
Пиар в стартапе: извлекаем максимум пользы. Алексей ЛартейAlina Dolgikh
 
Подготовка проекта к первому раунду инвестиций. Дмитрий Поляков
Подготовка проекта к первому раунду инвестиций. Дмитрий ПоляковПодготовка проекта к первому раунду инвестиций. Дмитрий Поляков
Подготовка проекта к первому раунду инвестиций. Дмитрий ПоляковAlina Dolgikh
 
Как составлять правильный тизер для инвесторов? Никита Рогозин
Как составлять правильный тизер для инвесторов? Никита РогозинКак составлять правильный тизер для инвесторов? Никита Рогозин
Как составлять правильный тизер для инвесторов? Никита РогозинAlina Dolgikh
 
Startup belarus pres_khamiankova
Startup belarus pres_khamiankovaStartup belarus pres_khamiankova
Startup belarus pres_khamiankovaAlina Dolgikh
 

Plus de Alina Dolgikh (20)

Reactive streams. Slava Schmidt
Reactive streams. Slava SchmidtReactive streams. Slava Schmidt
Reactive streams. Slava Schmidt
 
Scala for the doubters. Максим Клыга
Scala for the doubters. Максим КлыгаScala for the doubters. Максим Клыга
Scala for the doubters. Максим Клыга
 
Orm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел ВейникOrm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел Вейник
 
No sql unsuccessful_story. Владимир Зеленкевич
No sql unsuccessful_story. Владимир ЗеленкевичNo sql unsuccessful_story. Владимир Зеленкевич
No sql unsuccessful_story. Владимир Зеленкевич
 
Java Concurrency in Practice
Java Concurrency in PracticeJava Concurrency in Practice
Java Concurrency in Practice
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон Семенченко
 
Cracking android app. Мокиенко Сергей
Cracking android app. Мокиенко СергейCracking android app. Мокиенко Сергей
Cracking android app. Мокиенко Сергей
 
David Mertz. Type Annotations. PyCon Belarus 2015
David Mertz. Type Annotations. PyCon Belarus 2015David Mertz. Type Annotations. PyCon Belarus 2015
David Mertz. Type Annotations. PyCon Belarus 2015
 
Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015
Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015
Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015
 
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
 
Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...
Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...
Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...
 
Austin Bingham. Transducers in Python. PyCon Belarus
Austin Bingham. Transducers in Python. PyCon BelarusAustin Bingham. Transducers in Python. PyCon Belarus
Austin Bingham. Transducers in Python. PyCon Belarus
 
Austin Bingham. Python Refactoring. PyCon Belarus
Austin Bingham. Python Refactoring. PyCon BelarusAustin Bingham. Python Refactoring. PyCon Belarus
Austin Bingham. Python Refactoring. PyCon Belarus
 
Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Максим Харченко. Erlang lincx
Максим Харченко. Erlang lincxМаксим Харченко. Erlang lincx
Максим Харченко. Erlang lincx
 
Пиар в стартапе: извлекаем максимум пользы. Алексей Лартей
Пиар в стартапе: извлекаем максимум пользы. Алексей ЛартейПиар в стартапе: извлекаем максимум пользы. Алексей Лартей
Пиар в стартапе: извлекаем максимум пользы. Алексей Лартей
 
Подготовка проекта к первому раунду инвестиций. Дмитрий Поляков
Подготовка проекта к первому раунду инвестиций. Дмитрий ПоляковПодготовка проекта к первому раунду инвестиций. Дмитрий Поляков
Подготовка проекта к первому раунду инвестиций. Дмитрий Поляков
 
Как составлять правильный тизер для инвесторов? Никита Рогозин
Как составлять правильный тизер для инвесторов? Никита РогозинКак составлять правильный тизер для инвесторов? Никита Рогозин
Как составлять правильный тизер для инвесторов? Никита Рогозин
 
Startup belarus pres_khamiankova
Startup belarus pres_khamiankovaStartup belarus pres_khamiankova
Startup belarus pres_khamiankova
 

Владимир Еремин. Extending Openstack. PyCon Belarus 2015

  • 1.
  • 3. 1. Почему OpenStack 2. Как устроен OpenStack, батарейки 3. Как писать для OpenStack 4. Что мы пишем 3Подходы к расширению OpenStack Оглавление
  • 4. 〉 Масштабируемость 〉 Кастомизируемость 〉 Заменяемость 4Подходы к расширению OpenStack Как мы выбирали облако
  • 5. 〉 Он задуман как платформа для облаков любых типов и размеров 〉 Его компоненты взаимосвязаны на уровне API 〉 Построен на известных компонентах 5Подходы к расширению OpenStack Почему OpenStack
  • 6. Подходы к расширению OpenStack Как устроен OpenStack
  • 7. Веб-приложения 〉 HTTP API 〉 Backend 〉 RPC между ними 〉 События 7Как устроен OpenStack Сервисы
  • 8. 〉 Приложения взаимодействуют между собой через разнообразные HTTP API 〉 Keystone предоставляет общее пространство имен и систему авторизации 8Как устроен OpenStack Взаимодействие
  • 9. 〉 Приложения генерируют события, на которые можно реагировать 〉 Зависит от инсталляции 9Как устроен OpenStack Взаимодействие
  • 10. 〉 Компоненты приложения можно переопределить 10Как устроен OpenStack Взаимодействие
  • 11. 〉 Каталог проектов и пользователей и их ролей 〉 Концепция проектов 〉 Система аутентификации и авторизации 〉 Генерация и проверка токена 〉 Каталог сервисов 11Как устроен OpenStack Keystone, the OpenStack Identity Service
  • 12. Токен определяет пользователя 〉 авторизация и роли 〉 имперсонификация 12Как устроен OpenStack Auth Token
  • 13. Как устроен OpenStack Сервис OpenStack — HTTP-API приложение на Python с авторизацией в Keystone и плагинами
  • 14. 〉 WSGI, middleware и Paste Deploy 〉 Entry Points 14Как устроен OpenStack Батарейки
  • 15. def app(env, start_response):
 if env['REQUEST_METHOD'] == "POST":
 do(env['wsgi.input'].read())
 ...
 start_response(status=200,...)
 return ... 15Как устроен OpenStack WSGI, middleware и Paste Deploy
  • 16. 〉 PEP 0333, PEP 3333 〉 WebOb, Flask, Python Paste 〉 Декларативный деплоймент 16Как устроен OpenStack WSGI, middleware и Paste Deploy
  • 17. from flask import Flask
 app = Flask()
 @app.route('/')
 def handler():
 ...
 return ... 17Как устроен OpenStack WSGI, middleware и Paste Deploy
  • 18. from webob import Response
 def app(env, start_response):
 ...
 return Response(
 status=200,
 content_type="application/json",
 body=data)(env, start_response) 18Как устроен OpenStack WSGI, middleware и Paste Deploy
  • 19. class Middleware(object):
 def __init__(self, app, conf):
 self.app = app
 def __call__(self, env, start_response):
 return self.app(env, start_response) 19Как устроен OpenStack WSGI, middleware и Paste Deploy
  • 20. # your /usr/bin/app
 from yourapp import CacheMiddleware, AuthMiddleware
 app = App()
 app_with_cache = CacheMiddleware(app, conf)
 app_with_auth = AuthMiddleware(app, conf)
 WSGIServer(app_with_auth).serve() 20Как устроен OpenStack WSGI, middleware и Paste Deploy
  • 21. [app:app]
 paste.app_factory = yourapp:app_factory
 [filter:cache]
 paste.filter_factory = yourapp:cache_factory
 [filter:auth]
 paste.filter_factory = yourapp:auth_factory
 [pipeline:main]
 pipeline = auth cache app 21Как устроен OpenStack WSGI, middleware и Paste Deploy
  • 22. [composite:metaapp]
 use = egg:Paste#urlmap
 /:main 
 [app:app]
 paste.app_factory = yourapp:app_factory
 [filter:cache]
 paste.filter_factory = yourapp:cache_factory
 [filter:auth]
 paste.filter_factory = yourapp:auth_factory
 [pipeline:main]
 pipeline = auth cache app 22Как устроен OpenStack WSGI, middleware и Paste Deploy
  • 23. [entry_points]
 nova.api.v3.extensions =
 yandexresponsibles = myext:MyMethod 23Как устроен OpenStack Entry Points
  • 24. from pkg_resources import iter_entry_points
 iter_entry_points(
 group='nova.api.v3.extensions', name=None) 24Как устроен OpenStack Entry Points
  • 25. 〉 единый механизм логгирования через logging 〉 oslo.config 25 И еще
  • 26. Подходы к расширению OpenStack Как писать для OpenStack
  • 27. 〉 Использование API и событий 〉 Только поддержка токена 〉 Готовые библиотеки 〉 Полная свобода 27Как писать для OpenStack Новое приложение
  • 28. Вся реализация абстракций: 〉 методы аутентикации в Keystone 〉 драйверы виртуализации, образов, томов и т.д. в Nova 〉 драйверы сетевого оборудования в Neutron 28Как писать для OpenStack Драйверы
  • 29. 〉 Атомарное API 〉 Можно использовать для модификация поведения 29Как писать для OpenStack Драйверы
  • 30. 〉 Сложно писать 〉 Внутренний API меняется 30Как писать для OpenStack Драйверы
  • 31. 〉 Тот же драйвер, но запускается отдельно 〉 Доступен только через RPC 31Как писать для OpenStack Агенты
  • 32. Позволяет изменять запрос или ответ: 〉 в Swift всё — middleware 〉 ограничения и аудит 〉 вне контекста приложения 32Как писать для OpenStack Middleware
  • 33. Позволяют работать с API: 〉 новые вызовы 〉 обработка существующих вызовов после роутинга и до сериализации 〉 контекст приложения 33Как писать для OpenStack Расширения
  • 34. Механизм хуков: 〉 наилучший вариант при изменении внутреннего поведения 〉 требует апстрима 34Как писать для OpenStack Хуки
  • 35. 35 Как писать для OpenStack Новое приложение Драйверы Middleware Расширения Хуки Возможности Любые Определены API Мало Любые Минимальны Интеграция Сильная Сильная Сильная Сильная Не для этого Интерфейс Легкий Сложный Легкий Несложный Легкий Поддержка Не требуется Как написание Легко Легко Сложно Модификация апстрима Нет Нет Нет Нет Да
  • 36. 〉 Фреймворк для построения интерфейсов 〉 Переопределение через monkey patch 〉 Подключение новых интерфейсов 36Как писать для OpenStack Веб-интерфейс Horizon
  • 37. Подходы к расширению OpenStack Что мы пишем
  • 38. 〉 Расширения Keystone для хранения маппингов и синхронизации пользователей 〉 Расширения системы авторизации для приема Cookies 〉 Переопределение модуля проверки пароля 〉 Переписанный Horizon для передачи Cookies 〉 Приложения Horizon для управления 38Что мы пишем Аутентификация и Single Sign-On
  • 39. 〉 Новый backend-драйвер для nsupdate 〉 Новый драйвер обработки событий 〉 Расширения здесь и в Nova для проверки и синхронизации 39Что мы пишем Designate
  • 40. 〉 Агент для получения LLDP 〉 API extension для заведения сетей 〉 API extension для настройки VLAN 40Что мы пишем Neutron
  • 41. 〉 Регистрация во всяких системах через обработку событий 〉 Выдача информации внешним системам через API extensions 〉 Свои команды в клиенте через entry points 〉 Визуализации и автоматизации в отдельных приложениях 41Что мы пишем Интеграция