परिचय
मैं दिन हर काम में एक कंपनी के डेटा हम कहाँ के रिकॉर्ड के लाखों नौकरियों प्रसंस्करण बैच चलाने के कई और मैं गया है और प्रत्येक है सोच के बारे में हाल ही में सभी के चारों ओर बैठ मशीनों है कि हर घंटे के लिए कई दिन कुछ नहीं कर रहे हैं. हमारे सिस्टम होगा यह नहीं हो सकता है अच्छा अगर हम सत्ता का उपयोग सिलेंडर प्रसंस्करण के लिए उन मशीनों? लेख के इस सेट में मैं कार्यालय एक हूँ रोजगार के संभावित लाभ को देखने जा करने के लिए ग्रिड वातावरण का उपयोग virtualised.
में भाग 1 मैं एक कार्यालय ग्रिड बनाने दिया का अवलोकन करने के लिए चाहते हो जाएगा आप प्रणाली और क्यों संभावित कारणों प्रौद्योगिकियों मैं हो जाएगा का उपयोग कर के रूप में कुछ भी चर्चा की.
नौकरी नियंत्रण
यदि आप जा रहे हैं नौकरियों हो तो चल रहा है आप के लिए कुछ करने के लिए उन्हें प्रबंधित तरह की जरूरत जा रहे हैं. अपने काम पर नियंत्रण प्रणाली (अपनी नौकरी सर्वर पर) को बहुत अच्छी तरह से भी एक कार्यालय ग्रिड को चलाने का प्रयास करने से पहले बाहर सोचा की जरूरत है. सबसे पहले तो, एक काम पर नियंत्रण प्रणाली के लिए कार्य क्या कर रहे हैं:
- नौकरियों बाहर अनुरोध पर कार्यकर्ताओं से हाथ
- बताओ श्रमिकों क्या नौकरियों के प्रकार को चलाने के लिए
- ट्रैक नौकरियां
- यह सुनिश्चित करें कि नौकरी केवल एक बार चलती है
- श्रमिकों को नौकरी डेटा प्रदान करें, या कम से कम उन्हें बताने के लिए इसे पाने के लिए जहां
इस प्रणाली को भी एक्स्टेंसिबल की जरूरत है, एक समाधान है कि एक भी मामले में अब के लिए काम करता है के लिए रोजगार के कई प्रकार के भाग के रूप में व्यापार एक ग्रिड समाधान में मूल्य देखता बढ़ाया जा सकता है. उदाहरण के लिए, नौकरी प्राथमिकताओं फायदा मिल सकता है, एक से अधिक नौकरी प्रकार (यानी कई कोड कुर्सियां) मौजूद है, अंतत: आप भी कई अलग अलग मशीनों है कि कर्मचारी काम के प्रत्येक प्रकार के लिए अनुकूलित कर रहे हैं (हालांकि कि दूर 'सामान्य कार्यकर्ता से कदम नहीं चला सकते हो सकता है विचार '). हमेशा के लिए भविष्य के बारे में सोचने की कोशिश करें जब विकासशील प्रणाली, एक अल्पकालिक दृष्टि लंबी अवधि निराशा और बढ़ विकास के समय के लिए नेतृत्व कर सकते हैं.
नौकरी सर्वर
हम कहीं जरूरत अपने काम को नियंत्रण से, यह आपके ग्रिड में ही व्यवस्था है कि एक निश्चित रिसोर्स लोकेटर है होना चाहिए, हो सकता है कि एक आईपी पता, होस्ट का नाम, यूआरएल (आंतरिक DNS का उपयोग करके), आदि इसका कारण यह है जा रहे हैं श्रमिकों को रोजगार के लिए कहाँ देखना पता है की जरूरत है, कर्मचारियों को काम पर नियंत्रण प्रणाली (नहीं काम पर नियंत्रण प्रणाली श्रमिकों खोजने के लिए) की जरूरत है.
नौकरी सर्वर ही वास्तव में एक जटिल कार्य (एक बुनियादी तंत्र में किसी भी तरह) नहीं है, यह करने के लिए नौकरियों की एक सूची की दुकान, नौकरी हाथ से बाहर, परिणाम प्राप्त करते हैं, और बाद में उन्हें बाद में पुनः प्राप्ति के लिए दुकान की जरूरत है. कैसे इन भागों (जैसे कि 'नौकरी हाथ से बाहर') बहुत बुनियादी किया जा सकता है परिभाषित कर रहे हैं. बाद में हम इस प्रणाली का विस्तार करने के लिए एक प्रशासन में जोड़ने, संपादित करने, हटाने, रोजगार निलंबित इंटरफ़ेस शामिल कर सकते हैं लेकिन यह इस अभ्यास से परे है.
वहाँ कोई कारण कुछ तो यह है कि अपनी नौकरी सर्वर एक आभासी अपने मुख्य प्रसंस्करण सर्वर के भीतर चल मशीन नहीं हो सकता है यह बहुत अधिक संसाधनों से पानी नहीं प्रदान की है. नौकरी सर्वर तथापि उच्च उपलब्धता की आवश्यकता नहीं है, अगर यह एक शुक्रवार शाम आप के लिए संसाधन की एक पूरी सप्ताहांत खोने के लिए जा रहे हैं पर नीचे चला जाता है, संभवतः आप प्रसंस्करण समय की कीमत सप्ताह के एक जोड़े (जब आपके मुख्य प्रसंस्करण अकेले सर्वर की तुलना में) की लागत . आप के लिए उच्च उपलब्धता के लिए एक लोड संतुलित पर्यावरण पर अपनी नौकरी सर्वर लगाने पर विचार कर सकते हैं.
बुनियादी सेटअप
The basic setup for our job server will consist of what I'm calling one of my LiMP servers (that is Li nux, m ySql, P HP). The code running on the workers will actually work out what jobs it can run by interacting with with job control system databases. Later on we could create a web service and actually hand out jobs rather than having the workers do the hard work themselves, but for now we'll continue using the KISS principle (Keep it Simple, Stupid!).
So, lets create three mySQL tables to deal with jobs. These will be `jobs`, `jobRecords`, and `jobResults`.
Here I'm using SQL Buddy a great little alternative to phpMyAdmin just because its easier to install on centOS (for others see: 10 Great alternatives to phpMyAdmin )
This table consists of 5 simple fields,
- id: Uniquely identify the job
- name: Could be a client reference, or any number of other identifiers
- Status: You need to know where the job is at, eg
- 0: Not started
- 1: Picked up
- 2: Completed
- started_by: Who's started doing the job? This isn't entirely required but is a nice to have. I'd suggest tracking workers by their IP address on your network
- started_at: When did the worker start the job? By tracking jobs that have not completed within X amount of time we know we need to pick up the job once again and start processing by another worker. Workers could stop processing/go offline for any number of reasons, power failure, crash, network loss, etc.
It is easy how this table could be extended with a few additional fields to allow for statistics tracking, a finish time column to see how long the job took, a counter to see how many workers picked up the job (obviously this needs to tend to 1), job priority, the list can go on and on. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.
Lets add a few example jobs:
The next table again is quite simple to understand, these are our job records. They are linked to the main jobs table by a column `jobs_id`. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:
- id: ID of the record
- name: Person's name
- address: Person's address
- jobs_id: The job ID that this record is linked to
The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:
- job_record_id: Link the result to the job table
- result: The result data
…and that's all you need for job control! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.
Selecting a job
जैसा कि पहले कहा, मजदूरों हमारे लिए अब के लिए हमारा काम, प्रबंधन करना होगा, ताकि हम सभी के लिए वास्तव में जरूरत है एक नौकरी कि संसाधन की जरूरत है और जानकारी प्राप्त कर मिल रहा है. हम यह कैसे करेंगे? अच्छी तरह से हमारा काम चयन मानदंड लेने और नौकरियों के लिए देखो, एसक्यूएल में मैं निम्नलिखित किया:
- किसी भी काम है कि पूर्ण रूप में, लेकिन हमारे कार्यकर्ता से चिह्नित नहीं कर रहे हैं (एक पहचानकर्ता, आसान आईपी पता हो जाएगा के साथ स्थानापन्न __ME__) उन्हें रीसेट लें:
अद्यतन `नौकरियों` सेट `स्थिति '= 0 कहां` `स्थिति = 1 और` started_by = __ME__ `;
- हमारा काम चयन मानदंड का प्रयोग, एक नौकरी का चयन करें और नियंत्रण प्रणाली है कि इस कर्मचारी के साथ काम कर रहा है बताओ:
अद्यतन `नौकरियों` सेट `` स्थिति = 1, `` started_by = __ME__, `` started_at = (अब), जहाँ `स्थिति '= 0 या
(`` स्थिति = 1 और `` started_at> ((अब) DATE_SUB, अंतराल एक्स घंटे)) आदेश द्वारा `आईडी` ए एस सी;
नौकरियों है कि समय की एक्स राशि में जो परिणाम हम यह सुनिश्चित करना कि सभी नौकरियों एक कार्यकर्ता दुर्घटनाग्रस्त या AWOL जाने की घटना में चलाए जा रहे हैं नहीं लौटे हैं हथियाने के द्वारा.
- अगले नौकरियों खुद के रिकॉर्ड के बाद विवरण हड़पने:
चुनें * से `नौकरियों` जहां `started_by` = 1 सीमा __ME__;
चुनें * से `job_records` जहां `आईडी` = __JOBID__;
काम के पूरा होने पर हम सम्मिलित हमारे परिणाम और अभिलेखों को पूरा के रूप में काम निशान. याद के रूप में नौकरी निलंबित / किसी भी समय फिर से शुरू अपनी स्क्रिप्ट में कुछ मजबूती के लिए अनुमति दे सकते हैं. यह हो सकता है कि काम काम पर नियंत्रण प्रणाली को अद्यतन है, तो एक काम में अभिलेखों की संख्या और काम पर नियंत्रण प्रणाली के लिए वापस बचाया एक बुद्धिमान कदम होगा परिणामों की संख्या की जाँच के माध्यम से आधे रास्ते निलंबित.
इसके अलावा, whilst यह दर्शाता है कि कैसे रोजगार और चयन किया जा सकता है वास्तव में कामयाब से एक SQL-क्वेरी फ्रेम चाहिए abstracting अपने काम पर नियंत्रण ताकि यदि आप, तय प्रणाली के आधार स्विच करने के लिए उपयोग कर एक वेब सेवा, एक फ़ाइल XML , या किसी अन्य सिस्टम की संख्या में यह उसके ऊपर कोड को प्रभावित नहीं करेगा.
नौकरी विन्यास
अगले पहलू पर विचार काम आकार और विन्यास है. नौकरी विन्यास के साथ खेल से हम गति, प्रक्रिया प्रतिकृति, और विश्वसनीयता के बीच एक उत्कृष्ट संतुलन कायम कर सकते हैं. एक जोड़ी OFA परिदृश्यों लें:
- रोजगार चलाने के लिए 1 से प्रत्येक दिन: यह मतलब है कि आपके कर्मचारी दिन की जरूरत 15 से काम प्रत्येक प्रक्रिया (समय की 2/3rds सत्ता के लिए की याद% 10). यह स्पष्ट रूप से एक बुद्धिमान विन्यास नहीं है, अपने काम के आकार रास्ता बहुत बड़ा! इसे ले जाएगा कम से कम करने के लिए एक प्रारंभिक कार्यकर्ता AWOL जाना चाहिए संसाधित नौकरी मिल (समय लेने के लिए है कि यह एक परिणाम प्लस पुनर्संसाधन समय वापस नहीं आया है) समय डबल. आदर्श में एक तुम्हें याद कर बजाते पर होगा कम से कम एक नौकरी रखने के अंत तक पूरा काम आसानी से मंजूरी दे दी की लंबी अवधि के प्रत्येक बेकार तुम, उस तरह से ऊपर सबसे खराब और कम से मामले में एक दिन जाना होगा काम ले दो के लिए प्रक्रिया पहले करना चाहिए.
- नौकरियों मिनट ले 1 से चलाएँ: इसका मतलब यह है कि अपने कार्यकर्ताओं मिनट के बारे में लेने के 15 से काम चलाने के प्रत्येक. Whilst यह शुरू में आदर्श लग सकता है, तुम दोपहर के भोजन के समय, कॉफी ब्रेक, बैठकों, आदि इस परिदृश्य अपने सिस्टम के अन्य क्षेत्रों पर दबाव डालता है और अपनी ही समस्याओं का परिचय के दौरान अतिरिक्त काम प्रसंस्करण लाभ. उदाहरण के लिए, सबसे पहले अपने सेटअप / प्रसंस्करण समय का अनुपात ठीक नीचे जा रहा है, इसलिए प्रणाली दक्षता खोने. अपने नेटवर्क के लिए लगातार विभिन्न कार्यकर्ताओं निराशा कर्मचारी जो अपने दिन काम करने के लिए दिन डोंग कर रहे हैं काम की जानकारी स्ट्रीमिंग होने जा रहा है. आप भी अपनी नौकरी प्रसंस्करण सर्वर पर और अधिक दबाव डाला के रूप में इसे बाहर बहुत से और एक नियमित आधार पर कार्य के छोटे टुकड़ों के बहुत सारे पकवान है जा रहे हैं. अन्त में, इस स्थिति में यदि आपकी नौकरी सर्वर नीचे चला जाता है आप के लिए सकता है बड़ा रोजगार जबकि अपूर्ण काम का एक बड़ा वापस लॉग बनाने के लिए जा रहे हैं blissfully अनजान है कि इस काम के सर्वर कठिनाइयों का सामना कर रहा था प्रसंस्करण जारी रखा.
वास्तविकता में वहाँ कोई भी अपने ग्रिड स्थापना के लिए आदर्श विन्यास हो सकता है, ज्यादा संसाधन उपलब्ध, नौकरी की, नौकरी वापसी समय की आवश्यकताओं, नेटवर्क की क्षमता, और इतने पर प्रकार पर निर्भर करता है. हालांकि कुछ दिशा निर्देश होगा:
- आकार नौकरियों ताकि प्रत्येक कर्मचारी कम से कम 3-4 नौकरियों के माध्यम से 15 घंटे (सबसे लंबे समय तक की संभावना निष्क्रिय समय अवधि) की अवधि में प्राप्त कर सकते हैं
- काम के आकार के साथ खेलने ताकि सेटअप समय काफी तुच्छ प्रसंस्करण समय (ऊपर बिंदु मन में असर) की तुलना में हो जाता है.
- अगर एक काम डबल में समय की राशि को पूरा नहीं करता है (शायद कम) आप यह है कि इसके चले AWOL मान और यह एक और कार्यकर्ता के साथ प्रसंस्करण शुरू को पूरा करने की उम्मीद है. इसका मतलब है आप तीन बार करने के लिए एक नौकरी की सामान्य लंबाई प्रतीक्षा इसे (संभवतः अब अगर बाद में काम विफल रहता है) को पूरा करने के लिए हो सकता है. लेकिन आप यह कर सकते हैं कम करना चाहते करने के लिए समय है, नियमित आधार सावधान रहना होगा एक नहीं के लिए कम यह भी पर कार्य प्रसंस्करण शुरू duplicating सकता है जितना आप.
- नौकरियों बाहर आवश्यकताओं की स्वतंत्र संभव के रूप में ज्यादा के रूप में किया जाना चाहिए. नौकरी सर्वर, उदाहरण के लिए, केवल और हर काम का प्रारंभ और समाप्ति पर संपर्क किया जाना चाहिए.
- अपने नेटवर्क तर मत करो, यह दो नकारात्मक प्रभाव पड़ेगा, अपने कर्मचारियों को दिन के समय नेटवर्क कनेक्शन समस्याओं को निराशा होती है और बाहर एक समस्या यह है कि केवल बदतर रूप में आप अपने ग्रिड पैमाने पर मिल जाएगा समय के साथ अनुभव किया जा सकता का उपयोग कर पाएंगे.
- सुनिश्चित रोजगार अपने कार्यकर्ताओं पर चला सकते हैं. अगर नौकरियों स्मृति भी बन गहन या डिस्क स्थान गहन नौकरी छोड़ और शुरू केवल एक चीज है कि आप ध्यान देंगे कोई वास्तविक कारण है कि कारण के साथ कार्रवाई की नौकरियों की संख्या में एक बूंद है.
एक नौकरी के सबमिट परिणाम
जब एक नौकरी के परिणाम प्रस्तुत यह महत्वपूर्ण है कि जांच के परिणाम एक और मजदूर द्वारा प्रस्तुत नहीं किया है, खासकर अगर मौजूदा कर्मचारी कुछ समय के लिए निष्क्रिय किया गया है.
परिणाम यह सुनिश्चित करें कि परिणामों की संख्या नौकरी के भीतर रिकॉर्ड की संख्या मैच कब प्रस्तुत कर रहे हैं.
जैसा कि पहले कहा है, और हो सकता है, नहीं कर सकता पर जोर दिया पर नौकरी बहाली और परिणाम प्रस्तुत करने में दोष सहिष्णुता का निर्माण. कार्यकर्ताओं में जाने का सबसे अधिक बार असुविधाजनक पर मोड को निरस्त करने और यह होने के लिए catered की जरूरत है (और सबसे अधिक संभावना कर सकते हैं). इसके अलावा एक बार फिर दूर अपने परिणाम प्रस्तुत करने abstracting मदद अपने काम पर नियंत्रण प्रणाली के लिए भविष्य में बदलाव बहुत आसान से निपटने के लिए पूरा करेगा.
सारांश
इस section में हम एक काम पर नियंत्रण सर्वर क्या करने की जरूरत है और एक बहुत ही बुनियादी स्थापित प्रणाली पाने के लिए पर ध्यान दिया है. हम चर्चा कैसे नियंत्रण प्रणाली से एक नौकरी पाने के लिए और सबसे अच्छा कैसे के लिए रोजगार कॉन्फ़िगर करने के लिए सबसे अपने कार्यालय ग्रिड प्रणाली के बारे में हमारी. खत्म करने के लिए, परिणाम प्रस्तुत करने के काम पर नियंत्रण सर्वर को वापस पर एक या दो पैराग्राफ पेश किया गया.
- एक काम पर नियंत्रण सर्वर नौकरियों का प्रबंधन और सुनिश्चित करता है कि सब काम पूरा कर रहे हैं इकाइयों
- abstracting अपनी नौकरी / परिणाम प्रस्तुत हम ज्यादा समस्याओं के बिना नियंत्रण सर्वर की तकनीक बदल सकते हैं का चयन करके
- कॉन्फ़िगर अपने काम को सुनिश्चित करने के लिए कि वे जल्दी से और कुशलता से अपने नेटवर्क बुनियादी सुविधाओं पर बहुत अधिक दबाव डालने के बिना, और एक नियमित आधार पर प्रसंस्करण कार्यों duplicating के बिना चलाए जा रहे हैं.
- यह सुनिश्चित करें कि आप अपनी दिनचर्या में दोष सहिष्णुता और त्रुटि checking निर्माण, कार्यकर्ताओं को निरस्त करने और फिर से शुरू कर सकते हैं और समय की सबसे असुविधाजनक. जाँच करने के लिए यदि परिणाम पहले से ही एक कार्यकर्ता द्वारा भी सौंपी गई हैं याद रखें.
अगली बार
में 3 हिस्सा हम श्रमिकों प्रसंस्करण हूँ बनाने के लिए हमारे आभासी मशीन खिड़कियां और सेट अप हमारे मशीनों समय के लिए निष्क्रिय हो जाते हैं,.