2013-02-20 20 views
5

मैंने सरल वर्कफ़्लो के प्रबंधन के लिए एडब्लूएस रूबी एसडीके का उपयोग शुरू कर दिया है। एक व्यवहार जो मैंने अभी देखा है वह यह है कि कम से कम एक प्रासंगिक कार्यकर्ता और एक नया निर्णयकर्ता एक नया वर्कफ़्लो निष्पादन सबमिट करने से पहले चलाना चाहिए।अमेज़ॅन एसडब्ल्यूएफ: कम से कम एक कार्यकर्ता चलाना है, क्यों?

यदि मैं अपने कार्यकर्ता और निर्णायक को शुरू करने से पहले एक नया वर्कफ़्लो निष्पादन सबमिट करता हूं, तो कार्यों को कभी भी उठाया नहीं जाता है, भले ही मैं समय-समय सीमा के भीतर भी ठीक हूं। ऐसा क्यों है? एचटीटीपी लंबे मतदान के तरीके के विवरण के आधार पर, मैं उम्मीद करता हूं कि मतदान के लिए कॉल() तक पहुंचने पर ऐप को प्रासंगिक कार्यों को प्राप्त करने की उम्मीद होगी।

नौकरी विफल होने के बाद मुझे अन्य डेडलॉकिंग स्थितियों का सामना करना पड़ता है (उदा। कार्यकर्ता या निर्णायक बग के कारण, या समाप्त होने के कारण)। कभी-कभी, फिर से चलने या यहां तक ​​कि एक पूरी तरह से नया वर्कफ़्लो निष्पादन शुरू करने के परिणामस्वरूप एक डेडलॉक वर्कफ़्लो निष्पादन होगा। प्रारंभिक निर्णय कार्य AWS कंसोल में वर्कफ़्लो निष्पादन इतिहास में दिखाए जाते हैं, लेकिन निर्णायक उन्हें कभी प्राप्त नहीं करता है। बेशक, मुझे इस मुद्दे को एक परीक्षण मामले में पुष्टि/कम करने में समस्या हो रही है, लेकिन मुझे संदेह है कि यह उपर्युक्त मुद्दे से संबंधित है। यह लगभग 10 से 20% समय होता है; बाकी समय, सबकुछ काम करता है।

उल्लेख करने के लिए कुछ अन्य चीजें: मैं अनुक्रम में चलने वाले दो अलग-अलग गतिविधि कार्यों के लिए एक एकल कार्य सूची का उपयोग कर रहा हूं। कार्यकर्ता और निर्णायक दोनों एक ही कार्य सूची मतदान कर रहे हैं।

यहाँ मेरी कार्यकर्ता है:

 

require 'yaml' 
require 'aws' 

config_file_path = File.join(File.dirname(File.expand_path(__FILE__)), 'config.yaml') 
config = YAML::load_file(config_file_path) 

swf = AWS::SimpleWorkflow.new(config) 

domain = swf.domains['test-domain'] 

puts("waiting for an activity") 
domain.activity_tasks.poll('hello-tasklist') do |activity_task| 

    puts activity_task.activity_type.name 
    activity_task.complete! :result => name 

    puts("waiting for an activity") 
end 
 

संपादित

एडब्ल्यूएस मंचों पर किसी अन्य उपयोगकर्ता ने टिप्पणी की:

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

ध्यान दें कि ऐसी स्थिति यूनिट परीक्षणों के दौरान आम है जो कनेक्शन को अक्सर समाप्त करती है और वास्तव में किसी भी उत्पादन अनुप्रयोगों के लिए कोई समस्या नहीं है। सामान्य वर्कअराउंड प्रत्येक यूनिट परीक्षण के लिए अलग-अलग कार्य सूची का उपयोग करना है।

यह एक बहुत ही उचित स्पष्टीकरण प्रतीत होता है। मैं इसकी पुष्टि करने की कोशिश करने जा रहा हूं।

उत्तर

9

आपने दो मुद्दों को उठाया है: एक सक्रिय डिकोडर्स के साथ निष्पादन की शुरुआत के बारे में और दूसरा कार्य के बीच में दुर्घटनाग्रस्त अभिनेताओं के बारे में। मुझे क्रम में उन्हें संबोधित करने दें।

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

Fri Feb 22 22:15:38 GMT+000 2013 1 WorkflowExecutionStarted 
Fri Feb 22 22:15:38 GMT+000 2013 2 DecisionTaskScheduled 
Fri Feb 22 22:15:38 GMT+000 2013 3 DecisionTaskStarted 
Fri Feb 22 22:20:39 GMT+000 2013 4 DecisionTaskTimedOut 
Fri Feb 22 22:20:39 GMT+000 2013 5 DecisionTaskScheduled 
Fri Feb 22 22:22:26 GMT+000 2013 6 DecisionTaskStarted 
Fri Feb 22 22:22:27 GMT+000 2013 7 DecisionTaskCompleted 
Fri Feb 22 22:22:27 GMT+000 2013 8 ActivityTaskScheduled 
Fri Feb 22 22:22:29 GMT+000 2013 9 ActivityTaskStarted 
Fri Feb 22 22:22:30 GMT+000 2013 10 ActivityTaskCompleted 
... 

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

क्रैशिंग अभिनेता (या तो निर्णायक या कार्यकर्ता) का मुद्दा वह है जिसे मैं परिचित हूं। एक छोटी पृष्ठभूमि नोट पहले:

दोनों गतिविधि और निर्णय कार्यों 3 चरणों में सेवा से recored कर रहे हैं:

  • = अनुसूचित तैयार एक अभिनेता के द्वारा उठाया जा सकता है।
  • प्रारंभ = पहले से ही एक अभिनेता द्वारा उठाया गया।
  • पूर्ण/असफल या समय समाप्त = अभिनेता या तो पूरा हो गया या पूरा हो गया या समय सीमा के भीतर कार्य समाप्त नहीं हुआ।

एक बार अभिनेता एक कार्य उठाया और दुर्घटनाग्रस्त हो गया, यह स्पष्ट रूप से कुछ भी सेवा करने के लिए वापस रिपोर्ट करने नहीं जा रहा है (जब तक यह ठीक हो जाता है और अभी भी कार्य टोकन भेजा कार्य की याद है - लेकिन सबसे दुर्घटनाग्रस्त अभिनेता उस स्मार्ट नहीं होंगे)। अगली बार एक निर्णय कार्य निर्धारित किया जाएगा, हाल ही में प्रेषित कार्य के समय-समय पर होगा, यही कारण है कि सभी कलाकारों को कार्य समय समाप्ति की अवधि के लिए अवरुद्ध किया जाता है। यह वास्तव में वांछित व्यवहार है: सेवा यह नहीं जान सकती कि कार्य पर काम किया जा रहा है या नहीं, जब तक कार्यकर्ता अपनी समयसीमा के भीतर काम करता है। इससे निपटने का एक आसान तरीका है: अपने कलाकारों को एक कोशिश-पकड़ ब्लॉक के साथ फिट करें और एक अप्रत्याशित दुर्घटना होने पर कार्य को विफल करें। मैं प्रत्येक इंटीग्रेट टेस्ट के लिए अलग-अलग टास्कलिस्ट का उपयोग करने से हतोत्साहित होगा। इसके बजाय, मैं teardown() ब्लॉक में कार्य को विफल करने की अनुशंसा करता हूं। एसडब्ल्यूएफ एक कार्य को विफल करने के लिए reason निर्दिष्ट करने की अनुमति देता है, जो विफलताओं को लॉगिंग का एक तरीका है और बाद में उन्हें एडब्ल्यूएस कंसोल के माध्यम से देख रहा है।

+1

पूरी तरह से स्पष्टीकरण के लिए धन्यवाद। मैंने सोचा कि मैं पूरे समय कुछ गलत कर रहा था, लेकिन ऐसा लगता है कि सबकुछ अपेक्षाकृत कम या ज्यादा काम कर रहा है। मैं खुद को एक परीक्षण लिखने के लिए नहीं मिला था। – Tom

+0

खुशी मेरा है, मेरे पास एक विस्फोट था और कुछ सीखना समाप्त हो गया। – oozie

+1

इससे मदद मिलती है। धन्यवाद – Tzu

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