मान लें कि मेरे पास 'टेस्ट एक्ज़ीक्यूटर' नामक एक लैम्ब्डा फ़ंक्शन है जो एक तर्क लेता है जिसमें एन 'टेस्ट' के लिए एआरएन होते हैं जिन्हें लैम्ब्डा फ़ंक्शंस के रूप में भी लागू किया जाता है।

कार्यप्रवाह:

  1. TestExecutor को विभिन्न 'टेस्ट' के एआरएन की सूची के साथ बुलाया जाता है
  2. TestExecutor प्रत्येक टेस्ट को समवर्ती रूप से कॉल करता है; प्रत्येक लैम्ब्डा से एक JSON वापस करने की उम्मीद है
  3. TestExecutor प्रत्येक टेस्ट के पूरा होने की प्रतीक्षा करता है। यह प्राप्त सभी JSON को समेकित करता है
  4. समेकित JSON को DynamoDB/S3 . में संग्रहीत किया जाता है

समस्या कथन - सर्वर रहित तरीके से इस प्रकार के वर्कफ़्लो को बनाने का सबसे अच्छा तरीका क्या है?

मैंने इसे प्रबंधित करने के लिए दो AWS सेवाओं पर विचार किया:

  1. एडब्ल्यूएस स्टेप फंक्शंस - माई स्टेप फंक्शन को प्रत्येक संभावित 'टेस्ट' लैम्ब्डा के लिए राज्यों की आवश्यकता होगी जिसे निष्पादित किया जा सकता है। मैं उपयोगकर्ता को अपने चरण समारोह में 'पंजीकरण' की आवश्यकता के बिना किसी भी लैम्ब्डा को आमंत्रित करने के लिए लचीलापन देना चाहता हूं।
  2. एडब्ल्यूएस एसडब्ल्यूएफ - बस थोड़ा अधिक लगता है। ऊपर दी गई समस्या से भी पीड़ित हैं।

तो अभी सबसे अच्छा मैं सोच सकता हूं कि इसे सरल तरीके से कर रहा हूं:

मेरे टेस्ट एक्ज़ीक्यूटर लैम्ब्डा में, मैं एन परीक्षणों के लिए एन थ्रेड बना सकता हूं प्रत्येक थ्रेड एक विशेष टेस्ट के लैम्ब्डा फ़ंक्शन को आमंत्रित करता है। प्रत्येक थ्रेड एक JSON वापस करने के लिए अपने टेस्ट की प्रतीक्षा करता है। जैसा कि सभी निष्पादन सफल होते हैं, सभी JSON समेकित होते हैं। समेकित JSON को DynamoDB में संग्रहीत किया जाता है।

मैं इस समाधान से खुश नहीं हूं - टेस्ट लैम्बडास की विफलताओं और पुन: प्रयासों को मैन्युअल रूप से प्रबंधित करना थोड़ा मुश्किल होगा के भीतर TestExecutor Lambda। सर्वर रहित कुछ करने की कोशिश करने में यह मेरा पहला मौका है, लेकिन यह गलत पैटर्न की तरह लगता है। मैं अपने वर्कफ़्लो का एक अच्छा टॉप-डाउन दृश्य प्राप्त करना चाहता हूं - ऐसा लगता है कि यह निगरानी करना थोड़ा गड़बड़ और बिखरा हुआ होगा क्योंकि TestExecutor और Test Lambdas के बीच कोई औपचारिक लिंक नहीं है

हो सकता है कि मैं प्रत्येक टेस्ट लैम्ब्डा के साथ एक एसक्यूएस कतार बना सकूं। TestExecutor को दिए गए प्रत्येक ARN के लिए, मैं एक संदेश को संबंधित कतार में धकेल सकता था। लेकिन अब क्या? मुझे प्रत्येक टेस्ट के लिए 'श्रोता' लैम्ब्डा बनाना होगा जो प्रत्येक कतार को प्रत्येक टी सेकेंड में मतदान करता है। इसके बाद यह वास्तविक टेस्ट लैम्ब्डा का आह्वान करेगा। यह अनावश्यक रूप से जटिल भी लगता है।

कुछ सलाह सुनना अच्छा लगेगा! चीयर्स।

1
user1265125 10 मार्च 2017, 22:34

2 जवाब

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

1
Maxim Fateev 11 मार्च 2017, 07:24
बेशक मैं 'पंजीकरण' के बिना लैम्ब्डा फ़ंक्शन का आह्वान कर सकता हूं। लेकिन फिर SWF का उपयोग करने का क्या मतलब है? मूल्यवर्धन क्या है? मेरे पास अभी भी 1 'TestExecuter' लैम्ब्डा चल रहा है 'अदृश्य' टेस्ट लैम्ब्डा पृष्ठभूमि में। क्या मैं अब भी उन्हीं समस्याओं से ग्रस्त नहीं होऊंगा जैसे स्टेप फंक्शन के मामले में होती हैं? मैं एसडब्ल्यूएफ पर कुछ और पढ़ूंगा। साथ ही, फ्लो फ्रेमवर्क का उपयोग करने का मेरा कोई इरादा नहीं है क्योंकि कोई पायथन एसडीके नहीं है।
 – 
user1265125
11 मार्च 2017, 10:09
मूल्य वर्धित यह है कि निर्णायक कार्य स्टेटलेस है। तो प्रक्रिया की कोई भी विफलता जो इसे होस्ट करती है, प्रगति की स्थिति को नुकसान नहीं पहुंचाएगी। एसडब्ल्यूएफ भी पूरी तरह से लेन-देन वाला है और डुप्लिकेट (एसक्यूएस की तरह) का उत्पादन नहीं करता है। तो निर्णय तर्क लिखना बहुत आसान है। यदि आप जावा का उपयोग कर रहे थे तो आपके उपयोग के मामले को कोड की एक दर्जन पंक्तियों में कोडित किया जाएगा।
 – 
Maxim Fateev
13 मार्च 2017, 03:51
क्या होगा यदि मेरे पास एक SQS कतार है, और मेरा अपना 'निर्णायक' TestExector लैम्ब्डा है जो हर 5 सेकंड में कतार का चुनाव करता है, और जो भी टेस्ट की आवश्यकता होती है उसे चलाता है? मुझे ऐसा लगता है कि यह और भी छोटा और सरल होगा। क्या आप विस्तार से बता सकते हैं कि 'एसडब्ल्यूएफ भी पूरी तरह से लेन-देन वाला है और डुप्लिकेट का उत्पादन नहीं करता है' भाग?
 – 
user1265125
14 मार्च 2017, 19:34
AFAIK एसक्यूएस के साथ 'डुप्लिकेट' समस्या यह है कि हम डुप्लिकेट संदेशों को एसक्यूएस में डालने से नहीं बच सकते हैं। यह एक समस्या है जिसे मैं क्लाइंट लेयर पर देख सकता हूं जो एसक्यूएस को पॉप्युलेट करता है।
 – 
user1265125
14 मार्च 2017, 19:35

आप लैम्ब्डा फंक्शन के भीतर से उक्त एआरएन का उपयोग करके स्टेप मशीन बनाने के लिए एडब्ल्यूएस एसडीके का लाभ उठा सकते हैं।

इसे बाद में किसी तरह साफ करने के लिए किसी तरह की आवश्यकता होगी, और/या डुप्लिकेट से बचें, या कंसोल जल्दी से गन्दा हो जाएगा।

0
ElFitz 22 मार्च 2017, 02:12