2012-02-21 28 views
5

मैं 4 भागों में है कि बहुस्तरीय आवेदन वास्तुकला:क्या राज्य के साथ एक मल्टीप्रोसेस आर्किटेक्चर बनाने के लिए सबसे हल्का समाधान सभी प्रक्रियाओं भर में साझा है

  • एक नेटवर्किंग सर्वर/ग्राहक परत
  • एक मध्यवर्ती डेटा परत प्रक्रियाओं के बीच बातचीत को संभालने के लिए
  • एक निगरानी परत
  • एक ग्राहक परत उदाहरणों में से n संख्या से बना

क्लाइंट/सर्वर परत:

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

मध्यवर्ती परत:

मध्यवर्ती परत वर्तमान में एक डेटाबेस का उपयोग कर कार्यान्वित किया जाता है। एक टेबल में सभी संभावित लेबल होते हैं जिन्हें लगभग 120,000 पर बुलाया जा सकता है। दूसरी तालिका में पहली तालिका का इंटरमीडिएट कैश होता है जिसमें उपयोग में केवल मूल्य होते हैं, इसके लिए लगातार अपडेट की आवश्यकता होती है और वस्तुओं के नए संग्रह का अनुरोध होने पर फ़्लश हो जाता है। तीसरी तालिका वह जगह है जहां संग्रह अद्यतन भेजे जाते हैं और अनुरोध लंबित होने पर केवल डेटा होता है।

मॉनिटर परत:

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

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

डेटाबेस बहुत भारी लगता है और आईपीसी (इंटर प्रोसेस कम्युनिकेशंस) को संभालने के लिए पर्याप्त विशिष्ट नहीं है। कार्यक्रम चरम समय की बाधाओं के तहत लिखा गया था ताकि डेटाबेस का उपयोग करना भविष्य में बदलने की उम्मीद के साथ 'आसान समाधान' था। मैं Google Chrome's multi-process architecture की मजबूती का एक बड़ा प्रशंसक हूं, लेकिन मुझे इस बारे में बहुत कुछ पता है कि वे सभी प्रक्रियाओं को एक साथ कैसे जोड़ते हैं (पाइप, टीसीपी,?)।

तो:

  1. मैं मध्यवर्ती परत के लिए एक डेटाबेस से अधिक भारतीय दंड संहिता का उपयोग करने से एक महत्वपूर्ण प्रदर्शन में सुधार की उम्मीद कर सकते हैं?

  2. विंडोज सिस्टम पर आईपीसी किस प्रकार का आदर्श होगा?

  3. क्या कोई क्रॉस प्लेटफ़ॉर्म (लिनक्स पढ़ें) वैकल्पिक समाधान उपलब्ध है जिसका उपयोग मोनो में स्थानांतरित होने पर इसके स्थान पर किया जा सकता है?

  4. मुझे शुरुआत करने में सहायता के लिए संसाधन/उदाहरण कहां मिल सकते हैं?

नोट: मैं समझता हूँ कि इस प्रणाली की वास्तुकला अनावश्यक रूप से जटिल लगता है, लेकिन यह एक बहुत बड़ा प्रणाली के लिए एक सामने के अंत के रूप में मौजूद है। यह एप्लिकेशन मिशन महत्वपूर्ण है इसलिए स्थिरता ट्रम्प दक्षता।

अद्यतन:

मैं प्रारंभिक सवाल में उल्लेख करना भूल गया। डेटाबेस डेटा/इंडेक्स सीधे बूट पर रैमडिस्क से लोड होता है। डेटाबेस को इष्टतम प्रदर्शन के लिए अनुक्रमित किया गया है। सारणी या मान जिन्हें लगातार लिखने की आवश्यकता होती है उन्हें अनुक्रमित नहीं किया जाता है लेकिन शेष डेटा होता है।

मैं इसके खिलाफ उपाय करने के लिए एक विकल्प की तलाश में हूं क्योंकि डीबी के अनुकूलन को इसकी सीमा तक ले जाया गया है और मुझे लगता है कि अभी भी सुधार के लिए बहुत सी जगह है।

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

+0

यदि आपके पास कोई आरेख उपयोगी हो सकता है? –

+0

@MylesMcDonnell जैसे ही मैं इसे खींचता हूं, मैं इसे जोड़ दूंगा। मैं उस क्षेत्र में थोड़ा जंगली हूँ इसलिए इसमें कुछ समय लग सकता है। –

उत्तर

4
  1. हां। डेटाबेस में सबसे अधिक संभावना हार्डड्राइव शामिल है, और हार्डड्राइव किसी भी कंप्यूटर का सबसे धीमा हिस्सा है, इसलिए हार्डड्राइव का उपयोग करने से दूर स्विचिंग में शायद प्रदर्शन लाभ होंगे।

  2. मैं zeromq/zmq के साथ जाऊंगा। यह एक संदेश उन्मुख ढांचा है जो कई संचार पैटर्न का समर्थन करता है। उदाहरण Pub/Sub या अनुरोध/REP आदि अधिक उदाहरणों के लिए here

  3. zmq पार मंच है और उसके आश्चर्यजनक तेजी से।

  4. Some C# examples on github

+0

मैं उल्लेख करना भूल गया, डेटाबेस रैमडिस्क से चलाया जाता है। –

+0

+1 बहुत दिलचस्प है। यह पहली बार है जब मैंने जेडएमक्यू के बारे में सुना है। सॉकेट प्रोग्रामिंग की तरह बहुत आसान लगता है लेकिन सरल और अधिक शक्तिशाली। इसमें मुझे और पढ़ने के लिए कुछ समय लगेगा लेकिन यह निश्चित रूप से व्यवहार्य विकल्प की तरह दिखता है। –

0

मैं एक अभिनेता के मॉडल के आधार समाधान में देख पर विचार करेंगे, इस तरह के रूप Akka.NET