Uber в своем блоге очень часто радует хорошим контентом. Вот интересная статья про управление нагрузкой на BD - показывает хороший кейс классического подхода интеллектуального управления нагрузкой - когда мы распределяем запросы базируясь на алгоримах, которые учитывают текущее состояние системы. Важно тут отметить, что без хорошего observability, то есть сбора метрик и данных о состояние и происходящих в системе процессов, никакого интеллектуального управления или, тем более, модного сейчас self healing - не будет. Все основывается на данных.
Авторы статьи из Uber описывают эволюцию подхода к управлению нагрузкой в высоконагруженной распределённой системе и проблему, с которой они столкнулись по мере роста платформы. Классический static rate limiting, основанный на жёстко заданных лимитах запросов, перестал работать эффективно: он либо слишком агрессивно «душил» легитимный трафик в пиковые моменты, либо, наоборот, не спасал систему от перегрузок в случае каскадных сбоев и неравномерного распределения нагрузки между сервисами.
В статье рассматривается типичный для Uber технологический стек: микросервисная архитектура, тысячи сервисов, интенсивное RPC-взаимодействие, сложные dependency graph’ы и постоянные колебания нагрузки. В такой среде простые лимиты на уровне edge или отдельных сервисов не учитывают реальное состояние системы — латентность, насыщение CPU, очереди, backpressure и влияние одного сервиса на другой. В результате rate limiting превращается в грубый инструмент, плохо отражающий фактическую «здоровость» системы.
Инженерное решение, к которому пришли авторы, — переход от статических лимитов к intelligent load management. Вместо фиксированных порогов система начинает принимать решения на основе сигналов реального времени: latency, error rate, saturation, а также информации о критичности конкретных запросов. Нагрузка регулируется динамически, с учётом приоритетов, graceful degradation и возможности частично обслуживать трафик, не доводя систему до отказа. По сути, rate limiting эволюционирует в адаптивный механизм управления нагрузкой, встроенный в общую observability- и resilience-стратегию платформы.
В итоге статья хорошо показывает, что в масштабе Uber проблема не в количестве запросов как таковых, а в умении понимать текущее состояние системы и принимать инженерно обоснованные решения о том, какой трафик можно и нужно обслуживать прямо сейчас, а какой — ограничить или деградировать без ущерба для ключевых бизнес-функций.
https://www.uber.com/en-GB/blog/from-static-rate-limiting-to-intelligent-load-management/