asynchronous applications in ruby. roman gorel

Post on 14-Jan-2015

187 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Kiev-rb#2

TRANSCRIPT

Асинхронные приложения в руби

Роман Горель

Вебсервер

Приложение

БД

Запрос

Ваше приложение

Вебсервер

Приложение

БД

Запрос

Остальные запросы – в очередь

Фронтэнд-сервер

Приложение

БД

Запрос

Приложение Приложение

Нужно больше инстансов!

Фронтэнд-сервер

Приложение

БД

Приложение

Приложение

Фронтэнд-сервер

Приложение

БД

Приложение

Приложение

Балансер

Сервер 1

Сервер 2

Докупим еще серверов

Синхронная модель

Многопоточность / многопроцессовость

Многопроцессовость

● Параллельное выполнение

● Легко управлять

● Дорогое переключение контекста

● Ресурсоемкость

● Параллельное выполнение

● Легко управлять

Многопоточность

● Потокобезопасность

● GIL

● Параллельное выполнение

● Дешевле переключение контекста

● Меньшее потребление ресурсов

Запрос Поток

Запрос Поток

Запрос Поток

Пул

10k

Очередь

Проблема C10k

Асинхронная модель

Блокировка в синхронной модели

Асинхронные технологии

Reactor pattern

EventMachine

Простой веб-сервер

ab -c 5 -n 10 "http://127.0.0.1:3000/"

EM deferred

Sync vs Deferred

Свои Deferred классы

Спагетти из коллбеков

Файберы приходят на помощь

EM-Synchrony

Немного магии EM-Synchrony

Поддерживаемые клиенты

● Mysql2● Activerecord (via mysql2)● Mongo / Mongoid● Memcached● Redis

Как же применить это к вебу?

Sinatra::Async

Маунтим к рельсам

● Gemfile

● Routes.rb

Проверим асинхронность

Rails controller, sleep(1)

AsyncTest

Почитать

● Илья Григорик - http://www.igvita.com/● Мануал по Twisted

http://krondo.com/?page_id=1327 ● http://everburning.com/news/eventmachine-intro

ductions/

top related