Сброс нагрузки

Rate Limiting защищает от конкретных плохих клиентов. Но что если пришел легитимный трафик, просто его слишком много? Если сервер попытается обработать всё, он исчерпает RAM/CPU и умрет.

Load Shedding (Сброс нагрузки) — это механизм самосохранения. Мы жертвуем частью некритичного трафика, чтобы спасти более важные части/функциональность системы.

1. Fleet Usage (Сброс с резервированием)

Трафик жестко делится на критичный (например, оплата заказа) и некритичный (обновление аватарки). Мы резервируем часть пропускной способности (например, 10%) только для критичных запросов.

Python
class RequestType:
    CRITICAL = 'critical'
    NON_CRITICAL = 'non_critical'

TOTAL_CAPACITY = 1000       # Общая пропускная способность
RESERVED_PERCENT = 0.10     # 10% резерв для критичных
reserved = int(TOTAL_CAPACITY * RESERVED_PERCENT) 
2. Worker Utilization (Сброс по утилизации)

Система постоянно отслеживает загрузку своих воркеров (потоков). При достижении определенных порогов загрузки, она начинает избирательно отсекать запросы, начиная с самых низкоприоритетных.

Утилизация Действие Результат
До 70% Нет сброса Все HTTP-запросы обрабатываются
>= 80% Warning Включаются алерты дежурным инженерам
>= 90% Сброс тестов и GET Возвращаем 503 для тестового трафика и тяжелых выборок
>= 95% Сброс POST Возвращаем 503 для некритичных изменений данных
100% Авария Отказ в обслуживании для всех
Python
class Priority:
    CRITICAL = 1  # Высший
    POST = 2
    GET = 3
    TEST = 4      # Низший

MAX_WORKERS = 100