उच्च उपलब्धता
जैसा कि क्रिस का उल्लेख है, आपका एपीआई सर्वर आपके लेआउट में विफलता का एकल बिंदु है। आप जो स्थापित कर रहे हैं वह एक संदेश कतारबद्ध बुनियादी ढाँचा है, कुछ लोगों ने पहले लागू किया है।
उसी रास्ते पर चलते रहे
आप API सर्वर पर अनुरोध प्राप्त करने का उल्लेख करते हैं और प्रत्येक सर्वर पर चलने वाले MySQL DB में नौकरी सम्मिलित करते हैं। यदि आप इस मार्ग पर चलते रहना चाहते हैं, तो मैं सुझाव देता हूं कि आप एपीआई सर्वर लेयर को हटा दें, और वर्कर्स को प्रत्येक के लिए अपने एपीआई यूजर्स से सीधे कमांड स्वीकार करें। आप प्रत्येक API उपयोगकर्ता कनेक्शन को सीधे उपलब्ध कार्यकर्ता नोड्स में वितरित करने के लिए राउंड-रॉबिन डीएनएस के रूप में सरल रूप में कुछ का उपयोग कर सकते हैं (और यदि कनेक्शन सफल नहीं है तो फिर से प्रयास करें)।
एक संदेश कतार सर्वर का उपयोग करें
ActiveMQ जैसे अधिक मजबूत संदेश पंक्तिबद्ध इन्फ्रास्ट्रक्चर इस उद्देश्य के लिए डिज़ाइन किए गए सॉफ़्टवेयर का उपयोग करते हैं । आप API उपयोगकर्ताओं से POST अनुरोध स्वीकार करने के लिए ActiveMQ के RESTful API का उपयोग कर सकते हैं, और निष्क्रिय कर्मचारी कतार पर अगला संदेश प्राप्त कर सकते हैं। हालांकि, यह शायद आपकी आवश्यकताओं के लिए ओवरकिल है - यह एक सेकंड में विलंबता, गति और लाखों संदेशों के लिए डिज़ाइन किया गया है।
ज़ूकीपर का उपयोग करें
एक मध्य मैदान के रूप में, आप ज़ूकीपर को देखना चाह सकते हैं , भले ही यह विशेष रूप से एक संदेश कतार सर्वर न हो। हम इस सटीक उद्देश्य के लिए $ काम में उपयोग करते हैं। हमारे पास तीन सर्वरों (आपके एपीआई सर्वर के अनुरूप) का एक सेट है जो ज़ूकीपर सर्वर सॉफ़्टवेयर चलाते हैं, और उपयोगकर्ताओं और अनुप्रयोगों से अनुरोधों को संभालने के लिए एक वेब सीमा है। वेब फ्रंटएंड, साथ ही ज़ुकीपर कार्यकर्ताओं के लिए बैकएंड कनेक्शन, लोड बैलेंसर है यह सुनिश्चित करने के लिए कि हम कतार को संसाधित करना जारी रखें, भले ही एक सर्वर रखरखाव के लिए नीचे हो। जब काम पूरा हो जाता है, तो कार्यकर्ता ज़ुकीपर क्लस्टर को बताता है कि काम पूरा हो गया है। यदि एक श्रमिक की मृत्यु हो जाती है, तो उस काम को पूरा करने के लिए दूसरे काम पर भेजा जाएगा।
अन्य चिंताएँ
- सुनिश्चित करें कि उस घटना में काम पूरा करें जो एक कार्यकर्ता जवाब नहीं दे रहा है
- एपीआई को कैसे पता चलेगा कि एक काम पूरा हो गया है, और इसे कार्यकर्ता के डेटाबेस से पुनर्प्राप्त करना है?
- जटिलता को कम करने की कोशिश करें। क्या आपको प्रत्येक श्रमिक नोड पर एक स्वतंत्र MySQL सर्वर की आवश्यकता है, या वे API सर्वर (ओं) पर MySQL सर्वर (या प्रतिकृति MySQL क्लस्टर) से बात कर सकते हैं?
- सुरक्षा। क्या कोई नौकरी पेश कर सकता है? क्या प्रमाणीकरण है?
- किस कर्मी को अगला काम मिलना चाहिए? आप यह उल्लेख नहीं करते हैं कि कार्यों के 10ms या 1 घंटे तक होने की उम्मीद है। यदि वे तेज़ हैं, तो आपको विलंबता को कम रखने के लिए परतों को हटा देना चाहिए। यदि वे धीमे हैं, तो आपको यह सुनिश्चित करने के लिए बहुत सावधानी बरतनी चाहिए कि छोटे अनुरोध कुछ लंबे चलने वाले लोगों के पीछे अटक न जाएं।