मेरा सर्वर सेटअप एक अत्यधिक उपयोग किए जाने वाले एपीआई के लिए


9

मैं जल्द ही एक एप्लिकेशन के लिए सर्वर का एक गुच्छा खरीदूंगा, जिसे मैं लॉन्च करने वाला हूं, लेकिन मुझे अपने सेटअप के बारे में चिंता है। मुझे जो भी प्रतिक्रिया मिलती है, मैं उसकी सराहना करता हूं।

मेरे पास एक एप्लिकेशन है जो मेरे द्वारा लिखे गए एपीआई का उपयोग करेगा। अन्य उपयोगकर्ता / डेवलपर्स भी इस एपीआई का उपयोग करेंगे। एपीआई सर्वर अनुरोध प्राप्त करेगा और उन्हें कार्यकर्ता सर्वर पर रिले करेगा। एपीआई केवल लॉगिंग उद्देश्यों, प्रमाणीकरण और दर सीमित करने के लिए अनुरोधों की mysql db आयोजित करेगा।

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

क्या यह सेटअप आपके लिए कुशल है? क्या इसका पुनर्गठन करने का एक बेहतर तरीका है? मुझे किन मुद्दों पर विचार करना चाहिए? कृपया नीचे दी गई छवि देखें, मुझे आशा है कि यह समझ में सहायता करेगा।यहां छवि विवरण दर्ज करें

जवाबों:


17

उच्च उपलब्धता

जैसा कि क्रिस का उल्लेख है, आपका एपीआई सर्वर आपके लेआउट में विफलता का एकल बिंदु है। आप जो स्थापित कर रहे हैं वह एक संदेश कतारबद्ध बुनियादी ढाँचा है, कुछ लोगों ने पहले लागू किया है।

उसी रास्ते पर चलते रहे

आप API सर्वर पर अनुरोध प्राप्त करने का उल्लेख करते हैं और प्रत्येक सर्वर पर चलने वाले MySQL DB में नौकरी सम्मिलित करते हैं। यदि आप इस मार्ग पर चलते रहना चाहते हैं, तो मैं सुझाव देता हूं कि आप एपीआई सर्वर लेयर को हटा दें, और वर्कर्स को प्रत्येक के लिए अपने एपीआई यूजर्स से सीधे कमांड स्वीकार करें। आप प्रत्येक API उपयोगकर्ता कनेक्शन को सीधे उपलब्ध कार्यकर्ता नोड्स में वितरित करने के लिए राउंड-रॉबिन डीएनएस के रूप में सरल रूप में कुछ का उपयोग कर सकते हैं (और यदि कनेक्शन सफल नहीं है तो फिर से प्रयास करें)।

एक संदेश कतार सर्वर का उपयोग करें

ActiveMQ जैसे अधिक मजबूत संदेश पंक्तिबद्ध इन्फ्रास्ट्रक्चर इस उद्देश्य के लिए डिज़ाइन किए गए सॉफ़्टवेयर का उपयोग करते हैं । आप API उपयोगकर्ताओं से POST अनुरोध स्वीकार करने के लिए ActiveMQ के RESTful API का उपयोग कर सकते हैं, और निष्क्रिय कर्मचारी कतार पर अगला संदेश प्राप्त कर सकते हैं। हालांकि, यह शायद आपकी आवश्यकताओं के लिए ओवरकिल है - यह एक सेकंड में विलंबता, गति और लाखों संदेशों के लिए डिज़ाइन किया गया है।

ज़ूकीपर का उपयोग करें

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

अन्य चिंताएँ

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

आपके उत्कृष्ट उत्तर के लिए बहुत-बहुत धन्यवाद। मुझे पता था कि एपीआई परत एक अड़चन थी, लेकिन यह एकमात्र तरीका था कि मैं बिना अधिक कर्मी सर्वर को जोड़ सकता हूं ताकि एप्लिकेशन उपयोगकर्ताओं को मैन्युअल रूप से पता चल सके। आपके उत्तर को पूरी तरह से पढ़ने के बाद, मुझे पता चला है कि हाँ, यह बेहतर होगा यदि प्रत्येक कार्यकर्ता का अपना एपीआई हो। यद्यपि मैं अधिक श्रमिकों को जोड़ते हुए कोड को डुप्लिकेट किया जाएगा, यह मेरे परिदृश्य के लिए अधिक प्रदर्शनकारी है।
पेट

@ एबीएस - मेरे पहले अप-वोट के लिए धन्यवाद! यदि आप API परत को हटाने का निर्णय लेते हैं, तो मेरा सुझाव है कि इस लेख में वर्णित राउंड-रॉबिन DNS और सेटअप HAProxy (अधिमानतः एक जोड़ी) न करें । इस तरह, आपको टाइमआउट से निपटने की आवश्यकता नहीं है।
कट्टरपंथी

@abs आपको एपीआई लेयर को हटाने की ज़रूरत नहीं है , लेकिन रिडंडेंसी (CARP फेलओवर या समान) को जोड़ना विफलता के एकल बिंदु को खत्म करने के लिए एक महत्वपूर्ण विचार होगा ...
voretaq7

जहां तक ​​संदेश जाता है मैं सुझाव देता हूं कि आप तय करने से पहले RabbitMQ को देख लें: rabbitmq.com
एंटोनियस बलोच

2

सबसे बड़ा मुद्दा मैं देख रहा हूं कि फेलओवर प्लानिंग की कमी है।

आपका API सर्वर विफलता का एक बड़ा बिंदु है। यदि यह नीचे चला जाता है, तो कुछ भी काम नहीं करता है, भले ही आपके कार्यकर्ता सर्वर अभी भी कार्यात्मक हों। इसके अतिरिक्त, यदि कोई कार्यकर्ता सर्वर नीचे चला जाता है, तो सर्वर जो सेवा प्रदान करता है वह उपलब्ध नहीं है।

मेरा सुझाव है कि आप लिनक्स वर्चुअल सर्वर प्रोजेक्ट ( http://www.linuxvirtualserver.org/ ) को देखें कि कैसे लोड संतुलन और फेलओवर काम करता है, और यह पता लगाने के लिए कि ये आपके डिज़ाइन को कैसे लाभ पहुंचा सकते हैं।

आपके सिस्टम को संरचित करने के कई तरीके हैं। कौन सा तरीका बेहतर है एक व्यक्तिपरक कॉल है जो आपके द्वारा सबसे अच्छा उत्तर दिया गया है। मेरा सुझाव है कि आप कुछ शोध करें; अलग-अलग तरीकों के ट्रेडऑफ़ को तौलना। यदि आपको आरोपण विधि के बारे में जानकारी की आवश्यकता है, तो एक नया प्रश्न सबमिट करें।


इस परिदृश्य में आप एक विफल-तंत्र को कैसे लागू करेंगे? एक सामान्य अवलोकन बहुत अच्छा होगा।
पेट

अपने आरेख से, आपको लिनक्स वर्चुअल सर्वर (LVS) पर शोध करना चाहिए। Linuxvirtualserver.org पर जाएं और आप सभी को सीखना शुरू करें।
क्रिस टिंग

दिलचस्प है, मैं सामान्य रूप से उस और विफलताओं पर ध्यान दूंगा। मेरे सेटअप पर कोई अन्य टिप्पणी? कोई अन्य खतरे जिनका मैं सामना कर सकता था?
पेट

@ एबीएस: ऐसे कई मुद्दे हैं जिनका आप सामना कर सकते हैं। आपके प्रश्न के बहुत से व्यक्तिपरक हिस्से हैं, और मैं आपको व्यक्तिगत रूप से जो करना चाहता हूं, मैं आपको बॉक्सिंग नहीं करना चाहता। मुझे आपके सेटअप का समर्थन नहीं करना है; तुम करो। मेरा असली जवाब विफलता और उच्च उपलब्धता के बारे में सीखना है।
क्रिस टिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.