माइक्रो बनाम अखंड सर्वर आर्किटेक्चर


11

वर्तमान में हम अपने नए उत्पाद / परियोजना पर काम कर रहे हैं, यह कुछ विशिष्ट औद्योगिक / सेवा उद्यमों के लिए निर्देशित ग्राहक-सर्वर अनुप्रयोग है। हम जावा फ्रंट-एंड के साथ टीसीपी के ऊपर एक कस्टम प्रोटोकॉल चलाकर एक सर्वर (सी लैंग्वेज और लिनक्स ओनली) बना रहे हैं। हम कोडिंग के काम में लगभग 20% हैं और माइक्रो या मोनोलिथिक कर्नेल आर्किटेक्चर के बीच चयन करने की स्थिति का सामना कर रहे हैं।

मुझे पता है कि माइक्रो बनाम मोनोलिथिक आमतौर पर कर्नेल वास्तुकला के संबंध में है, लेकिन हम विशेष रूप से सर्वर के बारे में बात कर रहे हैं।

कस्टम सर्वर और मौजूदा कुछ क्यों नहीं?

  • हमारे यूआई की ज़रूरतें बहुत महत्वपूर्ण हैं और बहुत गतिशील हैं, इस प्रकार वेब / वेब-ब्राउज़र आधारित समाधान उचित नहीं थे।
  • ग्राहक अंत में सांख्यिकीय प्रसंस्करण महत्वपूर्ण है और इसलिए, फिर से, ब्राउज़रों को थोड़ी मदद मिली। (बेशक, हम सर्वर के अंत में प्रसंस्करण कर सकते हैं और ग्राहक को संसाधित डेटा पर पास कर सकते हैं लेकिन यह सर्वर पर बहुत अधिक भार और ग्राहक संसाधनों का अपव्यय होगा)।
  • इसके अलावा, कम से कम एक भी घटना का प्रबंधन करने के लिए कम से कम तीन तकनीकों (JS / HTML / CSS) के साथ एक रेगिस्तान तूफान के बीच में घर में झाडू लगाने जैसे पूरे अनुभव करता है - आप इसे n-बार स्वीप करते हैं, धूल n + 1 बार जमा होती है।

माइक्रो और अखंड सर्वर के बारे में क्या? आप क्या बात कर रहे हैं?

निम्नलिखित (काल्पनिक) ग्राहक अनुरोध पर विचार करें:

request-id: 123
request-service: HistoricDataSets
request-message: Fetch all records upto the year 2010

इस तरह के अनुरोध को प्राप्त करने पर, एक सर्वर, आमतौर पर, (हम सादगी के लिए थ्रेड और कांटे जैसी संगोष्ठी तकनीकों की अनदेखी कर रहे हैं):

  • अनुरोध स्ट्रिंग पार्स करें
  • कार्रवाई की पहचान करें ( HistoricDataSets LIMIT Year (2010)हमारे मामले में प्राप्त करें )
  • दृढ़ता परत (ओरेकल, हमारे उदाहरण में, कहने दें) के साथ बातचीत करें और डेटा प्राप्त करें।
  • प्रोटोकॉल के अनुसार डेटा को फॉर्मेट करें। उदाहरण के लिए:

    प्रतिक्रिया-आईडी: 123
    सफलता: सही
    प्रतिक्रिया-पाठ: डेटासेट

  • इस प्रकार तैयार किए गए डेटा के साथ क्लाइंट को जवाब दें।

इसे हम एक मोनोलिथिक सर्वर (एक अखंड कर्नेल के समान कहते हैं, जहां कर्नेल स्थान में सभी ओएस कामकाज किए जाते हैं)।

रसीद पर फिर से उसी अनुरोध पर विचार करें, इस बार सर्वर (हमने आईपीसी के रूप में केवल साझा की गई मेमोरी को फिर से सरलता के लिए ग्रहण किया है):

  • Parserप्रक्रिया के लिए साझा मेमोरी में अनुरोध डालता है
  • Parserस्ट्रिंग को पार्स करता है, कार्य को दिखाता है और निर्देशन Executionerकार्य निष्पादित करने के लिए प्रक्रिया।
  • Executionerतो करने के लिए डेटा गुजरता Fomatterप्रक्रिया है जो, एक प्रोटोकॉल स्ट्रिंग में डेटा स्वरूपण के बाद, सर्वर के लिए रिटर्न।
  • सर्वर इसे क्लाइंट (प्रतिक्रिया) के लिए भेज देता है।

बेशक, के बजाय Parser, Executionerऔर Formatterयह एक एकल लेकिन अलग प्रक्रिया हो सकती थी। इसे हम माइक्रो सर्वर (माइक्रो कर्नेल के समान होना चाहिए जो मुश्किल से न्यूनतम होता है) कह रहे हैं। सर्वर प्रभावी रूप से केवल सुन रहा है और प्रतिक्रिया कर रहा है जबकि सभी चरणों को अलग-अलग प्रक्रिया (एस) द्वारा ध्यान दिया जाता है।


कौन सा चुनना है? हम भ्रमित हैं! जबकि अखंड सर्वरों की कोशिश की जाती है और परीक्षण किया जाता है (अधिकांश HTTP-Web Servers?) और प्रोग्राम को आसान बनाने के लिए और संक्षिप्त रूप से अच्छी तरह से संभाल सकते हैं। माइक्रो सर्वर, प्राइमा फेशिअल, एक काम करने के लिए एक प्रोग्राम के UNIX सिद्धांत के अनुसार तेज और आसान लगते हैं, लेकिन यह भी विकसित करने के लिए जटिल हैं, esp। सम्‍भावनाओं को ध्‍यान में रखते हुए।

प्रश्न (ओं)
- क्या हैं (संभवतः हो सकता है) प्रत्येक दृष्टिकोण के पेशेवरों और विपक्षों?
- कब उपयोग करें? (इसकी व्याख्या एक सामान्य प्रश्न के रूप में भी की जा सकती है: IPC का उपयोग कब करें?)
- यदि माइक्रो कर्नेल को चुना जाता है, तो कोर-सर्वर का हिस्सा बनने के लिए किन कार्यों की आवश्यकता है और क्या नहीं?

इसी तरह के / संबंधित प्रश्न


कुछ जानकारी जो सहायक हो सकती है:

  • हमारे संभावित ग्राहकों को दो श्रेणियों में विभाजित किया जा सकता है:
    • बड़ा: लगभग 1,700 - 2,000 अनुरोध प्रति मिनट
    • छोटा: लगभग 650 - 700 अनुरोध प्रति मिनट
  • डेटा प्रति अनुरोध चक्र (अनुरोध और बाद की प्रतिक्रिया) को सामान्य रूप से औसतन 1.20 एमबी और लगभग 250-300 एमबी के बदतर स्थिति के साथ वितरित किया जा सकता है।
  • उत्पाद अवधारणा अपेक्षाकृत नई है, लेकिन इसमें कोर संचालन को प्रभावित करने की क्षमता है, इसलिए हम ग्राहक बजट को लचीला बनाने के लिए केवल एक निश्चित अंतराल (9-12 महीने) के बाद की तैनाती की उम्मीद करते हैं, यह हार्डवेयर की मात्रा को सीमित करता है जो ग्राहक तैयार होगा। जासूसी करने के लिए। छोटे वाले।
  • प्रत्येक ग्राहक का अपना क्लाइंट-सर्वर स्टैक होगा। सर्वर ग्राहक की टीम द्वारा प्रबंधित ग्राहक के हार्डवेयर पर चल रहा होगा, जबकि ग्राहकों को कार्यात्मक कर्मचारियों की मशीनों पर तैनात किया जाएगा
  • क्लाइंट और सर्वर अनुप्रयोग दोनों के लिए दूरस्थ अद्यतन आवश्यक है
  • PUSHयदि सर्वर क्लिक करता है तो सर्वर द्वारा वास्तविक समय सेवाएं 'अत्यधिक' वांछित हो सकती हैं!

4
आपको केवल एक कस्टम सर्वर की आवश्यकता नहीं है क्योंकि आप वेब प्रोटोकॉल का उपयोग नहीं करना चाहते हैं। आप अभी भी एक J2EE EJB कंटेनर उदाहरण के लिए एक एप्लिकेशन सर्वर का उपयोग कर सकते हैं, आप विश्वसनीय मैसेजिंग, वितरित लेन-देन आदि जैसे हाथ से लिखेंगे तो बहुत सारी कार्यक्षमता प्रदान करेंगे। 2011 में C सर्वर में कस्टम वायर प्रोटोकॉल लिखना एक अहंकार यात्रा की तरह लगता है मुझे।
जेरेमी

जवाबों:


7

अर्थशास्त्र कभी-कभी विकल्पों के पीछे मूल सिद्धांत की तुलना में बहुत अधिक महत्वपूर्ण उत्तर को नियंत्रित करता है। सबसे महत्वपूर्ण बात यह है कि यदि आप अपने मामले में किसी 'विशाल' को देख रहे हैं, जहाँ आपको आवेदन की वास्तव में सख्त तैनाती की जरूरत है - तो आप जितने पहियों की खोज करेंगे, उतना ही बेहतर होगा। अगर यह काम करता है, तो मुझे परवाह नहीं है कि यह अखंड या सूक्ष्म है; अगर यह नहीं है तो मुझे इसकी परवाह नहीं है!

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

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

  2. HTTP अभी भी सबसे अच्छा है-यदि आपको स्केल करने की आवश्यकता है (यदि आप इसका उपयोग करते हैं तो लोड बैलेंसर्स खरीदना भी आसान हो सकता है)। कस्टम प्रोटोकॉल के लिए कस्टम व्यवस्था की आवश्यकता होती है।

  3. HTTP का मतलब यह नहीं है कि आपको HTML, जावा स्क्रिप्ट के चारों ओर फेंकने की आवश्यकता है। यह भी मतलब नहीं है कि आप नियमित रूप से अपाचे सर्वर और वेब ब्राउज़र की जरूरत है। आप दो कस्टम क्लाइंट और एओएल सर्वर या एलटीटीटीपी जैसे तत्वों के बीच HTTP का उपयोग कर सकते हैं जो लाइब्रेरी के रूप में उपयोग किया जा सकता है यदि संचार एक विशाल डेटा स्थानांतरण नहीं है। आप gSOAP जैसे टूल किट के साथ दोनों तरफ SOAP का उपयोग कर सकते हैं ।

  4. भले ही HTTP निश्चित रूप से बिल को फिट नहीं करता है, बीईईपी जैसे कुछ पर विचार करें , जो आपको चीजों को अधिक कुशल बनाने में मदद करता है। वैकल्पिक रूप से कई सिद्ध आरपीसी, आरएमआई तंत्र मौजूद हैं।

  5. यह देखने की कोशिश करें कि आप बैक-एंड में समानांतर प्रसंस्करण करके अधिकतम कार्य कर सकते हैं और सर्वर केवल तभी काम करते हैं जब काम पूरा हो जाता है। यदि यह कार्य-प्रकार MPI की तरह फ्रेमवर्क हैं , या कई अन्य वितरित कंप्यूटिंग टूल किट हैं, जो मदद की हो सकती हैं।

  6. अंत में, जबकि मैं सटीक आवश्यकताओं को जानने की स्थिति में नहीं हो सकता, लेकिन आपको या तो बहुत सारे डेटा को वितरित करने या बहुत अधिक संगणना करने की आवश्यकता हो सकती है, अगर आपको दोनों की आवश्यकता है - अभी भी कुछ मुख्य वास्तु अक्षमताएं हैं।

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

केवल वेब ऐप की तुलना में वितरित सिस्टम के शोध में बहुत कुछ पूरा किया गया है। इसलिए आपको उस पर शोध करना चाहिए।

Dipan।


2

यह मुझे बहुत अकादमिक लगता है। और स्पष्ट रूप से, मुझे लगता है कि दूसरा दृष्टिकोण केवल अखंड होना चाहिए। यह उतना ही है जितना कि आपको जाना चाहिए:

  1. अनुरोध को पार्स करें
  2. अनुरोध को संभालें

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


1
  1. मोनोलिथिक कर्नेल माइक्रो कर्नेल की तुलना में बहुत पुराना है । यह यूनिक्स में उपयोग किया जाता है। जबकि 1980 के दशक के अंत में माइक्रोकर्ल का आइडिया दिखाई दिया ।

  2. ओएस के मोनोलिथिक कर्नेल होने का उदाहरण UNIX, LINUX है जबकि ओएस वाले माइक्रो कर्नेल QNX, L4, HURD हैं , शुरू में Mach (मैक ओएस x नहीं) बाद में यह हाइब्रिड कर्नेल में बदल जाएगा, यहां तक ​​कि MINIX भी शुद्ध कर्नेल नहीं है क्योंकि डिवाइस ड्राइवर हैं गिरी के हिस्से के रूप में संकलित।

  3. मोनोलिथिक कर्नेल माइक्रो कर्नेल की तुलना में तेज़ होते हैं । जबकि पहला माइक्रोकर्नल मंक मोनोलिथिक कर्नेल की तुलना में 50% धीमा है, जबकि बाद के संस्करण में L4 केवल 2% या मोनोलिथिक कर्नेल की तुलना में 4% धीमा है

  4. अखंड कर्नेल आम तौर पर भारी होते हैं । जबकि शुद्ध अखंड कर्नेल आकार में छोटा होना चाहिए यहां तक ​​कि प्रोसेसर प्रथम स्तर कैश (पहली पीढ़ी के माइक्रोकर्नेल) में भी फिट होता है।

  5. मोनोलिथिक कर्नेल डिवाइस ड्राइवर में कर्नेल स्थान पर रहता है । माइक्रो-कर्नेल डिवाइस ड्राइवर में, जबकि उपयोगकर्ता अंतरिक्ष में रहता है

  6. चूँकि डिवाइस ड्राइवर कर्नेल स्थान पर रहता है, यह अखंड कर्नेल को माइक्रो कर्नेल की तुलना में कम सुरक्षित बनाता है । (ड्राइवर में विफलता से दुर्घटना हो सकती है) जबकि माइक्रोकर्नेल अखंड कर्नेल की तुलना में अधिक सुरक्षित हैं इसलिए कुछ सैन्य उपकरणों में उपयोग किया जाता है।

  7. मोनोलिथिक कर्नेल आईपीसी सुनिश्चित करने के लिए संकेतों और सॉकेट्स का उपयोग करते हैं जबकि माइक्रोकर्नल दृष्टिकोण संदेश कतारों का उपयोग करता है । माइक्रोकॅन के 1 जीन को खराब तरीके से लागू किया गया IPC संदर्भ स्विच पर धीमा था।

  8. एक अखंड प्रणाली में नई सुविधा जोड़ने का मतलब है कि आप पूरे कर्नेल को फिर से जोड़ सकते हैं, जबकि आप नए फीचर या पैच को फिर से जोड़ने के बिना जोड़ सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.