Cocaine: сценарии использования (Дмитрий Унковский,...

35

Transcript of Cocaine: сценарии использования (Дмитрий Унковский,...

Page 1: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)
Page 2: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

Дмитрий УнковскийРазработчик инфраструктурных компонент

Cocaine: сценарии использования

Page 3: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

Запчасти

Page 4: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

Запчасти

Cocaine

Page 5: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

Запчасти

Cocaine

Elliptics

Page 6: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

Народная мудрость http://en.wikipedia.org/wiki/Actor_model

The Actor model adopts the philosophy that everything is an actor.

Cocaine

Page 7: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

7

The Actor model adopts the philosophy that everything is an actor. This is similar to the everything is an object philosophy used by some object-oriented programming languages, but differs in that object-oriented software is typically executed sequentially, while the Actor model is inherently concurrent.

An actor is a computational entity that, in response to a message it receives, can concurrently:

● send a finite number of messages to other actors;● create a finite number of new actors;● designate the behavior to be used for the next message it receives.

There is no assumed sequence to the above actions and they could be carried out in parallel.

Decoupling the sender from communications sent was a fundamental advance of the Actor model enabling asynchronous communication and control structures as patterns of passing messages.[7]

Recipients of messages are identified by address, sometimes called "mailing address". Thus an actor can only communicate with actors whose addresses it has. It can obtain those from a message it receives, or if the address is for an actor it has itself created.

The Actor model is characterized by inherent concurrency of computation within and among actors, dynamic creation of actors, inclusion of actor addresses in messages, and interaction only through direct asynchronous message passing with no restriction on message arrival order.

Page 8: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

8

У каждого Actor'а в наших терминах есть endpoint, то есть адрес, по которому этому Actor'у можно отправлять сообщения, вот в таком формате:

[method, session_id, [arguments...]]

Actors

Page 9: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

9

У каждого Actor'а в наших терминах есть endpoint, то есть адрес, по которому этому Actor'у можно отправлять сообщения, вот в таком формате:

[method, session_id, [arguments...]]

Actors

… и получать ответ вот в таком формате:

[method, session_id, [arguments...]]

Page 10: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

10

У каждого Actor'а в наших терминах есть endpoint, то есть адрес, по которому этому Actor'у можно отправлять сообщения, вот в таком формате:

[method, session_id, [arguments...]]

Actors

… а гораздо чаще в таком:

[chunk, session_id, [<binary-data>]] // один или больше[choke, session_id, []] // ответ окончен[error, session_id, [code, message]] // , ошибка ответ окончен

Page 11: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

11

Actors

• Сервисы– Плагины, взаимодействующие с cocaine-core

– Выполняются в пуле потоков внутри cocaine-runtime

– Сами обрабатывают входящую очередь сообщений

• Приложения– Пользовательский код, загруженный в облако

– Выполняется во внешних workers в разного рода isolate'ах

– Сообщения приложению сначала попадают в очередь внутри cocaine-runtime, после чего балансятся на экземпляры воркеров

– Cocaine-runtime управляет количеством запущенных воркеров в зависимости от заполненности очереди и других параметров

Page 12: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

12

Core Services

• Node– Деплоит, запускает и останавливает приложения на нодах кластера

• Locator– По имени сервиса или приложения возвращает его endpoint

Page 13: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

13

Важные вещи, которые помогают

• Autodiscovery

• Протокол, поддерживающий потоки

• Модульное всё

• Однообразность интерфейса

Page 14: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

14

Как с этим взаимодействовать?cocaine-framework-*

• Worker– код, который нужно подключить, чтобы приложение умело отвечать на запросы и работать с кокаин-потоками

• Client– код, который умеет находить сервисы и отправлять понятные им запросы

Page 15: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

15

Отправим сообщение в сервис Locator, попросим его найти нам сервис node:

[resolve, 123 /* session_id */, [“node”]]

Фреймворки python, nodejs, etc.

Page 16: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

16

Отправим сообщение в сервис Locator, попросим его найти нам сервис node:

[resolve, 123 /* session_id */, [“node”]]

Фреймворки python, nodejs, etc.

На что получим ответ [chunk, 123, [buffer]], и после распаковки buffer обнаружим вот такой ответ:

[[ 'hostname', 42653 ], // endpoint 1, // protocol version { 0: 'start_app', 1: 'pause_app', 2: 'list' }] // methods

Page 17: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

17

Примеры плагинов

• isolate: Docker, процессы, cgroups

• gateway: IPVS-балансировщик

• driver: источник сообщений о событиях для приложения– Опрашивать внешнюю очередь

– Мониторить события файловой системы

Page 18: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

Persistence, persistence и еще раз persistence

Elliptics

http://doc.reverbrain.com/elliptics:ellipticshttp://ioremap.net/node/tag/elliptics

Page 19: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

19

Elliptics это

DHT-based fault-tolerant distributed storage

Page 20: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

20

Elliptics это

DHT-based fault-tolerant distributed storage

… и не только.

● Маршрутизация запросов по ключу на ноду storage-кластера● Pluggable storage backend● Execution backend

Page 21: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

Сценарии

Page 22: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

22

Distributed Persistent Queue

Задача: хранить большой поток записей о событиях.

Интерфейс:

Push()

Pop()

Page 23: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

23

Как сделать очередь на DHT?

Distributed Persistent Queue

Page 24: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

24

Как сделать очередь на DHT?

Наивный подход мог бы быть таким:

Push ~ write(tail++, data)Pop ~ read(head++, data)

Distributed Persistent Queue

tail и head храним в каких-то специальных ключах.

.

Page 25: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

25

Как сделать очередь на DHT?

Наивный подход мог бы быть таким:

Push ~ write(tail++, data)Pop ~ read(head++, data)

Distributed Persistent Queue

tail и head храним в каких-то специальных ключах.

Так у нас и происходит.С поправкой на батчинг и другие оптимизации.

Page 26: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

26

Distributed Persistent Queue

Page 27: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

27

Веб-фронтенд

– Собрать/агрегировать данные из бекендов, наложить шаблоны, вернуть html.

– Поддерживать websocket-соединения для realtime-клиентского приложения

– Ajax-ручки для доступа к бекендам

Page 28: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

28

Веб-фронтенд

coca

ine-h

ttp-p

roxy

IPV

S

Page 29: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

29

Бекенд, тяжелые вычисления

– Перемножать большие матрицы– Распознавать голос– Image resize– Кодировать видео– …

Page 30: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

30

Бекенд, тяжелые вычисления

100x

Page 31: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

31

Вычисления рядом с данными

Page 32: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

32

Вычисления рядом с данными

exec(key, event@app, <binary-data>)

Page 33: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

33

Вычисления рядом с данными

exec(key, event@app, <binary-data>)

Page 34: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

34

Вычисления рядом с данными

exec(key, event@app, <binary-data>)

http://github.com/reverbrain/grape

Page 35: Cocaine: сценарии использования (Дмитрий Унковский, Яндекс)

Дмитрий Унковский

Разработчик инфраструктурных компонент

http://github.com/reverbrainhttp://github.com/cocainehttp://ioremap.nethttp://reverbrain.com

[email protected]

https://groups.google.com/forum/#!forum/reverbrain

Спасибо

[email protected]