21

यह ज्ञात है कि एडब्ल्यूएस लैम्ब्डा हो सकता है पुन: उपयोग जल्दी संचालकों की वस्तुओं बनाया है, और यह वास्तव में यह (FAQ देखें) करता है:एडब्ल्यूएस लैम्ब्डा और जावा संगामिति

प्रश्न: क्या एडब्ल्यूएस लैम्ब्डा पुन: उपयोग समारोह उदाहरणों?

प्रदर्शन में सुधार करने के लिए, एडब्ल्यूएस लैम्ब्डा अपने कार्य का एक उदाहरण को बनाए रखने और इसे पुन: उपयोग बाद में एक अनुरोध सेवा करने के लिए है, बजाय एक नई प्रतिलिपि बनाने के लिए चुन सकते हैं। आपका कोड यह नहीं मानना ​​चाहिए कि यह हमेशा होगा।


सवाल Java संगामिति के बारे में है। अगर मैं हैंडलर के लिए वर्ग है, कहते हैं:

public class MyHandler { 
    private Foo foo; 
    public void handler(Map<String,String> request, Context context) { 
     ... 
    } 
} 

हां, तो यह करने के लिए उपयोग करने के लिए धागा सुरक्षित हो जाएगा और वस्तु चर foo यहाँ या नहीं के साथ काम?

दूसरे शब्दों में: क्या एडब्ल्यूएस लैम्ब्डा अलग-अलग कॉल के लिए समान वस्तु का उपयोग कर सकता है?

EDIT मेरा फ़ंक्शन ईवेंट आधारित स्रोत पर संसाधित होता है, विशेष रूप से इसे एपीआई गेटवे विधि द्वारा बुलाया जाता है।

EDIT-2 जब आप बाहरी संसाधनों के लिए किसी प्रकार के कनेक्शन पूल को कार्यान्वित करना चाहते हैं तो इस प्रकार का सवाल उठता है, इसलिए मैं बाह्य संसाधन से ऑब्जेक्ट वैरिएबल के रूप में कनेक्शन रखना चाहता हूं। यह वास्तव में वांछित के रूप में काम करता है, लेकिन मुझे समवर्ती समस्याओं से डर है।

संपादित -3 अधिक विशेष रूप से मैं सोच रहा हूँ: एडब्ल्यूएस लैम्ब्डा शेयर आम ढेर (स्मृति) के संचालकों की कर सकते हैं उदाहरणों या नहीं? जावा थ्रेड-सुरक्षित ऑब्जेक्ट्स के बारे में स्पष्ट और सामान्य-ज्ञात चीज़ों की सूची के साथ उत्तरों को रोकने के लिए मुझे यह अतिरिक्त विवरण निर्दिष्ट करना होगा।

+0

IMO "अपने कार्य का एक उदाहरण को बनाए रखने और पुन: उपयोग यह" "एक ही वस्तु का उपयोग करें" के रूप में बिल्कुल वैसा ही है। और साथ ही साथ संभावना है। – zapl

+0

@zapl इसका मतलब बिल्कुल समवर्ती नहीं है। यह जावा के अंदर धागे की तरह इस्तेमाल किया जा सकता 'ExecutorService' - वे बनाए रखा जाता है, लेकिन उनका उपयोग नहीं समवर्ती – Andremoniy

+0

ज़रूर, वे धागा प्रति नया हैंडलर उदाहरण बना है या नहीं तो सुनिश्चित करें कि वे समवर्ती उपयोग नहीं किया जाता है, लेकिन मैं नहीं दिख रहा है यह कहीं भी स्पष्ट रूप से उल्लेख किया जा सकता था। दूसरी तरफ, ऐसे टुकड़े हैं जैसे * "कोड" स्टेटलेस "शैली में लिखा जाना चाहिए [...] कलाकृतियों अनुरोध के जीवनकाल से आगे नहीं बढ़ सकते हैं" * एफएक्यू में। – zapl

उत्तर

38

मई एडब्ल्यूएस लैम्ब्डा अलग-अलग कॉल के लिए समान वस्तु का उपयोग कर सकता है?

एडब्ल्यूएस लैम्ब्डा के हैंडलर के उदाहरण सामान्य ढेर (मेमोरी) साझा कर सकते हैं या नहीं?

एक मजबूत, निश्चित संख्या। एडब्ल्यूएस लैम्ब्डा के हैंडलर के उदाहरण भी फाइल साझा नहीं कर सकते हैं (/tmp में)।

एक एडब्ल्यूएस लैम्ब्डा कंटेनर नहीं एक लैम्ब्डा समारोह के दो या अधिक समवर्ती मौजूदा आमंत्रण के लिए पुन: उपयोग किया जा सकता है, के बाद से है कि अलगाव की आवश्यकता टूट जाएगा:

Q: How does AWS Lambda isolate my code?

प्रत्येक एडब्ल्यूएस लैम्ब्डा समारोह रन अपने स्वयं के संसाधनों और फ़ाइल सिस्टम व्यू के साथ अपने स्वयं के अलग वातावरण में

अनुभाग "कैसे एडब्ल्यूएस लैम्ब्डा भागो मेरे कोड कंटेनर मॉडल करता है?"how lambda functions work राज्यों की आधिकारिक विवरण में:

एक लैम्ब्डा समारोह के बाद मार डाला जाता है, एडब्ल्यूएस लैम्ब्डा कंटेनर का कहना है कुछ समय के लिए एक और Lambda समारोह आमंत्रण की प्रत्याशा में। वास्तव में, सेवा कंटेनर जमा एक लैम्ब्डा समारोह पूर्ण होने के बाद, और, पुन: उपयोग के लिए कंटेनर thaws अगर एडब्ल्यूएस लैम्ब्डा कंटेनर का पुन: उपयोग करने के लिए चुनता है जब लैम्ब्डा समारोह फिर से लागू किया है।

  • अपने लैम्ब्डा समारोह कोड में किसी भी घोषणाओं प्रारंभ रहता है, अतिरिक्त अनुकूलन जब समारोह फिर से शुरू हो जाती है प्रदान: इस कंटेनर पुन: उपयोग के दृष्टिकोण निम्नलिखित प्रभाव पड़ता है। उदाहरण के लिए, अपने लैम्ब्डा समारोह एक डेटाबेस कनेक्शन स्थापित करता है, कनेक्शन रीस्ताब्लिशिंग के बजाय, मूल कनेक्शन बाद में आमंत्रण में प्रयोग किया जाता है। आप में तर्क डाल सकते हैं ताकि यह पता चल सके कि कोई कनेक्शन पहले से मौजूद है या नहीं।

  • प्रत्येक कंटेनर/tmp निर्देशिका में कुछ डिस्क स्थान प्रदान करता है। निर्देशिका सामग्री तब भी बनी हुई है जब कंटेनर जमे हुए है, क्षणिक कैश प्रदान करता है जिसे एकाधिक आमंत्रणों के लिए उपयोग किया जा सकता है। कैश में आपके द्वारा संग्रहीत डेटा है या नहीं, यह देखने के लिए आप अतिरिक्त कोड जोड़ सकते हैं।

  • पृष्ठभूमि प्रक्रियाओं या कॉलबैक अपने लैम्ब्डा समारोह कि जब समारोह समाप्त हो गया फिर से शुरू करता है, तो एडब्ल्यूएस लैम्ब्डा कंटेनर का पुन: उपयोग करने के लिए चुनता पूरा नहीं किया द्वारा शुरू की। आपको यह सुनिश्चित करना चाहिए कि आपके कोड में प्रक्रियाओं या कॉलबैक (नोड.जेएस के मामले में) कोड से बाहर होने से पहले पूर्ण हो जाएं।

आप देख सकते हैं, वहाँ बिल्कुल एक लैम्ब्डा समारोह के कई समवर्ती आमंत्रण के बीच दौड़ की स्थिति जब कंटेनर पुन: उपयोग का लाभ लेने की कोशिश कर के बारे में कोई चेतावनी है। एकमात्र नोट है "इस पर भरोसा मत करो!"।

+0

यह एकदम सही उत्तर है, बहुत बहुत धन्यवाद – Andremoniy

+0

बक्षीस को एसएपी से सम्मानित किया जाएगा SO इसे अनुमति देता है (22 घंटे शेष) – Andremoniy

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