Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
ERLANG
СДЕЛАЕТ ВАШИ
ПРИЛОЖЕНИЯ
РЕАЛТАЙМОВЫМИ
BRO AGENCY
БЕДА ИЛЬЯ
@IR4Y_IX
1
ЧТО НУЖНО ЗНАТЬ
О WEB-ПРИЛОЖЕНИЯХ
Это клиент-сервеное приложение
работающее по протоколу HTTP
Схема работы не подходят
для создания приложений реального времени
2
HTTP REQUEST
MIDDLEWARE
MIDDLEWARE
MIDDLEWARE
HANDLER
MIDDLEWARE
MIDDLEWARE
MIDDLEWARE
APPLICATION
WEB SERVER
REQUEST TO
APPLICATION
APPLICATION
RESPONCE
APPLICATION
WEB SERVER
BROWSER
DRAW PAGE
3
ПРОБЛЕМА
Эта схема синхронная
Работает по типу запрос ответ
Инициатором соединения выступает клиент
ЧТО ДЕЛАТЬ
ЕСЛИ СЕРВЕРУ
НУЖНО О ЧЕМ-ТО
ОПОВЕСТИТЬ
КЛИЕНТА?
5
ЭВОЛЮЦИЯ
ПУТЕЙ РЕШЕНИЯ
Пользователь сам обновит страницу
Short Polling
LongPolling
Comet
WebSocket
6
WEBSOCKET
WebSocket превращает HTTP
в асинхронный и симетричный протокол
7
ПОПУЛЯРНЫЕ ВЕБ-ФРЕЙМОРКИ
К ЭТОМУ НЕ ГОТОВЫ
Оптимизированы для работы
по схеме запрос-ответ
Не готовы обрабатывать потоки данных
Не готовы обрабатывать пул WebSocket
соединений
8
КАК ЖЕ БЫТЬ ?
Переписать все на
специализированных
фреймворках, например,
N₂O или meteor.js
Это долго и очень дорого
9
А МОЖЕТ КАК-ТО
ПО СТАРИНКЕ?
«Давайте возьмем и напишем часть
нашего приложения, отвечающую за реалтайм
в виде отдельного модуля!
А все остальное оставим без изменения.»
10
ЧТО МОЖНО
ИСПОЛЬЗОВАТЬ?
NodeJS
EventMachine
Tornado
Libevent
ERLANG
11
ЧТО ТАКОЕ
ERLANG?
Создан в 1980-х годах компанией Ericsson
и использовался в телекоммуникационном
оборудовании.
В 1998 году вышел в open source
и стал набирать популярность.
12
ОСНОВОПОЛАГАЮЩИЕ
ПРИНИНЦИПЫ
LET IT CRASH
МОДЕЛЬ
АКТОРОВ
НЕИЗМЕНЯЕМЫЕ
ДАННЫЕ
13
ПОЧЕМУ ERLANG?
Изначальная ориентация на реалтайм
Проверен годами в телекоммуникационном
оборудовании
Создан инженерами для инженеров
14
КАК ОБСТОЯТ ДЕЛА
С WEB?
N₂O ChicagoBoss
15
ЧТО БУДЕМ
ИСПОЛЬЗОВАТЬ?
DJANGO — основной Web фреймворк
TASTYPIE — приложение для создания REST
ANGULARJS — фронтенд
REDIS — Publish/Subscribe очередь сообщений
COWBOY — обработчик WebSocket соединении
POSTGRESQL
ANGULARJS
DJANGO ORM
MODEL
TASTYPIE
MODEL
RESOURCE
16
SUBSCRIBER
17
PUBLISH SUBSCRIBE
PUBLISHER SUBSCRIBER
SUBSCRIBER
CHANNEL
POSTGRESQL REDIS
DJANGO
ORM MODEL
TASTYPIE
SERIALIZER
TASTYPIE
MODEL
RESOURCE
ANGULARJS ANGULARJS
COWBOY
EREDIS
SUBSCRIBE
PROCESS
ERLANG
BULLET
SUBSCRIBESAVE
PUBLISH
TESTYPIE
HYDRATE
HTTP POST WEBSOCKET
20
ПОЧЕМУ БЫ
НЕ ПОЙТИ ДАЛЬШЕ?
Добавим RPC вызовы через RabbitMQ
Добавим возможность подписываться
на канал во время RPC вызовов.
Оформим в виде отдельной библиотеки:
https://github.com/ir4y/asteroid
CELERY
WORKER
RABBITMQ
ERLANG
CELERY CLIENT
COWBOY
ERLANG
BULLET
ANGULARJS
RPC PROVIDER
SELECT WORKER SEND TASK RESULT
IN JSON
PARSE CELERY
RESULT
RESTORE UUID
APPEND UUID
TO CELERY RESULT
SEND DATA
TO BULLET PROCESS
ROUTE RECEIVED DATA
WITH UUID TO CALLBACK
SERIALIZE DATA TO JSON
SAVE UUID
SPAWN PROCESS
SYNC CALL TO CELERY
GENERATE UUID
CALL PROCEDUER
GITHUB.COM/IR4Y

More Related Content

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