2016-06-04 7 views
0

Ich arbeite an einer mobilen App, die eine Push-Nachricht an mehrere Hunderttausend Geräte gleichzeitig sendet. Wenn jeder Nutzer seine App über die Push-Nachricht öffnet, trifft die App unsere API für Daten. Die API-Ressource ist für jeden Benutzer dieses Push identisch.AWS API Gateway Cache - Mehrere Servicetreffer mit Anrufexplosion

Nehmen wir jetzt an, dass alle 500.000 Benutzer ihre App gleichzeitig öffnen. API Gateway erhält 500.000 identische Anrufe.

Da alle 500.000 fast gleichzeitige Anforderungen nach denselben Daten fragen, möchte ich sie zwischenspeichern. Beachten Sie jedoch, dass die Berechnung des gewünschten Wertes etwa 2 Sekunden dauert.

Was ich

Ich möchte API-Gateway sehen passieren soll, dass die Daten nicht im Cache ist, lassen Sie den ersten Anruf bis hin zu meinem Backend-Service, während die anderen Anfragen in der Warteschlange gehalten werden, bevölkern die Cache vom ersten Aufruf und dann auf die anderen 499.999 Anfragen mit den zwischengespeicherten Daten antworten.

Was ist (scheint zu)

API-Gateway geschieht zu sehen, dass es keinen Cache gespeicherten Wert ist, wird jede einzelne der 500.000 Anfragen an den Back-End-Service zurückschicken! Also werde ich den Wert mit einer komplexen DB-Abfrage viel öfter neu berechnen, als es die Ressourcen erlauben. Dies geschieht, weil der letzte Aufruf in API Gateway kommt, bevor der erste Aufruf den Cache gefüllt hat.

Gibt es eine Möglichkeit, wie ich dieses Verhalten bekommen kann?

Ich weiß, dass auf meinem Beispiel aus, dass vielleicht könnte ich prime die Cache durch die API-Aufruf mich einfach anrufen, bevor die Masse Druckauftrag sendet, aber der tatsächliche Anwendungsfall ist etwas komplizierter als mein vereinfachtes Beispiel. Aber seien Sie versichert, die Lösung dieses vereinfachten Anwendungsfalles wird das lösen, was ich versuche zu tun.

Antwort

0

Wenn Sie diese Art von Burst-Parallelität voraussehen, ist es sicherlich die beste Option, den Cache selbst zu initialisieren. Haben Sie darüber nachgedacht, der Stufe/Methode eine Drosselung hinzuzufügen, um Ihr Backend vor einem starken Anstieg des Datenverkehrs zu schützen? Clients könnten angewiesen werden, Throttles erneut zu versuchen, und sie würden schließlich eine Antwort erhalten.

Ich bringe dein Feedback und die vorgeschlagene Lösung ins Team und lege es auf unseren Auftragsbestand.