SlideShare a Scribd company logo
1 of 21
Eventmachine
evented-Структура приложений
fork per request
Отстрел форка на запрос
• ;Раньше была практика форкаться на запрос
• copy-on-write позволял шарить между процессами
;код
• ,невообразимо медленно но для модемов
.нормально
предфоркнутые обработчики
prefork
• Apache ,первой версии все воркеры держат
accept;
• N-  — N ;воркеров одновременных запросов
• mod_php ;в безопасности
• отдача файликов на модемы кладет
;сервер
• .дорогая межсерверная коммуникация
Вместо процессов нитки
thread pool
• ,Для разделения данных между воркерами
. ,запускаются треды Те же процессы но в
;одном адресном пространстве
• .Проблемы с синхронизацией ниток
новые проблемы
Много клиентов
• При большом количестве одновременных запросов
начинаются проблемы с шедулингом и
;переключением контекста
• время поровну делится на клиентов и
пропорционально количеству клиентов замедляется
отдача ответа
• Нитки отчасти помогают уменьшить стоимость
, . .переключения контекста т к не требуют смены
адресного пространства
• Valgrind gdb .и будут сниться ночью Проезд по
памяти осуществляется под нагрузкой и очень
плохо отслеживается
• ,Помимо непредсказуемости переключения нитки
:неоптимальны по количеству переключений
• Переключения в данном примере стоило бы делать
:так
RubyНитки в
• ;Медленные
• ;Не утилизируют ядра процессора
• ;Реализованы самым неоптимальным способом
• threadsafe (Основные библиотеки не мало кто
).вкладывает в это силы
Evented
• -Многие сетевые приложения делают частый ввод
(вывод и быструю обработку данных шаблонизация
+ );проверки
• Операции ввода вывода долгие и с неизвестным
. ,временем работы Чем их ждать лучше заниматься
;делом
• - :Беда с дисковым вводом выводом он на текущий
;момент на практике синхронный
• (FSM);НЕ конечный автомат
• ;Приходящее событие
• ;Обработка
• .Запись данных в сокет
EVentmachine
• - Ruby 1.8;Стандарт де факто для
• ;Ввод данных
• ;Готовность к выводу данных
• ;Таймер
• OS ( , SIGHUP . .).Сигнал от мертвый ребенок и т п
next tick
• delayed_jobВместо можно выполнить долгую
(операцию после текущего такта работы на
run loop)следующем
Проблемы
• Очень тяжело распиливать линейный код на
;колбеки
• (eventedИспользование многоядерности
приложения вообще стараются делать
).однонитевыми
Fibers
• Ruby 1.9 fibers —В есть управляемые пользователем
. Coroutines;нитки
• Neverblock Ruby 1.8;Команда портировала их на
• Revactor Eventmachine,использует не а стандарную
libev;
• eventmachine.Совмещают удобства ниток и
multicore
• ;Руби пока далек от использования многоядерности
• 1.9 GIL;В всё равно есть
• Возможно альтернативные команды помогут
(Rubinius, MacRuby);
• Python GIL;тоже использует
• Java ( , );В нитки дорогие системные а не зеленые
• .Запускаем процессы по количеству ядер
Выводы
• Fork ;очень дорогой
• -eventedНе архитектура плохо обслуживает много
;медленных клиентов
• EventMachine ,для руби подходит прекрасно огромное
, ;количество библиотек всё хорошо
• Fibers EventMachine,удобнее чем но мало
;используются
• NДля работы на многих ядрах запускается рабочих

More Related Content

What's hot

Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...SQALab
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователяAnatoliy Orlov
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей ФедоровCodeFest
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Tarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковTarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковFuenteovejuna
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Ontico
 
DWR @ DevClub.eu
DWR @ DevClub.euDWR @ DevClub.eu
DWR @ DevClub.euarsenikum
 
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Ontico
 
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)Ontico
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикAndrew Minkin
 
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js GeeksLab Odessa
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветлениеMaxim Sokhatsky
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDAlex Chistyakov
 
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...Yehor Herasymchuk
 

What's hot (19)

Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователя
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
 
Sivko
SivkoSivko
Sivko
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Tarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковTarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий Востриков
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
 
DWR @ DevClub.eu
DWR @ DevClub.euDWR @ DevClub.eu
DWR @ DevClub.eu
 
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
 
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
Cautious: IPv6 is here / Александр Азимов (Qrator Labs)
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
 
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
JS Lab2017_Виталий Лебедев_Практические сложности при разработке на node.js
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
 
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
 

Viewers also liked

630-HCD-2016 Proyecto de Comunicación: limpieza en diversas calles de la loca...
630-HCD-2016 Proyecto de Comunicación: limpieza en diversas calles de la loca...630-HCD-2016 Proyecto de Comunicación: limpieza en diversas calles de la loca...
630-HCD-2016 Proyecto de Comunicación: limpieza en diversas calles de la loca...Brest Fabian Dario
 
Alles was Sie über die Medizinische Fakultät in Košice wissen müssen
Alles was Sie über die Medizinische Fakultät in Košice wissen müssenAlles was Sie über die Medizinische Fakultät in Košice wissen müssen
Alles was Sie über die Medizinische Fakultät in Košice wissen müssenPeter Zavacký
 
257-HCD-2013 Proyecto Comunicación sobre refugios en la localidad de Beccar
257-HCD-2013 Proyecto Comunicación sobre refugios en la localidad de Beccar257-HCD-2013 Proyecto Comunicación sobre refugios en la localidad de Beccar
257-HCD-2013 Proyecto Comunicación sobre refugios en la localidad de BeccarBrest Fabian Dario
 
The different forms of print based media techniques and technologies
The different forms of print based media techniques and technologiesThe different forms of print based media techniques and technologies
The different forms of print based media techniques and technologiesRyan McDonnell
 

Viewers also liked (7)

Tugas 5 rekweb
Tugas 5 rekwebTugas 5 rekweb
Tugas 5 rekweb
 
630-HCD-2016 Proyecto de Comunicación: limpieza en diversas calles de la loca...
630-HCD-2016 Proyecto de Comunicación: limpieza en diversas calles de la loca...630-HCD-2016 Proyecto de Comunicación: limpieza en diversas calles de la loca...
630-HCD-2016 Proyecto de Comunicación: limpieza en diversas calles de la loca...
 
Alles was Sie über die Medizinische Fakultät in Košice wissen müssen
Alles was Sie über die Medizinische Fakultät in Košice wissen müssenAlles was Sie über die Medizinische Fakultät in Košice wissen müssen
Alles was Sie über die Medizinische Fakultät in Košice wissen müssen
 
utx3e.odp
utx3e.odputx3e.odp
utx3e.odp
 
257-HCD-2013 Proyecto Comunicación sobre refugios en la localidad de Beccar
257-HCD-2013 Proyecto Comunicación sobre refugios en la localidad de Beccar257-HCD-2013 Proyecto Comunicación sobre refugios en la localidad de Beccar
257-HCD-2013 Proyecto Comunicación sobre refugios en la localidad de Beccar
 
The different forms of print based media techniques and technologies
The different forms of print based media techniques and technologiesThe different forms of print based media techniques and technologies
The different forms of print based media techniques and technologies
 
Perito en Medio Ambiente
Perito en Medio AmbientePerito en Medio Ambiente
Perito en Medio Ambiente
 

Similar to Eventmachine: структура evented-приложений

Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Асинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАсинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАндрей Федоровский
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на ErlangMax Lapshin
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo Development
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Max Lapshin
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Alexander Syrotenko
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPFlyElephant
 

Similar to Eventmachine: структура evented-приложений (20)

Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Асинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАсинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, Comet
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на Erlang
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Migrate!
Migrate!Migrate!
Migrate!
 
Async Python
Async PythonAsync Python
Async Python
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
 

More from Александр Ежов

Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Александр Ежов
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуАлександр Ежов
 
Liquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoRLiquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoRАлександр Ежов
 
Антикризисная презентация
Антикризисная презентацияАнтикризисная презентация
Антикризисная презентацияАлександр Ежов
 
Обзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для RailsОбзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для RailsАлександр Ежов
 
Использования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложенииИспользования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложенииАлександр Ежов
 
Интернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russianИнтернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russianАлександр Ежов
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsАлександр Ежов
 

More from Александр Ежов (20)

Кеширование данных в БД
Кеширование данных в БДКеширование данных в БД
Кеширование данных в БД
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015
 
Rails 5: awesome features and breaking changes
Rails 5: awesome features and breaking changesRails 5: awesome features and breaking changes
Rails 5: awesome features and breaking changes
 
Big Data и Ruby
Big Data и RubyBig Data и Ruby
Big Data и Ruby
 
Abstract machines for great good
Abstract machines for great goodAbstract machines for great good
Abstract machines for great good
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секунду
 
Liquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoRLiquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoR
 
Vim or die
Vim or dieVim or die
Vim or die
 
Capistrano Rails
Capistrano RailsCapistrano Rails
Capistrano Rails
 
Умное кэширование в Rails
Умное кэширование в RailsУмное кэширование в Rails
Умное кэширование в Rails
 
Sphinx как база данных
Sphinx как база данныхSphinx как база данных
Sphinx как база данных
 
Emacs и Rails
Emacs и RailsEmacs и Rails
Emacs и Rails
 
Антикризисная презентация
Антикризисная презентацияАнтикризисная презентация
Антикризисная презентация
 
Дэдлоки
ДэдлокиДэдлоки
Дэдлоки
 
Обзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для RailsОбзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для Rails
 
Приложения в плагинах
Приложения в плагинахПриложения в плагинах
Приложения в плагинах
 
Использования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложенииИспользования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложении
 
Масштабирование в Rails
Масштабирование в RailsМасштабирование в Rails
Масштабирование в Rails
 
Интернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russianИнтернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russian
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 

Eventmachine: структура evented-приложений

  • 2. fork per request Отстрел форка на запрос
  • 3. • ;Раньше была практика форкаться на запрос • copy-on-write позволял шарить между процессами ;код • ,невообразимо медленно но для модемов .нормально
  • 5. • Apache ,первой версии все воркеры держат accept; • N-  — N ;воркеров одновременных запросов • mod_php ;в безопасности • отдача файликов на модемы кладет ;сервер • .дорогая межсерверная коммуникация
  • 7. • ,Для разделения данных между воркерами . ,запускаются треды Те же процессы но в ;одном адресном пространстве • .Проблемы с синхронизацией ниток
  • 9. • При большом количестве одновременных запросов начинаются проблемы с шедулингом и ;переключением контекста • время поровну делится на клиентов и пропорционально количеству клиентов замедляется отдача ответа
  • 10. • Нитки отчасти помогают уменьшить стоимость , . .переключения контекста т к не требуют смены адресного пространства
  • 11. • Valgrind gdb .и будут сниться ночью Проезд по памяти осуществляется под нагрузкой и очень плохо отслеживается
  • 12. • ,Помимо непредсказуемости переключения нитки :неоптимальны по количеству переключений • Переключения в данном примере стоило бы делать :так
  • 13. RubyНитки в • ;Медленные • ;Не утилизируют ядра процессора • ;Реализованы самым неоптимальным способом • threadsafe (Основные библиотеки не мало кто ).вкладывает в это силы
  • 14. Evented • -Многие сетевые приложения делают частый ввод (вывод и быструю обработку данных шаблонизация + );проверки • Операции ввода вывода долгие и с неизвестным . ,временем работы Чем их ждать лучше заниматься ;делом • - :Беда с дисковым вводом выводом он на текущий ;момент на практике синхронный • (FSM);НЕ конечный автомат
  • 15. • ;Приходящее событие • ;Обработка • .Запись данных в сокет
  • 16. EVentmachine • - Ruby 1.8;Стандарт де факто для • ;Ввод данных • ;Готовность к выводу данных • ;Таймер • OS ( , SIGHUP . .).Сигнал от мертвый ребенок и т п
  • 17. next tick • delayed_jobВместо можно выполнить долгую (операцию после текущего такта работы на run loop)следующем
  • 18. Проблемы • Очень тяжело распиливать линейный код на ;колбеки • (eventedИспользование многоядерности приложения вообще стараются делать ).однонитевыми
  • 19. Fibers • Ruby 1.9 fibers —В есть управляемые пользователем . Coroutines;нитки • Neverblock Ruby 1.8;Команда портировала их на • Revactor Eventmachine,использует не а стандарную libev; • eventmachine.Совмещают удобства ниток и
  • 20. multicore • ;Руби пока далек от использования многоядерности • 1.9 GIL;В всё равно есть • Возможно альтернативные команды помогут (Rubinius, MacRuby); • Python GIL;тоже использует • Java ( , );В нитки дорогие системные а не зеленые • .Запускаем процессы по количеству ядер
  • 21. Выводы • Fork ;очень дорогой • -eventedНе архитектура плохо обслуживает много ;медленных клиентов • EventMachine ,для руби подходит прекрасно огромное , ;количество библиотек всё хорошо • Fibers EventMachine,удобнее чем но мало ;используются • NДля работы на многих ядрах запускается рабочих