HighLoad++ 2017
Зал Дели + Калькутта, 7 ноября, 15:00
Тезисы:
http://www.highload.ru/2017/abstracts/2940.html
Почти год назад я выступил с докладом 'Как и зачем создавать NginX-модуль - теория, практика, профит'. У меня не получилось рассказать обо всех возможностях Nginx и, уверяю вас, в этом докладе у меня это тоже не получится - тема слишком большая!
Сразу перейдем к делу. "Так что нового будет в этом докладе?" - спросите вы. В нем будут ответы на вопросы, на которые я не успел ответить в прошлом году, а именно:
- Как и зачем создавать upstream-модули?
...
11. Анатомия
+ upstream Keepalive module
Application serverHTTP
Application server
Application server
Application server
Application server
Application server
Native protocol
Proxy & balancing
12. Инсталляция
- Регистрируем новую директиву и
handler [1]
- Инициализируем новый upstream [2]
- Добавляем новый handler [3]
[1]
[2]
[3]
13. Обработка контента
- Инициализируется при запросе [1]
- Upstream & Downstream инициализируется при запросе, либо
берется из модуля Upstream KeepAlive [2]
- Handlers (ngx_upstream_t::*) [3]:
create_request - создание запроса к backend.
reinit_request - reset запроса к backend (вызывается до
create_request).
process_header - обработка headers от backend.
abort_request - клиент отменил запрос.
finalize_request - nginx закончил читать из backend.
input_filter_ctx - контекст input handlers(void *).
input_filter_init[4] - инициализация фильтра.
input_filter[5] - преобразование ответа от backend.
- Вычитываем тело, которое отправил клиент [6].
- В ngx_upstream_t::buffer хранится ответ от backend.
[1]
[2]
[3]
[5]
[4]
[6]
16. Инсталляция
- Регистрация модуля и
postconfiguration handler [1]
- Добавление в handler chain [2]
Внимание
Порядок модулей в chain не
гарантируется (!)
[1]
[2]
17. Обработка контента
Say hello to a stream parsing… (C)
О чем стоит помнить
- Все chain, все кусочками.
- ngx_buf_s::sync = 1, если у вас пустой
chain buffer.
- Иногда лучше использовать malloc,
realloc, free вместо chain buffer.
- Добавляйте кучу debug’а.
- Результатом работы предыдущего
модуля может быть поломка вашего.
33. Ссылки
https://github.com/dedok/nginx-tutorials — примеры с прошлого выступления.
https://github.com/tarantool/nginx_upstream_module — пример upstream-модуля.
https://www.nginx.com/resources/wiki/modules/ — библиотека знаний и модулей.
https://github.com/nginx/nginx — исходники nginx.
https://en.wikipedia.org/wiki/HTTP_Live_Streaming — о HLS.