asynchronous applications in ruby. roman gorel

33

Upload: sphere-consulting-inc

Post on 14-Jan-2015

191 views

Category:

Technology


0 download

DESCRIPTION

Kiev-rb#2

TRANSCRIPT

Page 1: Asynchronous Applications in Ruby. Roman Gorel
Page 2: Asynchronous Applications in Ruby. Roman Gorel

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

Роман Горель

Page 3: Asynchronous Applications in Ruby. Roman Gorel

Вебсервер

Приложение

БД

Запрос

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

Page 4: Asynchronous Applications in Ruby. Roman Gorel

Вебсервер

Приложение

БД

Запрос

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

Page 5: Asynchronous Applications in Ruby. Roman Gorel

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

Приложение

БД

Запрос

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

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

Page 6: Asynchronous Applications in Ruby. Roman Gorel

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

Приложение

БД

Приложение

Приложение

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

Приложение

БД

Приложение

Приложение

Балансер

Сервер 1

Сервер 2

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

Page 7: Asynchronous Applications in Ruby. Roman Gorel

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

Page 8: Asynchronous Applications in Ruby. Roman Gorel

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

Page 9: Asynchronous Applications in Ruby. Roman Gorel

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

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

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

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

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

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

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

Page 10: Asynchronous Applications in Ruby. Roman Gorel

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

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

● GIL

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

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

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

Page 11: Asynchronous Applications in Ruby. Roman Gorel

Запрос Поток

Запрос Поток

Запрос Поток

Пул

10k

Очередь

Проблема C10k

Page 12: Asynchronous Applications in Ruby. Roman Gorel

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

Page 13: Asynchronous Applications in Ruby. Roman Gorel

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

Page 14: Asynchronous Applications in Ruby. Roman Gorel

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

Page 15: Asynchronous Applications in Ruby. Roman Gorel

Reactor pattern

Page 16: Asynchronous Applications in Ruby. Roman Gorel

EventMachine

Page 17: Asynchronous Applications in Ruby. Roman Gorel

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

Page 18: Asynchronous Applications in Ruby. Roman Gorel

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

Page 19: Asynchronous Applications in Ruby. Roman Gorel

EM deferred

Page 20: Asynchronous Applications in Ruby. Roman Gorel

Sync vs Deferred

Page 21: Asynchronous Applications in Ruby. Roman Gorel

Свои Deferred классы

Page 22: Asynchronous Applications in Ruby. Roman Gorel

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

Page 23: Asynchronous Applications in Ruby. Roman Gorel

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

Page 24: Asynchronous Applications in Ruby. Roman Gorel

EM-Synchrony

Page 25: Asynchronous Applications in Ruby. Roman Gorel

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

Page 26: Asynchronous Applications in Ruby. Roman Gorel

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

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

Page 27: Asynchronous Applications in Ruby. Roman Gorel

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

Page 28: Asynchronous Applications in Ruby. Roman Gorel

Sinatra::Async

Page 29: Asynchronous Applications in Ruby. Roman Gorel

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

● Gemfile

● Routes.rb

Page 30: Asynchronous Applications in Ruby. Roman Gorel
Page 31: Asynchronous Applications in Ruby. Roman Gorel

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

Rails controller, sleep(1)

AsyncTest

Page 32: Asynchronous Applications in Ruby. Roman Gorel

Почитать

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

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

ductions/

Page 33: Asynchronous Applications in Ruby. Roman Gorel