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