Es hängt davon ab, was Sie vermeiden möchten.
Wenn Sie versuchen, eine Dienstunterbrechung von etwas zu vermeiden, das ein wirklich kritischer Dienst ist (ich denke in Bezug auf "Menschen werden sterben, wenn mein API-Aufruf nicht angemessen bedient wird"), müssen Sie nur die enormen Ineffizienzen budgetieren, die kommen von weit über die Bereitstellung dedizierter Ressourcen. Und ja, sie müssen dediziert sein, nichts davon erlaubt Verkehrsspitzen, mehrere Dienstspitzen würden somit einen Ausfall verursachen.
In dem weitaus wahrscheinlicheren Szenario, dass Ihr Dienst ausfällt, können Sie das Problem sowohl auf Client- als auch auf Serverseite lösen. Obwohl es erwähnenswert ist, dass es logisch unmöglich ist, das Problem von zu viel Verkehr tatsächlich zu lösen, können Sie ohne Verarbeitung des Verkehrs (der Ressourcen verbraucht) nicht wissen, ob es sich um eine Wiederholung handelt, ob es sich um eine Wiederholung für eine Anforderung handelt, die erfolgreich war, aber falsch behandelt wurde vom Client, wenn es sich um ein DDOS usw. handelt. Sie können jedoch die Auswirkungen abschwächen.
Schreiben Sie im Client-Code eine sinnvolle Wiederholungslogik, die eine Obergrenze und einen Mechanismus für ein ordnungsgemäßes Versagen aufweist. Auf diese Weise halten Sie Ihre Benutzer nicht in eine Endlosschleife fehlgeschlagener Anfragen und geben ihnen nur einen Fehler, der sie auffordert, alles zu versuchen, was sie gerade getan haben.
Für Ihre serverseitige Infrastruktur besteht die einfachste Lösung darin, zu drosseln. Harte Grenzen für Anforderungen, insbesondere wenn Sie versuchen können, sie basierend auf Ihrem spezifischen Anwendungsfall logisch zu verbreiten (z. B. wenn ein zentraler Dienst einige schwierige Entscheidungen trifft, möchten Sie damit beginnen, geografisch entfernte Anforderungen zu blockieren, was dazu führen kann, dass Threads hängen bleiben Serverseitig? Oder möchten Sie Ihren unvermeidlichen, aber geringfügigen Ausfall gleichmäßig verteilen? usw.) Es läuft im Grunde darauf hinaus, dass die absichtliche Rückgabe eines 503 von einem Gateway um einiges billiger ist, als die Anfrage durchzulassen und einen 504 zu senden wie auch immer. Erzwingen Sie grundsätzlich, dass sich Kunden basierend auf dem, was Sie derzeit bereitstellen können, verhalten und die richtigen Antworten bereitstellen, damit Kunden angemessen reagieren können.