2015-10-20 27 views
10

kullanılarak yapıldığında tarayıcı istemcileri bilgilendirin Benim durumumda, oldukça uzun zaman alan hesaplamalar yapan sunucuya daha az arka uç uygulamama çalışıyorum. Bu hesaplamalar, bazı harici API'ye başvuran Lambda tarafından yönetilmektedir.Lambda işlevi Amazon SQS

Bunu istemek için 10 saniye yürütme sınırlaması olan Amazon API Ağ Geçidi kullanıyorum. Ancak Lambda yaklaşık 100 saniyede çalışır.

Bu sınırlamayı önlemek için 2. Lambda işlevini kullanıyorum, bu zamanlamayı hesaplamak için hesaplama & hesaplamasını başlattı.

Ben buna çok benziyor:

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); 

Bu kod bağımsız istemcilerin tarayıcılar binlerce AWS API ağ üzerinden yürütülür.

onun Lambda fonksiyon icra başarıyla I'v (çünkü uzun yoklama ve bazı diğer yararlı işlevleri kutusunun üzerinden) AWS SQS kullanmak için rendelenmiş yapıldığını her bir müşteri bilgilendirmek.

Benim soru geçerli:

Ben bu özel müşteriye aittir kuyrukta mesajı istemci üzerinde belirleyebilir nasıl

? Ya da her istemci tarayıcısında bazı istek kimliği parametresiyle uygun mesajları bulmak için tüm kuyrukta yinelemeli miyim? 1000 istemci aynı anda sonuçlarını beklerken bu yöntemin verimsiz olacağını tahmin ediyorum.


Ben mesela DynamoDB sonuçları yazmak ve periyodik bazı ev yapımı API üzerinden sonuç için DB yoklamak anlıyoruz. Ama , bazı Amazon PaaS çözümlerine dayanarak, zaman alıcı Lambda işlevinin yürütülmesinin tamamlanmasına ilişkin tarayıcı tabanlı istemciye bildirimde bulunacak herhangi bir şık çözüm var mı?

cevap

3

DynamoDB yolunu dürüstçe yapmanız muhtemelen en iyi yoldur. API Ağ Geçidi tarafından yürütülen ilk Lambda işlevinde bir uuid oluşturabilirsiniz. Bu uuid'i uzun süredir devam eden Lambda fonksiyonuna aktar. İkinci işlev tamamlanmadan önce iki sütun içeren DynamoDB tablosuna yazılır: uuid ve result.

API Ağ Geçidi, oluşturduğu uuid ile istemciye yanıt verir. Istemci daha sonra DynamoDB tablonuza karşı bir getItem isteği ile (doğrudan ya da başka bir API Ağ Geçidi isteğiyle aws-sdk yoluyla) uzun sorgulama yapar. Bir kez başarılı bir şekilde cevap verdiğinde, söz konusu öğeyi DynamoDB tablosundan kaldırın.

1

Lambda işlevinin içerik nesnesi, Lambda işlevini çağıran istemciye geri dönen AWS istek kimliğine sahip olacaktır.

Yani, istemci, Lambda 1'in lambda istek kimliğine sahip olacak, Lambda 1 Bağlam nesnesinde aynı istek var. Id (lambda yeniden denemelerine bakılmaksızın, istek kimliği aynı kalıyor). Bu istek kimliğini Lambda 2'ye iletin, burada gerçek istek kimliği sonuna kadar zincirlenir.

İstemciden istek kimliğini kullanarak sorgulama, dynamodb gibi herhangi bir veri deposunda oldukça kolaydır.

İlgili konular