Это зависит от того, чего вы пытаетесь избежать.
Если вы пытаетесь избежать какого-либо прерывания службы чего-либо, что является действительно критичным сервисом (я думаю, что «люди умрут, если мой вызов API не будет должным образом обслужен»), вам нужно просто выделить бюджет на огромные неэффективности, которые приходят из-за чрезмерного выделения выделенных ресурсов. И да, они должны быть выделены, ни один из них не учитывает всплески трафика, так как скачки нескольких сервисов могут привести к отключению.
В гораздо более вероятном сценарии прекращения работы вашего сервиса будет неудобно, вы можете решить проблему как со стороны клиента, так и со стороны сервера. Хотя стоит отметить, что на самом деле логически невозможно решить проблему большого объема трафика, потому что без обработки трафика (который потребляет ресурсы) вы не можете знать, является ли это повторной попыткой, если это повторная попытка запроса, который был успешным, но неправильно обработан клиентом, если это DDOS и т. д. Но вы можете смягчить воздействие.
В коде клиента напишите разумную логику повторных попыток, которая имеет верхний предел и механизм для постепенного отказа. Таким образом, вы не запутываете своих пользователей в бесконечном цикле неудачных запросов и просто даете им ошибку, сообщая им попробовать все, что они только что сделали за короткое время.
Для вашей серверной инфраструктуры самое простое решение - регулирование. Жесткие ограничения на запросы, особенно если вы можете попытаться логически распределить их в зависимости от вашего конкретного случая использования (т. Е. Если у вас есть централизованная служба, вы принимаете жесткие решения, хотите ли вы начать блокировать географически удаленные запросы, которые могут привести к зависанию потоков на стороне сервера? Или вы хотите равномерно распределить неизбежное, но незначительное отключение? и т. д.) В основном все сводится к тому, что возврат 503 преднамеренно из шлюза обходится намного дешевле, чем пропуск запроса и отправка 504. тем не мение. В основном вынуждают клиентов вести себя в зависимости от того, что вы в настоящее время можете предоставить, и предоставлять правильные ответы, чтобы клиенты могли реагировать соответствующим образом.