2. NGINX, Inc.
• 2011 год
• Офисы
• San Francisco, 50 человек. Управление, маркетинг,
продажи.
• Москва, 24 человека. Разработка, поддержка.
• Продукты
• nginx open source
• NGINX Plus
11. Кирил Георгиев на турнире в Болгарии сыграл параллельно 360 партий.
Его итоговый результат: 284 победы, 70 вничью и 6 поражений.
nginx как безупречный гроссмейстер
12. Асинхронный подход
Плюсы:
• Эффективное использование системных
ресурсов
• Предсказуемая масштабируемость под
высокими нагрузками
Минусы:
• Сложность программирования
• Сложность отладки
• Блокирующие операции могут нивелировать
все плюсы
13. Цикл обработки событий nginx
Ожидание
событий на
соединениях
Получение
очереди
новых событий
Обработка
очереди
в цикле
Ядро ОС
15. Важные особенности
• Обработка в одном потоке
• События обрабатываются «мгновенно»
• Время обработки событий суммируется
• Одно событие задерживает обработку
последующих
18. Блокирующие операции в nginx
● Сторонние модули, работающие синхронно с
различными библиотеками и базами данных
● Операции с жестким диском
Задержка (µc)
Память < 0,1
Диск 100-1000+
● FreeBSD — есть неплохая поддержка AIO
● Linux требует флага O_DIRECT
24. Результаты первого теста (без пулов потоков):
% ifstat -bi eth2
eth2
Kbps in Kbps out
5531.24 1.03e+06
4855.23 812922.7
5994.66 1.07e+06
5476.27 981529.3
6353.62 1.12e+06
5166.17 892770.3
5522.81 978540.8
6208.10 985466.7
6370.79 1.12e+06
6123.33 1.07e+06
Running 1m test @ http://192.0.2.1:8000/1/1/1
12 threads and 50 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 7.42s 5.31s 24.41s 74.73%
Req/Sec 0.15 0.36 1.00 84.62%
488 requests in 1.01m, 2.01GB read
Requests/sec: 8.08
Transfer/sec: 34.07MB
На интерфейсе сервера:
Тестовый клиент:
25. Наблюдения
• Сервер отдает только ~1 Гбит/c
• Существенные задержки даже для данных,
которые отдаются из памяти
• Запросы случайных файлов со второго
клиента блокируют рабочие процессы nginx
26. Рабочие процессы nginx большую часть времени
заблокированы на I/O.
Пулы потоков не используются
27. А теперь включим пул потоков
и повторим тест.
location / {
root /storage;
aio threads;
}
28. Результаты второго теста (пул потоков включен):
% ifstat -bi eth2
eth2
Kbps in Kbps out
60915.19 9.51e+06
59978.89 9.51e+06
60122.38 9.51e+06
61179.06 9.51e+06
61798.40 9.51e+06
57072.97 9.50e+06
56072.61 9.51e+06
61279.63 9.51e+06
61243.54 9.51e+06
59632.50 9.50e+06
Running 1m test @ http://192.0.2.1:8000/1/1/1
12 threads and 50 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 226.32ms 392.76ms 1.72s 93.48%
Req/Sec 20.02 10.84 59.00 65.91%
15045 requests in 1.00m, 58.86GB read
Requests/sec: 250.57
Transfer/sec: 0.98GB
На интерфейсе сервера:
Тестовый клиент:
30. Рабочие процессы nginx большую часть времени
спят в ожидании событий.
Пулы потоков задействованы
31. Недостатки
• Накладные расходы на добавление заданий
• Операции с файлами, которые могут быть
обработаны сразу, всё ещё ждут в очереди
• Отсутствует возможность узнать где
находятся данные: в кэше ОС или на диске
• Системные вызовы fincore() (предложен в
2010 году) и preadv2(RWF_NONBLOCK) до сих
пор отсутствуют в ядре
43. nginScript
• Регистровая виртуальная машина
• Нет JIT
• Нет сборщика мусора
• Разделяемый объект для взаимодействия между
виртуальными машинами
• Подмножество ECMAScript 5.1:
• нет closures
• не все встроенные объекты (Date, Math, JSON)
49. Развенчиваем мифы
Чем HTTP/2 не является:
• Полной заменой HTTP/1
• Нарушением законов физики
• Серебряной пулей
Что же такое HTTP/2:
• Тот же SPDY с некоторыми отличиями
• Транспортный слой для HTTP/1 со своими
плюсами и минусами
• Экономия на хэндшейках
60. Подводные камни
• Сложный протокол
• Обратный эффект HTTP/1
оптимизаций
• Хорошо работает в определенных
условиях
• Ограничения на используемые
шифры
• Для каждого сайта эффект может
отличаться, необходимо тестировать