Антон Тюрин — Облачная платформа cocaine — облако своими...

76
Облачная платформа Cocaine - облако своими рукаим Антон Тюрин разработчик облачной платформы четверг, 13 июня 13 г.

Upload: yandex

Post on 04-Jun-2015

5.128 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Облачная платформа Cocaine - облако своими рукаим

Антон Тюринразработчик облачной платформы

четверг, 13 июня 13 г.

Page 2: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Кокаин — это облачная платформачетверг, 13 июня 13 г.

Page 3: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

bit.ly/YaSubb-011212

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

Осторожно! С тех пор стало ещё лучше!

четверг, 13 июня 13 г.

Page 4: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

четверг, 13 июня 13 г.

Page 5: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

+ Написать нужно только основную логику.

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

четверг, 13 июня 13 г.

Page 6: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

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

четверг, 13 июня 13 г.

Page 7: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

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

четверг, 13 июня 13 г.

Page 8: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

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

четверг, 13 июня 13 г.

Page 9: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

четверг, 13 июня 13 г.

Page 10: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

+ Можно запустить почти всё что угодно.

четверг, 13 июня 13 г.

Page 11: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

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

четверг, 13 июня 13 г.

Page 12: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

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

четверг, 13 июня 13 г.

Page 13: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

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

четверг, 13 июня 13 г.

Page 14: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine Frameworks

четверг, 13 июня 13 г.

Page 15: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

+ Асинхронный код.

Cocaine Frameworks

четверг, 13 июня 13 г.

Page 16: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

+ Асинхронный код.+ Грязная работа уже сделана.

Cocaine Frameworks

четверг, 13 июня 13 г.

Page 17: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

+ Асинхронный код.+ Грязная работа уже сделана.+ Поддерживается Python, Node.js, C++.

Cocaine Frameworks

четверг, 13 июня 13 г.

Page 18: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

Cocaine Frameworks

четверг, 13 июня 13 г.

Page 19: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Python#!/usr/bin/env python

from cocaine.worker import Worker

W = Worker() # Dispatcher object

def event_handler(request, response): req = yield request.read() # Read incoming data if "Hello!" in req: response.write("Hello, world!") # Send data chunk else: response.write("Please, say 'Hello' to me!") response.close()

W.run({"hello" : event_handler}) # Run event loop.

bit.ly/YaSubb-dummy

четверг, 13 июня 13 г.

Page 20: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Node.js#!/usr/bin/env node

var Q = require("q")var co = require("..")var argv = require("optimist").argvvar mp = require("msgpack")var __assert = require("assert")var crypto = require("crypto")

var W

co.getServices([],function(){    var W = new co.Worker(argv)  W.on("hash",function(stream){    var sha512 = crypto.createHash("sha512")    var request    stream.on("data",function(data){ request = data

      sha512.update(data) })        stream.on("end",function(){      var d = sha512.digest("hex")      stream.write(        mp.pack({code:200,                 headers:[ ["content-type","text/plain"], ["content-length",""+(d.length+1)],                   ["x-by","worker"+argv.uuid]]}))      stream.write(d+"\n")      stream.end()    })  })  W.on("_terminate",function(){    console.log("worker terminating")    process.exit(0)  })})

четверг, 13 июня 13 г.

Page 21: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

#include <fstream>#include <functional>#include <cocaine/framework/worker.hpp>#include <cocaine/framework/application.hpp>

using namespace cocaine::framework;

class AppProxy : public application<AppProxy>{ struct event_handler : public handler<AppProxy>, public std::enable_shared_from_this<event_handler> { event_handler(std::shared_ptr<AppProxy> a) : handler<AppProxy>(a) { } void on_chunk(const char *chunk, size_t size) { response()->write(chunk); response()->close(); } }; public: AppProxy(std::shared_ptr<service_manager_t> service_manager) : application<AppProxy>(service_manager) { } void initialize() { on<event_handler>("get"); }};

int main(int argc, char *argv[]){ cocaine::framework::worker_t::run<AppProxy>(argc, argv);}

С++

четверг, 13 июня 13 г.

Page 22: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Драйверычетверг, 13 июня 13 г.

Page 23: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Драйверы

четверг, 13 июня 13 г.

Page 24: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

• Обычно, приложения — event driven.

Драйверы

четверг, 13 июня 13 г.

Page 25: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

Драйверы

четверг, 13 июня 13 г.

Page 26: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

You app

Драйверы

timeoutTimer Driver

http-requestHTTP Driver

file-changedFilesystem Driver

Cocaine

четверг, 13 июня 13 г.

Page 27: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

You app

Драйверы

timeoutTimer Driver

http-requestHTTP Driver

Arduino Driver?

file-changedFilesystem Driver

Cocaine

четверг, 13 июня 13 г.

Page 28: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

You app

Драйверы

timeoutTimer Driver

http-requestHTTP Driver

wind-speedArduino Driver?

file-changedFilesystem Driver

Cocaine

четверг, 13 июня 13 г.

Page 29: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

{ "slave" : "dummy_with_drivers.py", "drivers" : { "A": { "type": "filesystem-monitor", "args": { "emit": "file_changed", "path": "/tmp/dummy-file" } },

"B": { "type": "time", "args": { "emit": "wakeup", "interval": 1000 } } }}

Configure drivers

четверг, 13 июня 13 г.

Page 30: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сервисычетверг, 13 июня 13 г.

Page 31: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сервисы

четверг, 13 июня 13 г.

Page 32: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

• К общим компонентам — общий доступ.

Сервисы

четверг, 13 июня 13 г.

Page 33: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

Сервисы

четверг, 13 июня 13 г.

Page 34: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

Сервисы

четверг, 13 июня 13 г.

Page 35: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

Сервисы

четверг, 13 июня 13 г.

Page 36: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сервисы

Geolocation

Logging

URL Fetching

MapReduce

RPCApp #1 WorkerApp #1 WorkerApp #2 WorkerApp #2 Worker

Cocaine

четверг, 13 июня 13 г.

Page 37: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

#!/usr/bin/env python

from cocaine.worker import Workerfrom cocaine.services import Service

storage = Service("storage")

def write_dummy(request, response): req = yield request.read() yield storage.write("dummy-namespace", "dummy-key",\ req , ["dummy-tag"]) dummy = yield storage.read("dummy-namespace", "dummy-key") response.write(dummy) response.close()

W = Worker()W.run({"write_dummy" : write_dummy})

Python bit.ly/YaSubb-cocaine-service

четверг, 13 июня 13 г.

Page 38: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Протоколчетверг, 13 июня 13 г.

Page 39: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Взаимодействие

четверг, 13 июня 13 г.

Page 40: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

• Сервисы, приложения, ядро - общаются по одному протоколу.

Взаимодействие

четверг, 13 июня 13 г.

Page 41: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

• Сервисы, приложения, ядро - общаются по одному протоколу.• Простой - состоит из 7 команд.

Взаимодействие

четверг, 13 июня 13 г.

Page 42: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

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

Взаимодействие

четверг, 13 июня 13 г.

Page 43: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

[1, 0, [ arg1, arg2 ]]

номер канала

код команды

специфичные для командыданные

четверг, 13 июня 13 г.

Page 44: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Команды

• heartbeat• handshake• terminate• error• invoke• chunk• choke

четверг, 13 июня 13 г.

Page 45: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-Runtimeчетверг, 13 июня 13 г.

Page 46: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-Runtime

четверг, 13 июня 13 г.

Page 47: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-Runtime

• Управляет количеством воркеров

четверг, 13 июня 13 г.

Page 48: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-Runtime

• Управляет количеством воркеров• Запускает сервисы

четверг, 13 июня 13 г.

Page 49: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-Runtime

• Управляет количеством воркеров• Запускает сервисы• Собирает статистику о других runtime

четверг, 13 июня 13 г.

Page 50: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-Runtime

• Управляет количеством воркеров• Запускает сервисы• Собирает статистику о других runtime• Предоставляет локатор сервисов

четверг, 13 июня 13 г.

Page 51: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-Runtime

• Управляет количеством воркеров• Запускает сервисы• Собирает статистику о других runtime• Предоставляет локатор сервисов• Загружает драйверы

четверг, 13 июня 13 г.

Page 52: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-toolчетверг, 13 июня 13 г.

Page 53: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Cocaine-tool

• Управление приложениями в облаке• Информация о состоянии облака• Для тех, кто не боится командной строки

четверг, 13 июня 13 г.

Page 54: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

service cocaine-runtime start

• Стартуют сервисы• Создаются сокеты для воркеров• Инициализируются данные для приложений

четверг, 13 июня 13 г.

Page 55: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

service cocaine-runtime start

CocaineRuntime

• Стартуют сервисы• Создаются сокеты для воркеров• Инициализируются данные для приложений

четверг, 13 июня 13 г.

Page 56: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

service cocaine-runtime start

CocaineRuntime

Service Node

Service Locator

Other services

• Стартуют сервисы• Создаются сокеты для воркеров• Инициализируются данные для приложений

четверг, 13 июня 13 г.

Page 57: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

service cocaine-runtime start

CocaineRuntime

UDS for appB

Service Node

Service Locator

Other services

• Стартуют сервисы• Создаются сокеты для воркеров• Инициализируются данные для приложений

четверг, 13 июня 13 г.

Page 58: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

service cocaine-runtime start

CocaineRuntime

UDS for appBUDS for appA

Service Node

Service Locator

Other services

• Стартуют сервисы• Создаются сокеты для воркеров• Инициализируются данные для приложений

четверг, 13 июня 13 г.

Page 59: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Рождение

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

• Запускает worker• Ждет handshake от worker’а• Worker стартует и шлет handshake

четверг, 13 июня 13 г.

Page 60: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Рождение

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

first event for appA

• Запускает worker• Ждет handshake от worker’а• Worker стартует и шлет handshake

четверг, 13 июня 13 г.

Page 61: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Рождение

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

first event for appA

workerfor A

fork & exec slave --uuid <uuid> --endpoint <UDS>

runtime ждет handshake

• Запускает worker• Ждет handshake от worker’а• Worker стартует и шлет handshake

четверг, 13 июня 13 г.

Page 62: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Рождение

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

first event for appA

handshakewith uuid

workerfor A

fork & exec slave --uuid <uuid> --endpoint <UDS>

runtime ждет handshake

• Запускает worker• Ждет handshake от worker’а• Worker стартует и шлет handshake

четверг, 13 июня 13 г.

Page 63: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сессия

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

workerfor A

четверг, 13 июня 13 г.

Page 64: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сессия

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

workerfor A

четверг, 13 июня 13 г.

Page 65: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сессия

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

workerfor A

четверг, 13 июня 13 г.

Page 66: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сессия

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

workerfor A

service endpoint

четверг, 13 июня 13 г.

Page 67: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сессия

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

workerfor A

service endpoint

Service storageanother CR node

четверг, 13 июня 13 г.

Page 68: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Сессия

CocaineRuntimeUDS for appA UDS for appB

Service Node

Service Locator

Other services

workerfor A

service endpoint

Service storageanother CR node

четверг, 13 июня 13 г.

Page 69: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

- Да, наверняка ничего не работает!- Сейчас покажу!

bitly.com/iwantcoke

четверг, 13 июня 13 г.

Page 70: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Модуличетверг, 13 июня 13 г.

Page 71: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

Модули

четверг, 13 июня 13 г.

Page 72: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

• Всё, кроме ядра системы — подключаемые модули.

Модули

четверг, 13 июня 13 г.

Page 73: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

• Всё, кроме ядра системы — подключаемые модули.• Драйверы, изоляторы, сервисы, стораджи, системы логирования.

Модули

четверг, 13 июня 13 г.

Page 74: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

• Всё, кроме ядра системы — подключаемые модули.• Драйверы, изоляторы, сервисы, стораджи, системы логирования.• И их можно менять в рантайме.

Модули

четверг, 13 июня 13 г.

Page 75: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

• Essentials• Blastbeat Driver• CGroups Isolation• MongoDB Storage• Elliptics Storage• URLFetch Service

Open Source

четверг, 13 июня 13 г.

Page 76: Антон Тюрин — Облачная платформа Cocaine — облако своими руками

[email protected]@Noxi0uz

Спасибо

Разработчик облачной платформы

Антон Тюрин

четверг, 13 июня 13 г.