Облачные технологии шагают вперед семимильными шагами, количество компаний, переносящих свои бизнес-приложения в облака, увеличивается. В тоже время не все готовы доверить свои приложения и данные сторонней компании, предоставляющей облачную инфраструктуру. В этом случае отличным решением будет использование нашей открытой облачной платформы Cocaine, которую вы можете развернуть сами.
Платформа активно развивается, и мы хотим поделиться новыми интересными возможностями, которые в ней появились за последнее время. Например, рассказывая о сервисах, которые нужны практически каждому облачному приложению: о том, как пользоваться уже существующими и как написать свои.
1 of 76
More Related Content
Антон Тюрин — Облачная платформа Cocaine — облако своими руками
1. Облачная платформа
Cocaine - облако
своими рукаим
Антон Тюрин
разработчик облачной платформы
четверг, 13 июня 13 г.
2. Кокаин — это облачная платформа
четверг, 13 июня 13 г.
3. bit.ly/YaSubb-011212
Про Cocaine на Я.Субботнике
в Санкт-Петербурге в декабре 2012
Осторожно! С тех пор стало ещё лучше!
четверг, 13 июня 13 г.
5. + Написать нужно только основную
логику.
Неуправляемые платформы
четверг, 13 июня 13 г.
6. + Написать нужно только основную
логику.
+ Быстрая и дешёвая разработка.
Неуправляемые платформы
четверг, 13 июня 13 г.
7. + Написать нужно только основную
логику.
+ Быстрая и дешёвая разработка.
– Ограничения в выборе инструментов.
Неуправляемые платформы
четверг, 13 июня 13 г.
8. + Написать нужно только основную
логику.
+ Быстрая и дешёвая разработка.
– Ограничения в выборе инструментов.
– Нет контроля за окружением.
Неуправляемые платформы
четверг, 13 июня 13 г.
11. Управляемые платформы
+ Можно запустить почти всё что угодно.
+ Полный контроль над окружением.
четверг, 13 июня 13 г.
12. Управляемые платформы
+ Можно запустить почти всё что угодно.
+ Полный контроль над окружением.
– Нужно всё написать самому.
четверг, 13 июня 13 г.
13. Управляемые платформы
+ Можно запустить почти всё что угодно.
+ Полный контроль над окружением.
– Нужно всё написать самому.
– Полный цикл разработки.
четверг, 13 июня 13 г.
16. + Асинхронный код.
+ Грязная работа уже сделана.
Cocaine Frameworks
четверг, 13 июня 13 г.
17. + Асинхронный код.
+ Грязная работа уже сделана.
+ Поддерживается Python, Node.js, C++.
Cocaine Frameworks
четверг, 13 июня 13 г.
18. + Асинхронный код.
+ Грязная работа уже сделана.
+ Поддерживается Python, Node.js, C++.
– Нужно адаптировать существующий код.
Cocaine Frameworks
четверг, 13 июня 13 г.
19. 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 г.
20. Node.js
#!/usr/bin/env node
var Q = require("q")
var co = require("..")
var argv = require("optimist").argv
var 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 г.
21. #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 г.
32. • К общим компонентам — общий доступ.
Сервисы
четверг, 13 июня 13 г.
33. • К общим компонентам — общий доступ.
• Геолокация, логирование, определение
модели телефона, хранение данных, ...
Сервисы
четверг, 13 июня 13 г.
34. • К общим компонентам — общий доступ.
• Геолокация, логирование, определение
модели телефона, хранение данных, ...
• Для всех и без лишних задержек.
Сервисы
четверг, 13 июня 13 г.
35. • К общим компонентам — общий доступ.
• Геолокация, логирование, определение
модели телефона, хранение данных, ...
• Для всех и без лишних задержек.
• Не надо писать биндинг в каждый язык
Сервисы
четверг, 13 июня 13 г.
40. • Сервисы, приложения, ядро - общаются
по одному протоколу.
Взаимодействие
четверг, 13 июня 13 г.
41. • Сервисы, приложения, ядро - общаются
по одному протоколу.
• Простой - состоит из 7 команд.
Взаимодействие
четверг, 13 июня 13 г.
42. • Сервисы, приложения, ядро - общаются
по одному протоколу.
• Простой - состоит из 7 команд.
• Поддерживает стриминг.
Взаимодействие
четверг, 13 июня 13 г.
43. [1, 0, [ arg1, arg2 ]]
номер канала
код команды
специфичные для команды
данные
четверг, 13 июня 13 г.
50. Cocaine-Runtime
• Управляет количеством воркеров
• Запускает сервисы
• Собирает статистику о других runtime
• Предоставляет локатор сервисов
четверг, 13 июня 13 г.
51. Cocaine-Runtime
• Управляет количеством воркеров
• Запускает сервисы
• Собирает статистику о других runtime
• Предоставляет локатор сервисов
• Загружает драйверы
четверг, 13 июня 13 г.
57. service cocaine-runtime start
Cocaine
Runtime
UDS for appB
Service Node
Service Locator
Other services
• Стартуют сервисы
• Создаются сокеты для воркеров
• Инициализируются данные для приложений
четверг, 13 июня 13 г.
58. service cocaine-runtime start
Cocaine
Runtime
UDS for appBUDS for appA
Service Node
Service Locator
Other services
• Стартуют сервисы
• Создаются сокеты для воркеров
• Инициализируются данные для приложений
четверг, 13 июня 13 г.
59. Рождение
Cocaine
RuntimeUDS for appA UDS for appB
Service Node
Service Locator
Other services
• Запускает worker
• Ждет handshake от worker’а
• Worker стартует и шлет handshake
четверг, 13 июня 13 г.
60. Рождение
Cocaine
RuntimeUDS for appA UDS for appB
Service Node
Service Locator
Other services
first event for appA
• Запускает worker
• Ждет handshake от worker’а
• Worker стартует и шлет handshake
четверг, 13 июня 13 г.
61. Рождение
Cocaine
RuntimeUDS for appA UDS for appB
Service Node
Service Locator
Other services
first event for appA
worker
for A
fork & exec slave --uuid <uuid> --endpoint <UDS>
runtime ждет handshake
• Запускает worker
• Ждет handshake от worker’а
• Worker стартует и шлет handshake
четверг, 13 июня 13 г.
62. Рождение
Cocaine
RuntimeUDS for appA UDS for appB
Service Node
Service Locator
Other services
first event for appA
handshake
with uuid
worker
for A
fork & exec slave --uuid <uuid> --endpoint <UDS>
runtime ждет handshake
• Запускает worker
• Ждет handshake от worker’а
• Worker стартует и шлет handshake
четверг, 13 июня 13 г.
66. Сессия
Cocaine
RuntimeUDS for appA UDS for appB
Service Node
Service Locator
Other services
worker
for A
service endpoint
четверг, 13 июня 13 г.
67. Сессия
Cocaine
RuntimeUDS for appA UDS for appB
Service Node
Service Locator
Other services
worker
for A
service endpoint
Service storage
another CR node
четверг, 13 июня 13 г.
68. Сессия
Cocaine
RuntimeUDS for appA UDS for appB
Service Node
Service Locator
Other services
worker
for A
service endpoint
Service storage
another CR node
четверг, 13 июня 13 г.
69. - Да, наверняка ничего не
работает!
- Сейчас покажу!
bitly.com/iwantcoke
четверг, 13 июня 13 г.
72. • Всё, кроме ядра системы —
подключаемые модули.
Модули
четверг, 13 июня 13 г.
73. • Всё, кроме ядра системы —
подключаемые модули.
• Драйверы, изоляторы, сервисы,
стораджи, системы логирования.
Модули
четверг, 13 июня 13 г.
74. • Всё, кроме ядра системы —
подключаемые модули.
• Драйверы, изоляторы, сервисы,
стораджи, системы логирования.
• И их можно менять в рантайме.
Модули
четверг, 13 июня 13 г.
75. • Essentials
• Blastbeat Driver
• CGroups Isolation
• MongoDB Storage
• Elliptics Storage
• URLFetch Service
Open Source
четверг, 13 июня 13 г.