To zależy od tego, czego próbujesz uniknąć.
Jeśli próbujesz uniknąć przerwy w działaniu czegoś, co jest usługą naprawdę krytyczną (myślę w kategoriach „ludzie umrą, jeśli moje wywołanie API nie zostanie odpowiednio obsłużone”), musisz po prostu budżet na ogromną nieefektywność, która pochodzą z nadmiernej rezerwy dedykowanych zasobów. I tak, muszą być dedykowane, przy czym żadne z tych elementów nie pozwala na gwałtowne wzrosty ruchu, przyspieszenie wielu usług spowodowałoby awarię.
W znacznie bardziej prawdopodobnym scenariuszu, w którym obniżenie poziomu usług byłoby niewygodne, można rozwiązać problem zarówno po stronie klienta, jak i serwera. Chociaż warto zauważyć, że logicznie niemożliwe jest rozwiązanie problemu dużego ruchu, ponieważ bez przetworzenia ruchu (który zużywa zasoby) nie możesz wiedzieć, czy jest to ponawianie, czy jest to ponawianie dla żądania, które się powiodło, ale zostało nieprawidłowo obsłużone przez klienta, czy to DDoS itp Ale może złagodzić skutki.
W kodzie klienta napisz rozsądną logikę ponownych prób, która ma górną granicę i mechanizm łagodnego niepowodzenia. W ten sposób nie wpychasz użytkowników w nieskończoną pętlę nieudanych próśb i po prostu dajesz im błąd, mówiąc im, aby spróbowali tego, co właśnie zrobili w krótkim czasie.
W przypadku infrastruktury po stronie serwera najprostszym rozwiązaniem jest ograniczenie. Twarde limity żądań, zwłaszcza jeśli możesz spróbować rozłożyć je logicznie na podstawie konkretnego przypadku użycia (np. Jeśli masz scentralizowaną usługę, podejmuj trudne decyzje, czy chcesz zacząć blokować odległe geograficznie żądania, które mogą powodować zawieszanie się wątków po stronie serwera? A może chcesz równomiernie rozdzielić nieuniknione, ale niewielkie przestoje? itp.) Zasadniczo sprowadza się to do tego, że celowe zwrócenie 503 z bramy jest o wiele tańsze niż pozwolenie na przesłanie żądania i wysłanie 504 tak czy siak. Zasadniczo zmuś klientów do zachowania w oparciu o to, co możesz obecnie podać i udziel poprawnych odpowiedzi, aby klienci mogli odpowiednio zareagować.