2015-10-20 14 views
10

का उपयोग करते हुए लैम्ब्डा फ़ंक्शन किए जाने पर ब्राउज़र क्लाइंट को सूचित करें मेरे परिदृश्य में मैं सर्वर को कम बैकएंड लागू करने की कोशिश कर रहा हूं जो बहुत लंबे समय तक उपभोग करने वाली गणना करता है। यह गणना लैम्ब्डा द्वारा प्रबंधित की जाती है जो कुछ बाहरी एपीआई को संदर्भित करती है।अमेज़ॅन एसक्यूएस

इस अनुरोध के लिए मैं अमेज़ॅन एपीआई गेटवे का उपयोग कर रहा हूं जिसमें 10 सेकंड निष्पादन सीमा है। हालांकि लैम्ब्डा लगभग 100 सेकंड चलाता है।

इस सीमा से बचने के लिए मैं इस समय उपभोग गणना & रिपोर्ट निष्पादित करने के लिए दूसरी लैम्ब्डा फ़ंक्शन का उपयोग कर रहा हूं कि गणना शुरू हो गई है।

मैं बहुत ही इस के समान दिखता है:

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

इस कोड को स्वतंत्र रूप से ग्राहकों ब्राउज़रों के हजारों द्वारा एडब्ल्यूएस एपीआई गेटवे से अधिक मार डाला जाता है।

प्रत्येक विशेष ग्राहक को सूचित करने के लिए कि उसका लैम्ब्डा फ़ंक्शन निष्पादन सफलतापूर्वक किया गया था, मैंने एडब्ल्यूएस एसक्यूएस (लंबे मतदान और बॉक्स के बाहर कुछ अन्य उपयोगी कार्यक्षमताओं के कारण) का उपयोग करने की योजना बनाई है।

तो मेरे सवाल का है:

मैं ग्राहक कतार में जो संदेश इस विशेष ग्राहक के अंतर्गत आता है पर कैसे निर्धारित कर सकते हैं? या क्या मुझे प्रत्येक क्लाइंट ब्राउज़र में कुछ अनुरोध आईडी पैरामीटर द्वारा उचित संदेश खोजने के लिए सभी कतारों पर फिर से शुरू करना चाहिए? मुझे लगता है कि यह विधि अक्षम होगी जब 1000 ग्राहक एक साथ अपने परिणामों की प्रतीक्षा करेंगे।


मैं समझता हूँ कि मैं उदाहरण के लिए DynamoDB लिए परिणाम लिख सकते हैं और समय-समय पर कुछ घर का बना एपीआई के माध्यम से परिणाम के लिए डीबी मतदान कर सकते हैं करते हैं। लेकिन क्या कुछ अमेज़ॅन पाएएस समाधान के आधार पर लैम्ब्डा फ़ंक्शन का उपभोग करने वाले समय के निष्पादन को पूरा करने के बारे में ब्राउज़र आधारित क्लाइंट को सूचित करने के लिए कोई शानदार समाधान है?

उत्तर

3

ईमानदारी से डायनेमो डीबी रूट शायद आपकी सबसे अच्छी शर्त है। आप एपीआई गेटवे द्वारा निष्पादित पहले लैम्ब्डा फ़ंक्शन में यूयूआईडी उत्पन्न कर सकते हैं। लंबे समय से चलने वाले Lambda समारोह के लिए uuid पास करें। दूसरे फ़ंक्शन पूर्ण होने से पहले यह दो कॉलम के साथ डायनेमोडीबी तालिका में लिखता है: uuid और result

एपीआई गेटवे क्लाइंट को उत्पन्न यूयूआईडी के साथ प्रतिक्रिया देता है। इसके बाद ग्राहक getItem के साथ आपके डायनेमोडीबी तालिका के खिलाफ अनुरोध (या तो aws-sdk के माध्यम से सीधे या किसी अन्य एपीआई गेटवे अनुरोध के माध्यम से) के साथ लंबे समय तक चुनाव करता है। एक बार यह सफलतापूर्वक जवाब देने के बाद, डायनेमोडीबी तालिका से कहा गया आइटम हटा दें।

1

लैम्ब्डा फ़ंक्शन के संदर्भ ऑब्जेक्ट में एडब्लूएस अनुरोध आईडी क्लाइंट को लौटा दी जाएगी जो लैम्ब्डा फ़ंक्शन का आह्वान करता है।

तो, ग्राहक के पास लैम्ब्डा 1 का लैम्ब्डा अनुरोध आईडी होगा, लैम्ब्डा 1 संदर्भ वस्तु का एक ही अनुरोध आईडी होगा (लैम्बडा रीट्री के बावजूद, अनुरोध आईडी समान है)। तो इस अनुरोध आईडी को लैम्ब्डा 2 को पास करें, वास्तविक अनुरोध आईडी अंत तक जंजीर है।

क्लाइंट से अनुरोध आईडी का उपयोग करके मतदान करना डायनेमोडब जैसी किसी भी डेटा स्टोर पर काफी आसान है।

संबंधित मुद्दे