Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Vermeidung von Latenz bei der Abfrage von Aktivitätsaufgaben
Der GetActivityTask
API ist so konzipiert, dass er taskToken
genau einmal zur Verfügung steht. Wenn ein taskToken
während der Kommunikation mit einem Aktivitäts-Worker verloren geht, können mehrere GetActivityTask
-Anfragen für 60 Sekunden blockiert werden, die auf eine Antwort warten, bis ein Timeout für GetActivityTask
stattfindet.
Wenn Sie nur eine kleine Anzahl von Abrufen haben, die auf eine Antwort warten, ist es möglich, dass alle Anforderungen hinter der blockierten Anforderung auflaufen und anhalten. Wenn Sie jedoch eine große Anzahl ausstehender Umfragen für jede Aktivität haben Amazon Resource Name (ARN) und ein gewisser Prozentsatz Ihrer Anfragen wartet, können noch viele weitere Anfragen bearbeitet werden taskToken
und mit der Bearbeitung beginnen.
Für Produktionssysteme empfehlen wir mindestens 100 offene Umfragen pro Aktivität ARN zu jedem Zeitpunkt. Wenn ein Abruf blockiert wird, und einen Teil dieser Abrufe dahinter auflaufen, gibt es nach wie vor viele weitere Anfragen, die ein taskToken
erhalten, um weiterzuarbeiten, während die GetActivityTask
-Anfrage blockiert ist.
So vermeiden Sie diese Art von Latenzproblemen beim Abrufen von Aufgaben
-
Implementieren Sie Ihre Poller als separate Threads aus der Arbeit in Ihrer Aktivitäts-Worker-Implementierung.
-
Führen Sie zu jedem Zeitpunkt mindestens 100 offene Umfragen pro Aktivität ARN durch.
Anmerkung
Die Skalierung auf 100 offene Umfragen pro Person ARN kann teuer sein. Beispielsweise ARN ist das Abfragen von 100 Lambda-Funktionen pro 100 Mal teurer als eine einzige Lambda-Funktion mit 100 Abfrage-Threads. Um sowohl die Latenz zu reduzieren als auch die Kosten zu minimieren, verwenden Sie eine Sprache mit asynchronem E/A und implementieren pro Worker mehrere Abfrage-Threads. Ein Beispiel für einen Aktivitäts-Worker, in dem die Poller-Threads unabhängig von der Arbeitsthreads sind, finden Sie unter Beispiel: Activity Worker in Ruby.
Weitere Informationen zu Aktivitäten und Aktivitäts-Workern finden Sie unter Erfahren Sie mehr über Aktivitäten in Step Functions.