SlideShare a Scribd company logo
Eventmachine Структура evented-приложений
fork per request Отстрел форка на запрос
Раньше была практика форкаться на запрос; copy-on-write позволял шарить между процессами код; невообразимо медленно, но для модемов нормально.
предфоркнутые обработчики prefork
Apache первой версии, все воркеры держат accept; N-воркеров — N одновременных запросов; mod_php в безопасности; отдача файликов на модемы кладет сервер; дорогая межсерверная коммуникация.
Вместо процессов нитки thread pool
Для разделения данных между воркерами, запускаются треды. Те же процессы, но в одном адресном пространстве; Проблемы с синхронизацией ниток.
новые проблемы Много клиентов
При большом количестве одновременных запросов начинаются проблемы с шедулингом и переключением контекста; время поровну делится на клиентов и пропорционально количеству клиентов замедляется отдача ответа
Нитки отчасти помогают уменьшить стоимость переключения контекста, т.к. не требуют смены адресного пространства
Valgrind и gdb будут сниться ночью. Проезд по памяти осуществляется под нагрузкой и очень плохо отслеживается
Помимо непредсказуемости переключения, нитки неоптимальны по количеству переключений: Переключения в данном примере стоило бы делать так:
Нитки в Ruby Медленные; Не утилизируют ядра процессора; Реализованы самым неоптимальным способом; Основные библиотеки не threadsafe (мало кто вкладывает в это силы).
Evented Многие сетевые приложения делают частый ввод-вывод и быструю обработку данных (шаблонизация + проверки); Операции ввода вывода долгие и с неизвестным временем работы. Чем их ждать, лучше заниматься делом; Беда с дисковым вводом-выводом: он на текущий момент на практике синхронный; НЕ конечный автомат (FSM); Нитки в руби реализованы через вызов select.
Приходящее событие; Обработка; Запись данных в сокет.
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

PPTX
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
PPTX
Андрей Акиньшин
PPTX
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq
PDF
Tarantool Silverbox, Юрий Востриков
PPT
DWR @ DevClub.eu
PDF
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
PPT
Использование AMQP в основе архитектуры бэкенда для мобильного приложения
PDF
Юрий Насретдинов, Badoo
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Андрей Акиньшин
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq
Tarantool Silverbox, Юрий Востриков
DWR @ DevClub.eu
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Использование AMQP в основе архитектуры бэкенда для мобильного приложения
Юрий Насретдинов, Badoo

What's hot (20)

PDF
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
PPTX
Скорость с доставкой до пользователя
PPTX
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
PDF
Vladimir V Perepelitsa Ae Highload
PPTX
Антон Турецкий
PPTX
Event Machine
PDF
Архитектура хранения фотографий в Badoo
PDF
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
PDF
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
PPTX
Как собирать gps треки раз в секунду, экономя траффик
PDF
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
PDF
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
PPTX
Асинхронная обработка данных: RabbitMQ, Comet
PDF
Ровная балансировка нагрузки на фронтенд-кластере
PPTX
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
PPT
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
PPTX
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
PPTX
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
PPTX
Модификации KVM для работы в кластере, Андрей Шетухин
PDF
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Скорость с доставкой до пользователя
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Vladimir V Perepelitsa Ae Highload
Антон Турецкий
Event Machine
Архитектура хранения фотографий в Badoo
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Как собирать gps треки раз в секунду, экономя траффик
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Асинхронная обработка данных: RabbitMQ, Comet
Ровная балансировка нагрузки на фронтенд-кластере
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Модификации KVM для работы в кластере, Андрей Шетухин
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Ad

Similar to Макс Лапшин - "EventMachine и evented архитектура" (20)

PPT
Eventmachine: структура evented-приложений
PPTX
Hosting for forbes.ru_
PPTX
Rails for dummies
KEY
Erlang&rails
PDF
PDF
Опыт использования Spark, Основано на реальных событиях
PDF
Другая виртуализация
PPT
ВВЕДЕНИЕ В NODE.JS
PPTX
Dz Java Hi Load 0.4
PPT
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
PPT
Node.js (RichClient)
PDF
TMPA-2013 Sartakov: Genode
PDF
специализированные http-демона (Сергей Боченков, Александр Панков)
ODP
MUM Построение сети доступа на основе технологий DHCP + Radius на Mikrotik
PDF
Java Platform Performance BoF
PDF
Анатомия веб-сервиса, Андрей Смирнов
PDF
Анатомия веб-сервиса (РИТ-2014)
PDF
Distributed systems
PPTX
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
PPTX
Опыт эксплуатации большого проекта на Ruby
Eventmachine: структура evented-приложений
Hosting for forbes.ru_
Rails for dummies
Erlang&rails
Опыт использования Spark, Основано на реальных событиях
Другая виртуализация
ВВЕДЕНИЕ В NODE.JS
Dz Java Hi Load 0.4
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
Node.js (RichClient)
TMPA-2013 Sartakov: Genode
специализированные http-демона (Сергей Боченков, Александр Панков)
MUM Построение сети доступа на основе технологий DHCP + Radius на Mikrotik
Java Platform Performance BoF
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса (РИТ-2014)
Distributed systems
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Опыт эксплуатации большого проекта на Ruby
Ad

Макс Лапшин - "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); Нитки в руби реализованы через вызов select.
  • 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 рабочих процессов.