Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[SnowOne 2025] Сергей Петрелевич: Что такое и д...

[SnowOne 2025] Сергей Петрелевич: Что такое и для чего нужно backpressure?

Разберемся, что такое backpressure и для чего оно нужно. Как backpressure уже реализовано в WebFlux и как его можно реализовать самостоятельно.

Видео: https://youtu.be/prHS1EF1KBY

Avatar for jugnsk

jugnsk

May 07, 2025
Tweet

More Decks by jugnsk

Other Decks in Programming

Transcript

  1. Кто я? Петрелевич Сергей Более 20 лет в разработке. Компания

    Squad Разрабатываем систему защиты Rest API. 2
  2. Сложность взаимодействия Вопрос масштаба. Задачи: - обработать 100 запросов в

    секунду. - обработать 100.000 запросов в секунду. Есть ли разница? 3
  3. Сложность взаимодействия Быстрый источник - медленный потребитель Скорость работы publisher:

    2N Скорость работы subscriber: N С избыточными данными надо что-то делать… 4
  4. Слишком большой поток Обратное давление (Back pressure) — это сопротивление

    или сила, противодействующая желаемому потоку жидкости по трубам, что приводит к потерям на трение и падению давления. Википедия. 5
  5. Основные идеи управления 10 Subscriber должен содержать временное хранилище. Java

    Concurrency Tools for the JVM. https://github.com/JCTools/JCTools/tree/master SpscArrayQueue – пример такого хранилища.
  6. Быстрый Publisher 22 Publisher – быстрый. Subscriber – медленный. Что

    делать с переизбытком данных? - терять сразу - пытаться что-то сохранить.
  7. Теряем не глядя 24 Возможные варианты в Webflux: - теряем

    сразу: directBestEffort - пытаемся что-то сохранить: onBackpressureBuffer
  8. Теряем не глядя 25 directBestEffort. Теряем, но не все и

    не сразу… Неочевидные очереди…
  9. На что обратить внимание 27 - неявные очереди; - определение

    размера очереди («округление»); - работа subscriber-ов в темпе самого медленного (onBackpressureBuffer).
  10. Sink – «однопоточный» 31 Первый наивный способ «починки»: synchronized. Хорошо,

    но очень уж медленно при множестве писателей.
  11. Многие-ко-многим 36 А если надо все же быстро? Создаем подобные

    схемы под каждый запрос. Входящий запрос Входящий запрос Входящий запрос
  12. Выводы 37 - задача согласования publisher-subscriber может решаться разными способами.

    - в каких-то случаях удобно взять уже готовое решение, например Webflux. - в каких-то случаях готовое решение надо немного доработать. - когда-то из готового решения можно взять идеи и сделать самому. - и не забываем про gracefully shutdown