Событийные машины Сетевая многозадачность: событийные машины Павел Кудинов HighLoad 2007
Что такое сетевая многозадачность? Параллельная обработка сетевых соединений в рамках WWW: - входящие HTTP запросы - исходящие HTTP запросы
Когда это нужно? динамические страницы на базе готовых HTTPD – CGI – FastCGI дополнительные HTTP запросы браузеров – AJAX – IFRAME автономные HTTP серверы – прикладные демоны автономные HTTP клиенты – бот (web-crawler) – взаимодействующие веб-сервисы гибридные приложения (клиент+сервер) – шлюз – агрегатор – сложный веб-сервис
Почему это важно? Готовые решения часто не подходят! Понимание проблемы – необходимое условие её решения
Абстракция квантования Многозадачность – это квантование сетевых и вычислительных ресурсов параллельные процессы (IPC) мультиплексирование (multiplex) многопоточность (threads)
Параллельные процессы
+ применяется несколько CPU + полная изоляция контекста + не требуется микро синхронизация – требуется макро синхронизация – ресурсоёмкость – неконкурентный ввод/вывод – гибридная функция невозможна – неконтролируемое квантование
Мультиплексирование
+ не требуется микро синхронизация + не требуется макро синхронизация + максимально возможная эффективность + конкурентный ввод/вывод + идеальная модель гибридной функции + полный контроль квантования – контекст блокирует приложение – применяется только один CPU
Многопоточность
+ применяется несколько CPU + не требуется макро синхронизация + конкурентный ввод/вывод v достаточная эффективность v физический контроль квантования v дискретная модель гибридной функции v частичная изоляция контекста – требуется микро синхронизация
характеристикаIPCmultiplexthread конкурентный ввод/вывод–++ микро синхронизация++– макро синхронизация–++ изоляция контекста+–v эффективность–+v несколько CPU+–+ контроль квантования–+v гибридная функция–+v
Мультиплексирование: уровни абстракции 1. Системные функции poll, select, epoll, kqueue 2. Библиотеки libevent 3. Конечные автоматы POE - событийная машина на Perl 4.Распределённые объекты CORBA
POE: производительность + быстрее, чем mod_perl / FastCGI медленнее, чем libevent + синхронный ввод/вывод прикладных запросов в секунду
Кластеризация событийных машин
Объединение HTTP сервисов
Спасибо за внимание! Сетевая многозадачность: событийные машины Павел Кудинов Агентство «Точка Кипения» Технический директор