Ограничение нагрузки — одна из ключевых задач API Gateway. Без неё один недобросовестный или просто неосторожный потребитель способен исчерпать ресурсы бэкенда и обрушить сервис для всех остальных. Как не дать одному потребителю «положить» бэкенд? Как позволить владельцу сервиса гибко распределять квоты между клиентами и при этом не терять точность на шлюзе, развёрнутом на нескольких ЦОДах и тысячах подов?
Расскажу, как в команде MWS Octapi мы решили задачу rate limiting на уровне распределённого шлюза. Когда каждый под видит только часть трафика, классический подсчёт запросов перестаёт работать, — нужно синхронизировать состояние между всеми узлами. Мы рассмотрели готовые подходы: Redis, In-Memory Data Grid, Gossip-протокол — и у каждого нашлись компромиссы, неприемлемые для нашей нагрузки и требований к латентности. В итоге мы написали собственную систему шеринга состояния, заточенную под конкретную задачу, и собственный алгоритм ограничения нагрузки на бэкенд.
Структуры данных, Строковые алгоритмы
Бэкенд-разработчик, Руководитель команды / Технический руководитель
Средний
Middle Go Developer MWS Octapi.