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 рано или поздно приведёт к катастрофе.