2013-02-06 34 views
6

मैं ईसी 2 स्पॉट इंस्टेंस अनुरोध करने के लिए जावा एडब्ल्यूएस एसडीके का उपयोग कर रहा हूं। मांग उदाहरणों के विपरीत, API for spot requests में ClientToken के समान कुछ नहीं है और इस प्रकार बॉक्स के बाहर idempotency का समर्थन नहीं करता है।एडब्ल्यूएस स्पॉट इंस्टेंस अनुरोधों के लिए idempotency कार्यान्वित करना

सबसे आसान तरीका यह है कि मैं ऐसा करने के बारे में सोच सकता था LaunchGroup संपत्ति को एक अद्वितीय यूयूआईडी में सेट करना था; जब मैं इसकी जांच करता हूं तो मैं DescribeSpotInstanceRequests पर कॉल करता हूं और देखता हूं कि मेरे पास पहले से ही उसी लॉन्च समूह के साथ अनुरोध है या नहीं।

मेरे आश्चर्य के लिए, ऐसा लगता है कि वर्णन कॉल से पहले देरी हुई स्पॉट अनुरोध पहले लौटा दी गई है। मैंने इसके लिए एक जुनीट टेस्ट लिखा और ऐसा लगता है कि यह सुसंगत होने के लिए मुझे दो कॉलों के बीच कम से कम 60 का समय निर्धारित करना होगा (अनुरोध स्पॉट इंस्टेंस और स्पॉट इंस्टेंस अनुरोधों का वर्णन करें)। मुझे 10s की ग्रैन्युलरिटी की आवश्यकता है, क्योंकि किसी भी विफलता के मामले में, मेरे अनुरोधों को इस अंतराल पर दोहराया जा सकता है - यानी मैंने अनुरोध भेजने के बाद कुछ तोड़ दिया लेकिन इससे पहले कि मैं परिणाम पढ़ सकूं, मैं अमेज़ॅन से वापस आ गया। उस स्थिति में मैं अनुरोध दोहराना नहीं चाहता हूं, मैं सिर्फ यह देखना चाहता हूं कि यह पंजीकृत हो गया है और आगे बढ़ना है।

@Test 
public void testRunSpotInstances() throws Exception { 

    activity.execute(execution); 

    timeout(TIMEOUT); 

    // shouldn't do anything 
    activity.execute(execution); 

    timeout(TIMEOUT); 

    DescribeSpotInstanceRequestsResult result = client.describeSpotInstanceRequests(
      new DescribeSpotInstanceRequestsRequest().withFilters(new Filter() 
       .withName("launch-group").withValues(BUSINESS_KEY))); 

    assertThat(result.getSpotInstanceRequests()).hasSize(1); 

    timeout(TIMEOUT); 
} 

परीक्षण TIMETT पर सेट होने पर हर बार परीक्षण करता है; 40-50 के लिए यह intermittently काम करता है। इसके नीचे कुछ भी हर समय विफल रहता है।

क्या कोई इस देरी के आसपास काम करने में कामयाब रहा है? केवल एडब्ल्यूएस एपीआई का उपयोग करके स्पॉट अनुरोधों के लिए idempotency लागू कर रहा है और क्लाइंट एप्लिकेशन में राज्य को सहेजा नहीं जा रहा है?

+0

इस प्रश्न के लिए थोड़ा और संदर्भ जोड़ने के लिए: यह एक्सम्बलर प्रोविजनर पर हम जो काम कर रहे हैं उसका एक हिस्सा है - एक ऐसी सेवा जो आपको वर्चुअल मशीनों के पूल बनाने में मदद कर सकती है। https://github.com/axemblr/axemblr-provisionr –

+1

दिलचस्प समस्या - मैं वर्तमान में यह पुष्टि करने के अलावा कुछ भी रचनात्मक नहीं जोड़ सकता कि मुझे [बांस एडब्लूएस प्लगइन] के संदर्भ में विभिन्न समान एपीआई देरी का सामना करना पड़ा है (https: //plugins.atlassian.com/plugin/details/774227) और निष्कर्ष निकाला कि एडब्ल्यूएस एपीआई को केवल बोर्ड में [_eventually consistent_] (http://en.wikipedia.org/wiki/Eventual_consistency) माना जाता है; जैसे, मुझे ऐसे मामलों का भी सामना करना पड़ा जहां मुझे एक निर्माण कॉल से संसाधन आईडी मिली है, संसाधन को उसकी आईडी के आधार पर टैग कर सकता है लेकिन इसके बाद भी इसका वर्णन नहीं कर सकता है, क्योंकि यह माना जाता है कि अभी तक मौजूद नहीं है (अभी तक)। –

+0

धन्यवाद स्टीफन! मुझे आशा है कि समय के साथ चीजें बेहतर होंगी। –

उत्तर

0

उस मामले मैं नहीं करना चाहती में अनुरोध दोहराया है करने के लिए, मैं सिर्फ देखते हैं कि यह पंजीकृत हो गया और पर ले जाना चाहते हैं।

यदि आपको 200 बार वापस मिला, तो यह पंजीकृत है। यह तुरंत दिखाई नहीं दे सकता है, लेकिन यह पंजीकृत है और आप अपने प्रवाह में आगे बढ़ सकते हैं।

केवल एडब्ल्यूएस एपीआई का उपयोग करके स्पॉट अनुरोधों के लिए idempotency लागू कर रहा है और क्लाइंट एप्लिकेशन में राज्य सहेजा नहीं जा रहा है?

मुझे विश्वास नहीं है। मेरे पास अमेज़ॅन के ईएमआर के साथ एक ही तरह का मुद्दा है। जिस तरह से मैं इसके आसपास काम करता हूं वह एक घटक है जो क्लस्टर का निरीक्षण करना है। जब मैं ईएमआर क्लस्टर के लिए अनुरोध करता हूं, तो मुझे क्लस्टर आईडी वापस मिलती है, जिसे मैं कुछ पर्यवेक्षक को पास करता हूं। जब क्लस्टर राज्य बदलता है तो पर्यवेक्षक मेरे अन्य घटकों को कॉल करेगा। ईएमआर द्वारा तुरंत स्वीकार नहीं किया जा रहा एक वैध मामला है और इसे अपवाद की तरह नहीं माना जाता है।

मुझे नहीं पता कि यह आपके लिए उपयुक्त है या नहीं। शायद आप SpotInstanceRequestId को बनाए रखने का प्रयास कर सकते हैं। मेरे मामले में, मैं केवल उन्हें स्मृति में रखता हूं, लेकिन यदि आवश्यकता हो तो आप उन्हें कहीं भी लगातार रख सकते हैं।