6. Проблемы?
— Если worker-ов больше чем процессоров —
возникает конкуренция за процессор.
— Worker-ы могут блокировать друг-друга.
— Если все worker-ы заблокированы, запросы
накапливаются в очереди и ждут, когда
освободится worker.
6
9. Все, что мы сделали — это
разделили запросы к системе
на два типа.
9
10. Профит!
— Запросы поделились на два типа —
статика и динамика.
— При правильной конфигурации статика
будет отдаваться, даже если нет
свободных worker-ов.
10
11. Что будет, если добавить в
нашу систему еще один тип
запросов?
11
13. Не так страшно
— Для привязки worker-процессов к
процессорам можно использовать
cpu_affinity или cgroups.
— При правильной конфигурации статика
будет отдаваться, даже если нет
свободных worker-ов.
13
20. • Конечный автомат (FSM)
• EPOLL-based
• Coroutine и continuations
• Написан from scratch
• Сильно оптимизирован
Phantom
20
21. • Не совсем честный FSM
• Worker thread-ы можно групировать в
пулы
• Пулы можно привязывать к процессорам
• Обработку разных типов запросов можно
отдавать в разные пулы
• Pure C++! :)
Phantom
21
30. Нить выполнения
- принять соединение
- изготовить continuation
- передать его протоколлеру
- распарсить запрос
- переложить continuation
в соответствующий scheduler
- передать управление соответствующему
хэндлеру
30
33. И ещё раньше чем мы
научили phantom отвечать на
запросы, мы научили его их
задавать.
33
34. Для этого пришлось написать
отдельный модуль,
использовав уже
существующий планировщик.
34
35. Нить выполнения
- изготовить необходимое количество
continuation-ов
- передать их протоколлеру
- вычитать запрос из лога
- отправить запрос если пришло время
- вычитать и распарсить ответ
- обновить статистику
35
36. Инструмент для нагрузочного
тестирования
Phantom
— Поддержка любых stateless-протоколов
— Равномерность создаваемой нагрузки
— Высокая производительность
— На его основе написан фреймворк для
нагрузочного тестирования - Lunapark
36
37. Пример запроса
306 100
GET /su/ HTTP/1.1
Host: ****.yandex.ru
Accept: */*
Connection: close
Referer: http://afisha.yandex.ru/spb/events/?category=cinema&page=2
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ru-ru)
AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16
X-Real-IP: xxx.xxx.xx.xxx
37