Рубрика "Вредные советы" ч.2 — больше не всегда лучше.
Увеличение размера очередей - один из самых частых и эффективных советов по тюнингу, который можно услышать.
И сложно спорить, всего один параметр, а сколько пользы:
* сглаживание всплесков нагрузки;
* меньше переполнений => меньше потери данных;
* пропускная способность растет, как и эффективность обработки (пакетами, а не штуками);
* больше асинхронности, меньше боимся "морганий";
* ...
Но у любого совета, пусть и очень хорошего, всегда найдутся недостатки.
Представим два сервиса (1 и 2), взаимодействующих по сети через большую очередь, например на сетевой карте (2).
Пока (2) успевает обрабатывать поток данных, все работает гладко, с описанными выше преимуществами.
Но как только (2) замедляется на значительное время, могут возникнуть проблемы:
* latency каждого пакета в буфере растет кумулятивно, а хвосты ожидают слишком долго;
* срабатывают таймауты (на уровне приложения, TCP) и происходит переотправка, еще больше нагружая очередь;
* все накопленные данные будут обработаны (2), даже если они давно устарели;
* из-за отсутствия своевременной обратной связи TCP (1) реагирует с опозданием — отсутствует failfast;
* перегрузка накапливается в одной части системы, вместо того чтобы равномерно распределяться — отсутствует backpressure.
Список можно продолжить.
Вывод: не следует слепо следовать интернет-советам — всё нужно ставить под сомнение, проверять и подбирать оптимальные параметры именно под вашу систему.
P.S. проблеме раздутых буферов в свое время даже дали название - bufferbloat. Подробнее почитать о ней можно на www.bufferbloat.net.
tags: #network #tcp #theory
Post #40
1.12K
- 👍 7