W moim scenariuszu próbuję zaimplementować serwer bez serwera zaplecza, który wykonuje dość długo czasochłonne obliczenia. Te obliczenia są zarządzane przez Lambda, która odnosi się do zewnętrznego interfejsu API.Poinformuj klientów przeglądarki, gdy funkcja Lambda jest wykonywana przy użyciu Amazon SQS
W celu żądania tego używam usługi Amazon API Gateway, która ma 10 sekund ograniczenia wykonania. Jednak Lambda działa około 100 sekund.
Aby uniknąć tego ograniczenia, używam drugiej funkcji Lambda do wykonania tych czasochłonnych obliczeń & raport, że obliczenia zostały rozpoczęte.
I wygląda bardzo podobnie do tego:
var AWS = require('aws-sdk');
var colors = require('colors');
var functionName = 'really-long'
var lambda = new AWS.Lambda({apiVersion: '2015-03-31'});
var params = {
FunctionName: functionName,
InvocationType: 'Event'
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(functionName.green + " was successfully executed and returned:\n" + JSON.stringify(data, null, 2).gray); // successful response
});
console.log("All done!".rainbow);
Ten kod jest wykonywany przez AWS API bramki przez tysiące klientów przeglądarek niezależnie od siebie.
Aby poinformować każdego klienta o pomyślnym wykonaniu jego funkcji Lambda, planowałem użyć AWS SQS (z powodu długiego odpytywania i innych użytecznych funkcji po wyjęciu z pudełka).
Więc moje pytanie brzmi::
Jak mogę określić, na kliencie, który komunikat w kolejce należącym do tego konkretnego klienta? Czy powinienem powtórzyć całą kolejkę, aby znaleźć odpowiednie komunikaty za pomocą jakiegoś parametru identyfikatora żądania w każdej przeglądarce klienta? Sądzę, że ta metoda będzie nieskuteczna, gdy 1000 klientów będzie jednocześnie oczekiwać na wyniki.
Rozumiem, że mogę na przykład pisać wyniki dla DynamoDB i okresowo odpytywać DB dla wyniku przez niektóre domowe API. Ale jest jakieś eleganckie rozwiązanie powiadamiające klienta przeglądarkowego o zakończeniu wykonywania czasochłonnej funkcji Lambda w oparciu o niektóre rozwiązania Amazon PaaS?