2011-03-25 17 views
5

पर ऐपइंजिन की कार्य कतार सुविधा को दोहराना मैं एपइंजिन से ईसी 2/लोचदार बीनस्टॉक से आगे बढ़ने पर विचार कर रहा हूं क्योंकि मुझे यूरोपीय संघ के भीतर स्थित मेरे सर्वर की आवश्यकता है [AppEngine एक सर्वर स्थान विकल्प AFAIK प्रदान नहीं करता है]। मैंने लोचदार बीनस्टॉक नमूना आवेदन चलाया है, जो कि जहां तक ​​जाता है उतना अच्छा है; हालांकि ऐपइंजिन सुविधाओं में से एक मैं भारी रूप से भरोसा करता हूं ऑफ़लाइन कार्य कतार/क्रॉन सुविधा है, क्योंकि मैं समय-समय पर अन्य साइटों से बहुत अधिक डेटा प्राप्त करता हूं। मैं सोच रहा हूं कि इस कार्य कतार सुविधा को दोहराने के लिए मुझे लोचदार बीनस्टॉक/ईसी 2 पर क्या सेट करने की आवश्यकता होगी, चाहे अभी तक कोई सर्वोत्तम प्रथाएं हों या नहीं, यह कितना काम करेगा।ईसी 2/लोचदार बीनस्टॉक

धन्यवाद!

+3

क्या आप सरल कतार सेवा से अवगत हैं: http://aws.amazon.com/sqs/ – Calvin

+0

आपको टाइफूनएई (http://code.google.com/p/typhoonae/) की समीक्षा भी मिल सकती है। –

उत्तर

0

यदि आप अपना ऐप ले जा रहे हैं, तो आप शायद TyphoonAE या AppScale का उपयोग करके शायद बेहतर हो सकते हैं। दोनों वैकल्पिक वातावरण हैं जिसमें आप अपना ऐप इंजन ऐप असम्बद्ध कर सकते हैं, और दोनों ईसी 2 का समर्थन कर सकते हैं।

1

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

मैं कैसे लागू करने कर रहा हूँ यह इस तरह है: युद्ध के साथ

  1. पैकेज क्रॉन जॉब "कॉन्फ़िग फ़ाइल"। इस फ़ाइल में आवृत्तियों और यूआरएल होना चाहिए (क्योंकि प्रत्येक वास्तविक क्रॉन बस एक विशिष्ट यूआरएल का आविष्कार होता है, क्योंकि एई करता है)
  2. समन्वय बनाए रखने के लिए एक डेटाबेस तालिका का उपयोग करें। इसके लिए कम से कम दो कॉलम की आवश्यकता है।
    1. एक प्राथमिक या अद्वितीय कुंजी जो (स्ट्रिंग) को आवृत्ति के साथ कमांड को पकड़ने के लिए। (उदाहरण के लिए "@daily http://your-app/some/cron/handler/url")
    2. एक दूसरा स्तंभ जिसमें अंतिम निष्पादन समय होता है।

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

  1. query(SELECT last_execution_time FROM crontable WHERE command = ?)
  2. if(NOW() - last_execution_time < reasonable window) skip;
  3. query(UPDATE crontable SET last_execution_time = NOW() WHERE command = ? AND last_execution_time = ?)
  4. if(number of rows updated == 0) skip;
  5. run task()

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

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