2

Ich habe eine Anforderung, ~ 20k Anrufe pro Sekunde zu verarbeiten. Mein System verarbeitet Listen mit ~ 1 Mio. Einträgen und führt für jeden Artikel mehrere Jobs aus. Es ist sehr "stoßartig" in der Natur, da es nicht immer eine Liste verarbeitet. Ich habe eine App Engine flex env (mit Rails) hinzugefügt, die automatische Skalierung verwendet, mit einem Testendpunkt, um 5 Sekunden zu warten und zurückzukehren. Ich schiebe zum Pubsub-Thema und ein Push-Abonnement wird an App Engine gesendet. Dies führt zu einem stabilen Zustand von 20-30 Anfragen pro Sekunde.Leistung ist * Weg * zu langsam mit Pubsub Push -> App-Engine

Ich vermutete, dass das Problem die Interaktion des Pubsub-Push-Volume-Algorithmus mit der App-Engine interagierte, aber dann führte ich einen zweiten Test durch, bei dem ich die Current-Anforderungen wie in einer Schleife mit mehreren Prozessen löste. Dies lief auch bei 20-30 rps.

Ich bin an diesem Punkt fest und frage mich, wie es weiter geht. Wie kann ich das System für höhere Leistung konfigurieren? Ich brauche eine Leistung von drei Größenordnungen von dem, was ich sehe.

Vielen Dank für Ihre Hilfe!

+0

Sind also die Nachrichten in Pub/Sub gesichert? Können Sie die Skalierungseigenschaften von Ihrer 'app.yaml' veröffentlichen? Laut [docs] (https://cloud.google.com/pubsub/subscriber): _Cloud Pub/Sub beginnt mit dem Senden einer einzelnen Nachricht und verdoppelt sich bei jeder erfolgreichen Zustellung, bis die maximale Anzahl erreicht ist von gleichzeitigen Nachrichten ausstehend_. Sind Ihre Anforderungen fehlgeschlagen, während App Engine eine neue Instanz hochlädt (denken Sie daran, dass [langsam auf Flexible envs] (https://cloud.google.com/appengine/docs/the-appengine-environments)) ist. – tx802

+0

Haben Sie auch einen Testendpunkt ausprobiert, der (a) nicht 5s zum Ausführen benötigt und (b) in etwas wie Python Standardumgebung (skaliert super schnell) ist? – tx802

Antwort

4

Meine Erfahrung mit Pub/Sub ist, dass für einzelne Messaging-Verarbeitung wirklich langsam ist. Ich nehme an, dass es einen Overhead für das http gibt. Und die durchschnittliche Zeit, die ich sehe, ist etwa 40ms außerhalb von Google und 20ms, wenn Sie Ihren Code auf Google-Servern ausführen. Was für mich funktionierte, war es, Nachrichten stattdessen zu stapeln, ich konnte bis zu 100k msgs/s erreichen, wenn ich sie in 1k-Nachrichten pro Veröffentlichung mischte.

Verwandte Themen