2016-12-12 3 views
0

Ich habe einen Anwendungsfall, bei dem die Client-App einen REST-Aufruf mit MULTIPLE-Produktkennungen durchführt und ihre Details abruft. Ich habe eine Lambda-Funktion (durch API-Gateway offen gelegt), die eine einzelne Produkt-ID nehmen und ihre Details erhalten kann. Ich muss sie zusammen arbeiten lassen. Was ist eine gute Lösung dafür?AWS Lambda - single vs. multile productId

  1. Ändern Sie die Client-App so, dass einzelne Produkt-ID-Anforderungen gestellt werden. Es ist dann keine Änderung der Lambda-Funktion erforderlich. Aber dies erhöht Client App Netzwerkaufrufe, da es das Lambda für jede productId separat aufrufen wird.

  2. Ändern Sie die Lambda-Funktion, so dass es mehrere Produkt-IDs im selben Aufruf behandeln kann. Aber dies erhöht Lambda-Antwortzeit.

  3. Ich dachte auch darüber nach, eine neue Lambda-Funktion zu erstellen, die die multiple productId aufnimmt und dann die einzige Produkt-Lambda-Funktion aufruft. Aber nicht sicher, wie die Antworten aggregiert werden, bevor sie an die Client-App gesendet werden.

die Suche nach Anregungen ..

+1

Es scheint, als ob jede Ihrer 3 Optionen einige Kompromisse haben und Sie nur auswählen müssen, welche Option für Sie am akzeptabelsten ist. Ich glaube nicht, dass irgendjemand Ihre Frage definitiv beantworten kann. Wenn Sie ein tatsächliches Implementierungsproblem haben, nachdem Sie die Option ausgewählt haben, um damit zu gehen, würde ich das als eine andere Frage hier fragen. –

Antwort

0

Option 1 ist weniger optimal, da es das gesprächig Protokoll zwischen dem Client zum Server verschieben.

Wenn es keine Benutzer einer einzelnen ID gibt, würde ich diese nicht am Leben erhalten. (nicht Option # 3)

Abhängig von Ihrer Sprache der Wahl - es könnte am besten sein, 2 (oder 3 für diese Angelegenheit) zu implementieren. node.js (und C# too btw) macht es sehr einfach, mehrere Aufrufe parallel (async-Aufrufe) durchzuführen und dann auf alle Ergebnisse zu warten und zum Client zurückzukehren. Dies bedeutet, dass Sie X Zeit nicht mehr warten werden - nur ein bisschen mehr, ausgerichtet mit Ihrem langsamsten Anruf. ES6 (modernes JS, unterstützt von Lambda) unterstützt jetzt Promise.all() für diesen Zweck. C# unterstützt diese Muster auch nativ mit Task.WaitAll()

+0

Das macht Sinn. Haben wir die gleiche Funktion, die von Java unterstützt wird - etwas in der gleichen Art wie Promise.all() oder Task.WaitAll()? – Manish

+0

Ich habe Java seit vielen Jahren nicht mehr berührt. In der Vergangenheit haben wir ein ähnliches Muster mit mehreren Threads und dann Thread.Join() erreicht. Vielleicht hat modernes Java noch andere Möglichkeiten dazu, etwa: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/FutureTask.html – Froyke