Что такое back pressure?

Middle+
513 просмотров
AFK Offer AI

Back pressure — механизм, при котором перегруженный consumer сообщает producer-у: "притормози, я не успеваю". Без back pressure при всплеске нагрузки быстрый producer завалит медленный consumer, что приведёт к OOM или потере данных.

В Go back pressure естественно реализуется через каналы:

jobs := make(chan Job, 100) // буфер = back pressure

// producer: заблокируется если буфер полон for _, j := range incoming { jobs <- j // back pressure через блокировку }

// consumer: обрабатывает в своём темпе for j := range jobs { process(j) }

Другие механизмы: HTTP 429 (rate limit), TCP window size, Kafka consumer lag (consumer отстаёт — producer видит по метрикам), буферизированные очереди с ограниченным размером.

Back pressure — фундаментальная концепция для надёжных систем. Без него любая разница в скорости producer/consumer рано или поздно приведёт к катастрофе.

Следующий вопрос

Как работает channel send/receive под капотом?