sysmerge IT

15 сент. 2017 г.

nginxconf 2017: Оптимизация веб серверов под большие пропускные способности и низкие задержки. Часть 1.

Перевод доклада Алексея Иванова на nginxConf 2017 на тему "Оптимизация веб серверов под большие пропускные способности и низкие задержки"(Optimizing web servers for high throughput and low latency). Оригинал тут. Перевод вольный, не дословный. Некоторые части(вроде вступлений) опущены.

Часть 1. Железо.

Процессор.
Для высоких показателей ассиметричного RSA / EC (ec - elliptic curve, криптография на эллиптических кривых) необходимо обратить внимание на процессоры с поддержкой технологии AVX2(avx2 в /proc/cpuinfo) а так же расчеты с длинной арифметикой (adx и bmi). В случае с симметричным шифрованием обратите внимание на AES-NI для шифрования AES и AVX512 в случае с ChaCha+Poly. У Intel есть сравнение производительности различных поколений их железа на OpenSSL 1.0.2, которое демонстрирует эффект от выбора того или иного процессора.


Чувствительные к задержкам задачи, как роутинг, к примеру, получат прирост к производительности в случае использования меньшего количество NUMA нод и отключением HT(Hyper-Threading). Задачи, требующие большой пропускной способности, в свою очередь потребуют большего количества ядер и включенного HT, причем зависимость от NUMA минимальна.

Если вы используете железо от Intel, то необходимо выбирать как минимум Haswell/Broadwell, а в идеале  Skylake процессоры. Для AMD идеальным выбором будет EPYC.

NIC(сетевая карта)
Тут вы должны выбирать как минимум 10G,а  лучше даже 25G карточки. Если необходимы еще большие объемы на 1 сервер, то тюнинг, описанный тут, будет не особо эффективен и придется тюнить на уровне ядра. С точки зрения ПО - выбирайте открытые драйверы с активными рассылками и большим комьюнити. Это пригодится вам если (а точнее "когда") вы будете дебажить проблемы на уровне драйверов.

Память
Тут правило простое - если ваша задача чувствительна к задержкам, то нужна быстрая память, а если задача чувствительная к пропускной способности, то памяти нужно побольше.

Диск
Выбор зависит от требований к буферизации/кешированию, но если вы намереваетесь кешировать большие объемы данных, то стоить выбирать хранилища на основе флеш-памяти.  Некоторые заходят настолько далеко, что используют файловые системы, заточенные под флеш-хранилища, правда, в основном, они не дают производительности лучшей чем чистый ext4/xfs. В любом случае, главное не убейте свой флеш из-за того, что не включили TRIM или забыли обновить прошивку.