Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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

What's hot

Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ontico
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователя
Anatoliy Orlov
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Tanya Denisyuk
 
Vladimir V Perepelitsa Ae Highload
Vladimir V  Perepelitsa Ae HighloadVladimir V  Perepelitsa Ae Highload
Vladimir V Perepelitsa Ae Highload
rit2010
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
CodeFest
 
Event Machine
Event MachineEvent Machine
Event Machine
Nikolay Norkin
 
Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в Badoo
Badoo Development
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Ontico
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Tanya Denisyuk
 
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
Andrew Minkin
 
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
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Ontico
 
Асинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАсинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, Comet
Андрей Федоровский
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development
 
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Ontico
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Ontico
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Ontico
 
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Ontico
 
Модификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей ШетухинМодификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей Шетухин
Ontico
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Ontico
 

What's hot (20)

Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователя
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
Vladimir V Perepelitsa Ae Highload
Vladimir V  Perepelitsa Ae HighloadVladimir V  Perepelitsa Ae Highload
Vladimir V Perepelitsa Ae Highload
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
Event Machine
Event MachineEvent Machine
Event Machine
 
Архитектура хранения фотографий в Badoo
Архитектура хранения фотографий в BadooАрхитектура хранения фотографий в Badoo
Архитектура хранения фотографий в Badoo
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
 
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
 
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...
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
 
Асинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАсинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, Comet
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
Виртуализированный highload (NFV), Александр Шалимов (ЦПИКС)
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
 
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
 
Модификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей ШетухинМодификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей Шетухин
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
 

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

Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
Александр Ежов
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
Vasil Remeniuk
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
Yandex
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
HighLoad2009
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
Alexander Frolov
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
Iosif Itkin
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)
Ontico
 
MUM Построение сети доступа на основе технологий DHCP + Radius на Mikrotik
MUM Построение сети доступа на основе технологий DHCP + Radius на Mikrotik MUM Построение сети доступа на основе технологий DHCP + Radius на Mikrotik
MUM Построение сети доступа на основе технологий DHCP + Radius на Mikrotik
Naim Shafiev
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
Dmitry Buzdin
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
Andrey Smirnov
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей Смирнов
Ontico
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
Даниил Зайцев
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Fwdays
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
 

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

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

Макс Лапшин - "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 рабочих процессов.