37
Ваше собственное облако Андрей Сибирёв Я.Субботник в Санкт-Петербурге, 1 декабря 2012 Руководитель группы разработки облачной платформы 1

Андрей Сибирёв "Ваше собственное облако — война за независимость"

  • Upload
    yandex

  • View
    1.064

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Ваше собственное облакоАндрей Сибирёв

Я.Субботник в Санкт-Петербурге, 1 декабря 2012

Руководитель группы разработки облачной платформы

1

Page 2: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Облака бывают разные

Infrastructure

Platform

API

2

Page 3: Андрей Сибирёв "Ваше собственное облако — война за независимость"

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

3

Page 4: Андрей Сибирёв "Ваше собственное облако — война за независимость"

BlueboxEngineYardHerokuAppEngineJoyentAzureJelasticKoderBlueboxEngineYardHerokuAppEngineJoyentAzureJelasticKoderBlueboxEngineYardHerokuAppEngineJoyentAzureJelasticKoderBlueboxEngineYardHerokuAppEngineJoyentAzureJelasticKoder

4

Page 5: Андрей Сибирёв "Ваше собственное облако — война за независимость"

+ Написать нужно только основную логику.+ Быстрая и дешёвая разработка.– Ограничения в выборе инструментов.– Нет контроля за окружением.

Неуправляемые платформы

5

Page 6: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Управляемые платформы

+ Можно запустить почти всё что угодно.+ Полный контроль над окружением.– Нужно всё написать самому.– Полный цикл разработки.

6

Page 7: Андрей Сибирёв "Ваше собственное облако — война за независимость"

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

7

Page 8: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Кокаин — это открытая облачная платформа8

Page 9: Андрей Сибирёв "Ваше собственное облако — война за независимость"

«We need to go deeper».Dominick Cobb

9

Page 10: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Hyengine10

Page 11: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Process

Whatever you want

SandboxLanguage Runtime +

Code

Hyengine

Cocaine

vs

11

Page 12: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Process

Whatever you want

SandboxLanguage Runtime +

Code

Hyengine

Cocaine

+

12

Page 13: Андрей Сибирёв "Ваше собственное облако — война за независимость"

+ Асинхронный код.+ Грязная работа уже сделана.+ Биндинги для Python, Perl, C, C++.– Поддержка фреймворков — так себе.– Нужно адаптировать существующий код.

Cocaine Sandboxes

13

Page 14: Андрей Сибирёв "Ваше собственное облако — война за независимость"

from cocaine.context import Dispatchfrom cocaine.http import http

@httpdef dummy(request, response): def process(): response.writeHead(200, { 'Content-Type': 'text/plain' })

response.write(“Hello World!”) response.close()

request.on("request", process)

dispatch = Dispatch()dispatch.on("dummy-event", dummy)

Cocaine Sandboxes

14

Page 15: Андрей Сибирёв "Ваше собственное облако — война за независимость"

+ Можно писать хоть на Whitespace.+ Не нужно переделывать старый код.+ Биндинг для Node.js.– Нужно реализовать RPC.– Придётся забраться под капот.

Cocaine Processes

15

Page 16: Андрей Сибирёв "Ваше собственное облако — война за независимость"

var cocaine = require(‘cocaine’);

var slave = cocaine.createSlave(function (e, rq, rp) { rq.on(‘chunk’, function (chunk) { console.log(‘Got chunk: ‘ + chunk); rp.close(); });

rq.on(‘close’, function () { console.log(‘Bye’); });});

slave.run(argc, argv);

Cocaine Processes

16

Page 17: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Драйверы17

Page 18: Андрей Сибирёв "Ваше собственное облако — война за независимость"

• Обычно, приложения — event driven.• И единственное событие — HTTP-запрос.• Это скучно и подавляет творческое начало!

Драйверы

18

Page 19: Андрей Сибирёв "Ваше собственное облако — война за независимость"

You app

Драйверы

timeoutTimer Driver

http-requestHTTP Driver

speed-changedArduino Driver?

file-changedFilesystem Driver

Cocaine

19

Page 20: Андрей Сибирёв "Ваше собственное облако — война за независимость"

• Какие угодно драйверы.• В неограниченных количествах.• Единообразная обработка всех событий.

Драйверы

20

Page 21: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Изоляция21

Page 22: Андрей Сибирёв "Ваше собственное облако — война за независимость"

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

Изоляция

22

Page 23: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Isolation Group A

Isolation Group B

Изоляция

App #1 WorkerApp #1 WorkerApp #2 WorkerApp #2 Worker

App #3 WorkerApp #3 WorkerApp #3 WorkerApp #3 Worker

Cocaine

23

Page 24: Андрей Сибирёв "Ваше собственное облако — война за независимость"

• Изолировать можно в CGroups, LXC.• Группы настраиваются в профилях.• Профиль — это также и настройки таймаутов, очередей и других ограничений.

Изоляция

24

Page 25: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Все параметры групп изоляции можно менять в реальном времени.

25

Page 26: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Сервисы26

Page 27: Андрей Сибирёв "Ваше собственное облако — война за независимость"

• К общим компонентам — общий доступ.• Геолокация, логирование, определение модели телефона, ...• Для всех и без лишних задержек.

Сервисы

27

Page 28: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Сервисы

Geolocation

Logging

URL Fetching

MapReduce

RPC

Isolation Group A

App #1 WorkerApp #1 WorkerApp #2 WorkerApp #2 Worker

Cocaine

28

Page 29: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Сервисы

from cocaine.service import Logging, PhoneDetectfrom cocaine.http import http

log = Logging(“my-application-log”)pd = PhoneDetect()

@httpdef dummy(request, response): def process(): ua = request.headers[“HTTP_USER_AGENT”] phone = pd.detect(ua) log.info(“user’s phone model is: %s” % phone)

request.on("request", process)

29

Page 30: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Специальный транспорт30

Page 31: Андрей Сибирёв "Ваше собственное облако — война за независимость"

• HTTP/1.1 —добро, но его мало.• Например, не очень выходит пережимать BluRay-видео и тут же его стримить.• И, вообще говоря, ему пора в музей.

Транспорт

31

Page 32: Андрей Сибирёв "Ваше собственное облако — война за независимость"

• Бинарные трубы и сессии.• Поддержка протоколов на основе этих примитивов.• Модные штуки — multiplexing, streaming, ...

Транспорт

32

Page 33: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Вопросы — позже!33

Page 34: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Просто потроллить — @kobolog34

Page 35: Андрей Сибирёв "Ваше собственное облако — война за независимость"

• Модули.• Стораджи и кеширование.• Профили и динамическая перезагрузка.• Аудит и статистика.

На следующий раз

35

Page 37: Андрей Сибирёв "Ваше собственное облако — война за независимость"

Руководитель группы разработки облачной платформы

[email protected]

Андрей Сибирёв

@kobolog

37