Download - Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

Transcript
Page 1: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

ERLANG СДЕЛАЕТ ВАШИ ПРИЛОЖЕНИЯ РЕАЛТАЙМОВЫМИ

BRO AGENCYБЕДА ИЛЬЯ@IR4Y_IX

Page 2: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

1 ЧТО НУЖНО ЗНАТЬ О WEB-ПРИЛОЖЕНИЯХ

Это клиент-сервеное приложение работающее по протоколу HTTP

Схема работы не подходят для создания приложений реального времени

Page 3: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

2

HTTP REQUEST

MIDDLEWARE

MIDDLEWARE

MIDDLEWARE

HANDLER

MIDDLEWARE

MIDDLEWARE

MIDDLEWARE

APPLICATIONWEB SERVER

REQUEST TOAPPLICATION

APPLICATION RESPONCE

APPLICATIONWEB SERVER

BROWSER

DRAW PAGE

Page 4: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

3 ПРОБЛЕМА

Эта схема синхронная

Работает по типу запрос ответ

Инициатором соединения выступает клиент

Page 5: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

ЧТО ДЕЛАТЬ ЕСЛИ СЕРВЕРУ НУЖНО О ЧЕМ-ТО ОПОВЕСТИТЬ КЛИЕНТА?

Page 6: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

5 ЭВОЛЮЦИЯ ПУТЕЙ РЕШЕНИЯ

Пользователь сам обновит страницуShort PollingLongPollingCometWebSocket

Page 7: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

6 WEBSOCKET

WebSocket превращает HTTP в асинхронный и симетричный протокол

Page 8: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

7 ПОПУЛЯРНЫЕ ВЕБ-ФРЕЙМОРКИК ЭТОМУ НЕ ГОТОВЫ

Оптимизированы для работы по схеме запрос-ответ

Не готовы обрабатывать потоки данных

Не готовы обрабатывать пул WebSocket соединений

Page 9: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

8 КАК ЖЕ БЫТЬ ?

Переписать все на специализированных фреймворках, например, N₂O или meteor.js

Это долго и очень дорого

Page 10: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

9 А МОЖЕТ КАК-ТО ПО СТАРИНКЕ?

«Давайте возьмем и напишем часть нашего приложения, отвечающую за реалтайм в виде отдельного модуля!А все остальное оставим без изменения.»

Page 11: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

10 ЧТО МОЖНО ИСПОЛЬЗОВАТЬ?

NodeJSEventMachineTornadoLibevent

ERLANG

Page 12: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

11 ЧТО ТАКОЕ ERLANG?

Создан в 1980-х годах компанией Ericssonи использовался в телекоммуникационном оборудовании.

В 1998 году вышел в open source и стал набирать популярность.

Page 13: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

12 ОСНОВОПОЛАГАЮЩИЕ ПРИНИНЦИПЫ

LET IT CRASH

МОДЕЛЬ АКТОРОВ

НЕИЗМЕНЯЕМЫЕДАННЫЕ

Page 14: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

13 ПОЧЕМУ ERLANG?

Изначальная ориентация на реалтайм

Проверен годами в телекоммуникационном оборудовании

Создан инженерами для инженеров

Page 15: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

14 КАК ОБСТОЯТ ДЕЛА С WEB?

N₂O ChicagoBoss

Page 16: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

15 ЧТО БУДЕМ ИСПОЛЬЗОВАТЬ?

DJANGO — основной Web фреймворкTASTYPIE — приложение для создания RESTANGULARJS — фронтендREDIS — Publish/Subscribe очередь сообщенийCOWBOY — обработчик WebSocket соединении

Page 17: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

POSTGRESQL

ANGULARJS

DJANGO ORM MODEL

TASTYPIE MODEL RESOURCE

16

Page 18: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

SUBSCRIBER

17 PUBLISH SUBSCRIBE

PUBLISHER SUBSCRIBER

SUBSCRIBER

CHANNEL

Page 19: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

POSTGRESQL REDIS

DJANGO ORM MODEL

TASTY

PIE

SERIA

LIZER

TASTYPIE MODEL RESOURCE

ANGULARJS ANGULARJS

COWBOY

EREDISSUBSCRIBE PROCESS

ERLA

NG

BULLET

SUBSCRIBESAVE PUBLISH

TESTYPIEHYDRATE

HTTP POST WEBSOCKET

Page 20: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

20 ПОЧЕМУ БЫ НЕ ПОЙТИ ДАЛЬШЕ?

Добавим RPC вызовы через RabbitMQ

Добавим возможность подписываться на канал во время RPC вызовов.

Оформим в виде отдельной библиотеки: https://github.com/ir4y/asteroid

Page 21: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

CELERY WORKER

RABBITMQ

ERLANG CELERY CLIENT

COWBOY

ERLA

NG

BULLET

ANGULARJS RPC PROVIDER

SELECT WORKER SEND TASK RESULT IN JSON

PARSE CELERY RESULT

RESTORE UUIDAPPEND UUID TO CELERY RESULTSEND DATA TO BULLET PROCESS

ROUTE RECEIVED DATA WITH UUID TO CALLBACK

SERIALIZE DATA TO JSON

SAVE UUIDSPAWN PROCESS

SYNC CALL TO CELERY

GENERATE UUIDCALL PROCEDUER

Page 22: Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»

GITHUB.COM/IR4Y