SlideShare a Scribd company logo
Tempesta FW:
challenges,
internals,
use cases
Александр Крижановский
Привет :)
• Tempesta Technologies — с 2014, подразделение
NatSys Lab
• NatSys Lab — с 2008, разработка
высокопроизводительных систем
– хранения
– обработки сетевого трафика
• Сделали cамую быструю реализацию lock-free
очереди задач (Linux Journal, Jun 12, 2013)
• Исследовали производительность Intel TSX
Challenges (Зачем?)
• Современный Internet бывает зол
• Но есть Web-рыцари добра и света
Challenges (Зачем?)
• Современный Internet бывает зол
• Но есть Web-рыцари добра и света
• .., которые фильтруют плохие запросы
Рыцарь WAF
• Оружие: XHTML, WSDL, Machine learning, Regexps
• Платформа: Nginx, Apache Traffic Server etc.
Пример: Nginx + regexps
0 5000 10000 15000 20000 25000 30000 35000
0
5000
10000
15000
20000
25000
30000
4168 4133
6855
HyperScan
Vanilla Nginx
PCRE-JIT
Target RPS
ActualRPS
Результат: WAF
15K HTTP RPS на 24 ядрах
(а хочется >100KRPS)
Снова об акселерации
Рыцарь Anti-DDoS CDN
• Оружие: DPI или Firewall + Machine Learning
• Платформа: Nginx
Application layer DDoS
Service from Cache Rate limit
Nginx 22us 23us
Application layer DDoS
Service from Cache Rate limit
Nginx 22us 23us
• Fail2Ban: пишем файл, парсим файл, пишем файл,
парсим файл…
Application layer DDoS
Service from Cache Rate limit
Nginx 22us 23us
• Fail2Ban: пишем файл, парсим файл, пишем файл,
парсим файл… - 21й век?!
Что не может Web-сервер?
• Фильтровать DDoS трафик
– мелкие запросы
– флуды
Что не может Web-сервер?
• Фильтровать DDoS трафик
– мелкие запросы
– флуды
• Быстро работать (c10k => c100k) ??!!
Профиль Web-сервера
% symbol name
1.5719 ngx_http_parse_header_line
1.0303 ngx_vslprintf
0.6401 memcpy
0.5807 recv
0.5156 ngx_linux_sendfile_chain
0.4990 ngx_http_limit_req_handler
+ довольно длинный хвост
Вызовы Web-сервера
epoll_wait(.., {{EPOLLIN, ....}},...)
recvfrom(3, "GET / HTTP/1.1rnHost:...", ...)
// parse HTTP
write(1, “...limiting requests, excess...", ...)
writev(3, "HTTP/1.1 503 Service...", ...)
sendfile(3,..., 383)
recvfrom(3, ...) = -1 EAGAIN
epoll_wait(.., {{EPOLLIN, ....}}, ...)
recvfrom(3, "", 1024, 0, NULL, NULL) = 0
close(3)
HTTP парсер
Start: state = 1, *str_ptr = 'b'
while (++str_ptr) {
switch (state) { <= check state
case 1:
switch (*str_ptr) {
case 'a':
...
state = 1
case 'b':
...
state = 2
}
case 2:
...
}
...
}
HTTP парсер
Start: state = 1, *str_ptr = 'b'
while (++str_ptr) {
switch (state) {
case 1:
switch (*str_ptr) {
case 'a':
...
state = 1
case 'b':
...
state = 2 <= set state
}
case 2:
...
}
...
}
HTTP парсер
Start: state = 1, *str_ptr = 'b'
while (++str_ptr) {
switch (state) {
case 1:
switch (*str_ptr) {
case 'a':
...
state = 1
case 'b':
...
state = 2
}
case 2:
...
}
... <= jump to while
}
HTTP парсер
Start: state = 1, *str_ptr = 'b'
while (++str_ptr) {
switch (state) { <= check state
case 1:
switch (*str_ptr) {
case 'a':
...
state = 1
case 'b':
...
state = 2
}
case 2:
...
}
...
}
HTTP парсер
Start: state = 1, *str_ptr = 'b'
while (++str_ptr) {
switch (state) {
case 1:
switch (*str_ptr) {
case 'a':
...
state = 1
case 'b':
...
state = 2
}
case 2:
... <= do something
}
...
}
HTTP парсер
Асинхронный I/O
Асинхронный I/O
Асинхронный I/O
Асинхронный I/O
Итого: Web-сервер
• Медленный HTTP парсинг
• Контекст свитчи
• Копирование
• Асинхронная модель I/O
• Файлы и файловые дескрипторы
• Web-cache не имеет представления о NUMA
Linux?
Linux zero-copy I/O - миф
tcp_transmit_skb(sock *sk, sk_buff *skb,
int clone_it, ...)
{
...
if (likely(clone_it))
skb = pskb_copy(skb, gfp_mask);
else
skb = skb_clone(skb, gfp_mask);
...
}
Что делают современники?
“...standard servers
running an in-house OS.
The key to achieve that
performance was to
disable IRQs, no
syscalls, no context
switching, no kernel, no
memcopy, new stack
etc. Basically in few
hundreds ticks a packet
hits the nginx or
whatever application
runs on it.”
User-space TCP/IP
(~Exokernel ОС)
• Sandstorm
– Netmap
– Специализированный TCP/IP стек:
●
Web-сервер «знает» о пакетах
●
преаллокация пакетов
– syscall batching (latency)
• mTCP (http://shader.kaist.edu/mtcp/)
– PSIO, DPDK
– TCP/IP stack from scratch (~15KoL, linux >130KoL)
Итого: User- vs Kernel-space
• Проблемы Web-сервера не уходят
(прикладной уровень не «знает» о сетевом)
• Все равно есть syscall'ы (немного)
• Фиксированный размер буферов
• Неконтролируемое вытеснение
(lock-free, RCU, spinlock)
• Большой дублирующий пласт кода
И снова синхронизация...
И снова синхронизация...
...приходим к тем же локам и копированиям
Не только TCP/IP, но и СУБД
• Web-cache
• Сессии
• Правила фильтрации
• Web Application Server: вообще что угодно
• WAF & DDoS mitigation: модели обучения и пр.
Что делают разработчики
СУБД?
• Buffer pool (page cache в ОС)
• Планирование I/O ( --''-- в ОС)
• Префетчинг блоков ( --''-- в ОС)
• Транзакционный лог ( --''-- в ФС)
• open(O_DIRECT) (OS bypass)...
Что думают об этом
разработчики ядра
«In short, the whole "let's bypass the OS" notion is just
fundamentally broken. It sounds simple, but it sounds
simple only to an idiot who writes databases and doesn't
even UNDERSTAND what an OS is meant to do.»
Linus Torvalds
«Re: O_DIRECT question»
https://lkml.org/lkml/2007/1/11/129
Tempesta FW
• Минималистичная и очень быстрая реализация в
ядре
– Web-прокси и Web-сервер
– Key-value in-memory база данных (Tempesta DB)
Tempesta FW
• Минималистичная и очень быстрая реализация в
ядре
– Web-прокси и Web-сервер
– Key-value in-memory база данных (Tempesta DB)
• Фаервол на сетевых уровнях IP, TCP, HTTP
Tempesta FW
• Минималистичная и очень быстрая реализация в
ядре
– Web-прокси и Web-сервер
– Key-value in-memory база данных (Tempesta DB)
• Фаервол на сетевых уровнях IP, TCP, HTTP
• Оптимизация и доработка вместо специализации
Tempesta FW: macrokernel?
• Прикладная логика в user-space
– Tempesta DB: tdbq → libtdb → kernel engine
– Tempesta FW: CGI-like zero-copy интерфейс (TODO)
Cинхронный I/O
• Вся работа в softirq
Cинхронный I/O
• Вся работа в softirq
• Нет очередей (на чтение)
Cинхронный I/O
• Вся работа в softirq
• Нет очередей (на чтение)
• Нет файловых дескрипторов
Cинхронный I/O
• Вся работа в softirq
• Нет очередей (на чтение)
• Нет файловых дескрипторов
• Меньше блокировок
Cинхронный I/O
• Вся работа в softirq
• Нет очередей (на чтение)
• Нет файловых дескрипторов
• Меньше блокировок
=> Быстрее чтение (и парсинг HTTP!)
Synchronous Sockets
http://natsys-lab.blogspot.ru/2013/03/whats-wrong-with-
sockets-performance.html
Быстрый HTTP парсер
237ms 470ms
http://natsys-lab.blogspot.ru/2014/11/the-fast-finite-state-
machine-for-http.htmlc
Tempesta DB
In-memory Key-Value
Tempesta DB
In-memory Key-Value
• Cache conscious Burst Hash Trie
Tempesta DB
In-memory Key-Value
• Cache conscious Burst Hash Trie
• Lock-free (почти)
Tempesta DB
In-memory Key-Value
• Cache conscious Burst Hash Trie
• Lock-free (почти)
• Huge pages
Tempesta DB
In-memory Key-Value
• Cache conscious Burst Hash Trie
• Lock-free (почти)
• Huge pages
• Быстрый транспорт в/из user-space
Tempesta DB:
zero-copy транспорт
http://natsys-lab.blogspot.ru/2015/03/linux-netlink-mmap-
bulk-data-transfer.html
Web-кэш
• На основе Tempesta DB
• NUMA-aware
Web-кэш: NUMA sharding
Web-кэш: NUMA replication
Frang: HTTP DoS
• Rate limits
– request_rate, request_burst
– connection_rate, connection_burst
– concurrent_connections
Frang: HTTP DoS
• Rate limits
– request_rate, request_burst
– connection_rate, connection_burst
– concurrent_connections
• Slow HTTP
– client_header_timeout, client_body_timeout
– http_header_cnt
– http_header_chunk_cnt, http_body_chunk_cnt
Frang: WAF
• Ограничения размеров
– http_uri_len, http_field_len, http_body_len
Frang: WAF
• Ограничения размеров
– http_uri_len, http_field_len, http_body_len
• Допустимые значения
– http_ct_required, http_ct_vals
– http_methods
Frang: фильтрация
Frang: фильтрация
Frang: фильтрация
Frang: фильтрация
Балансировка нагрузки
• Динамический реконнект
Балансировка нагрузки
• Динамический реконнект
• Конфигурируемое число соединений к бакендам
Балансировка нагрузки
• Динамический реконнект
• Конфигурируемое число соединений к бакендам
• Планировщики
– HTTP (по группам серверов)
●
Wildcards, full match, prefix
●
Метод, URI, Host
●
Любые заголовоки
Балансировка нагрузки
• Динамический реконнект
• Конфигурируемое число соединений к бакендам
• Планировщики
– HTTP (по группам серверов)
●
Wildcards, full match, prefix
●
Метод, URI, Host
●
Любые заголовоки
– Round-robin (внутри групп серверов)
Балансировка нагрузки
• Динамический реконнект
• Конфигурируемое число соединений к бакендам
• Планировщики
– HTTP (по группам серверов)
●
Wildcards, full match, prefix
●
Метод, URI, Host
●
Любые заголовоки
– Round-robin (внутри групп серверов)
– Rendezvous hashing
Пример
srv_group static { # sched=round-robin
server 10.10.0.1:8080;
server [fc00::2]:8081;
}
srv_group dynamic sched=hash {
server 10.10.0.3:8080; # conns_n = 4
server [fc00::4]:8081 conns_n=8;
}
srv_group black_hole { }
sched_http_rules {
match black_hole hdr_raw prefix "X-Bad:";
match static uri prefix "/static/";
match dynamic * * *;
}
Sticky cookie
• Идентификация пользователей
• enforce: HTTP 302 redirect
sticky name=__tfw_user_id__ enforce;
А не страшно ли в ядре?
#include <linux/module.h>
static int oops_init(void)
{
BUG();
}
module_init(oops_init);
# insmod oops.ko || echo "$?, but I'm alive"
Segmentation fault
139, but I'm alive
# dmesg|grep oops.c
kernel BUG at /root/oops_failover/oops.c:4!
Бенчмарки… :(
https://github.com/natsys/tempesta/issues/30
Спасибо!
Source Code (GPLv2):
https://github.com/natsys/tempesta
Blog:
http://natsys-lab.blogspot.com
E-mail:
ak@natsys-lab.com

More Related Content

PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PDF
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
PPTX
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
PPTX
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...

What's hot (20)

PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
PDF
Чему мы научились разрабатывая микросервисы?
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
PPTX
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PDF
Балансировка нагрузки и отказоустойчивость в Одноклассниках
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PDF
Архитектура HAWQ / Алексей Грищенко (Pivotal)
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PDF
My talk at Highload++ 2015
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Чему мы научились разрабатывая микросервисы?
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Архитектура HAWQ / Алексей Грищенко (Pivotal)
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
My talk at Highload++ 2015
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ad

Similar to Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempesta Technologies) (20)

PDF
Веб-сервер Phantom
PDF
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
PDF
Механика DDoS (Александр Крижановский)
PPT
Воюем за ресурсы (ZFConf2011)
PDF
Анатомия веб сервиса (HighLoad-2014)
PDF
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
PPT
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
PPT
распределенная архитектура Lamp приложений петр зайцев
PDF
специализированные http-демона (Сергей Боченков, Александр Панков)
PPT
Web весна 2012 лекция 3
PDF
Анатомия веб-сервиса, Андрей Смирнов
PDF
Анатомия веб-сервиса (РИТ-2014)
PPTX
Hosting for forbes.ru_
PDF
Что такое Highload? Секреты высокой нагрузки
PDF
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
PPTX
Варианты развертывания проектов на M3
PPTX
от авгиевых конюшен к звездам
PDF
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
PDF
Web осень 2013 лекция 3
PDF
HPC file systems (160761)
Веб-сервер Phantom
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
Механика DDoS (Александр Крижановский)
Воюем за ресурсы (ZFConf2011)
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб-сервиса, Андрей Смирнов (ex-Skype)
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
распределенная архитектура Lamp приложений петр зайцев
специализированные http-демона (Сергей Боченков, Александр Панков)
Web весна 2012 лекция 3
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса (РИТ-2014)
Hosting for forbes.ru_
Что такое Highload? Секреты высокой нагрузки
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Варианты развертывания проектов на M3
от авгиевых конюшен к звездам
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Web осень 2013 лекция 3
HPC file systems (160761)
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempesta Technologies)