2010-07-21 13 views
5

मैं ऐसे सिस्टम पर काम कर रहा हूं जो संगठन द्वारा उपयोगकर्ताओं को विभाजित करता है। प्रत्येक उपयोगकर्ता एक संगठन से संबंधित है। प्रत्येक संगठन अपने डेटा को अपने डेटाबेस में संग्रहीत करता है जो डेटाबेस सर्वर मशीन पर रहता है। एक डीबी सर्वर 1 या अधिक संगठनों के लिए डेटाबेस का प्रबंधन कर सकता है।एक विरासत सी ++ एप्लिकेशन 'वेब सक्षम' कैसे करें

मौजूदा (विरासत) प्रणाली मानती है कि केवल एक संगठन है, हालांकि मैं इसे 'इंस्टेंस' (एक संगठन से बंधे हुए) चलाकर एप्लिकेशन को 'स्केल' करना चाहता हूं, और सर्वर मशीन पर कई उदाहरण चला सकता हूं (यानी 'एकल संगठन' अनुप्रयोग के कई उदाहरण चलाएं - प्रत्येक संगठन के लिए एक उदाहरण)।

मैं सर्वर पर चल रहे प्रत्येक इंस्टेंस के लिए एक विश्वसनीय API प्रदान करूंगा, ताकि एक पतली क्लाइंट का उपयोग सर्वर मशीन पर चल रहे इंस्टेंस द्वारा प्रदान की जाने वाली सेवाओं तक पहुंचने के लिए किया जा सके।

यहाँ एक सरल योजनाबद्ध है कि रिश्तों को दर्शाता है है:

सर्वर 1 -> एन डेटाबेस (प्रत्येक संगठन है एक डेटाबेस)

संगठन 1 -> एन उपयोगकर्ताओं

मेरा प्रश्न क्लाइंट से रीस्टफुल अनुरोधों को 'प्रत्यक्ष' करने के तरीके से संबंधित है, उस संगठन के लिए उपयोगकर्ताओं से अनुरोधों को संभालने के उपयुक्त उदाहरण के लिए।

अधिक विशेष रूप से, जब मुझे एक विश्वसनीय अनुरोध प्राप्त होता है, तो यह एक उपयोगकर्ता (जो किसी संगठन से संबंधित है) से होगा, उचित आवेदन उदाहरण के अनुरोध के लिए 'मार्ग' कैसे (या वास्तव में, सबसे अच्छा तरीका क्या है) सर्वर पर चल रहा है?

उत्तर

1

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

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

+0

सबसे व्यावहारिक उत्तर, मुझे लगता है :) – morpheous

0

यह वास्तव में एक बहुत कठिन सवाल है; सिर्फ इसलिए कि कई संभावित उत्तर हैं, और कौन सा सबसे अच्छा है केवल आपके और आपके पर्यावरण द्वारा निर्धारित किया जा सकता है।

मैं ऐसा करने के लिए सी ++ में एक अपाचे मॉड्यूल लिखूंगा। this book का उपयोग करके, मैंने बहुत ही कुशल मॉड्यूल लिखना शुरू कर दिया।

आपको अधिक समाधान देने में सक्षम होने के लिए (शायद बस एक स्क्विड प्रॉक्सी स्थापित कर सकता है?), आपको यह निर्दिष्ट करने की आवश्यकता होगी कि आप क्लाइंट को रीडायरेक्ट करने के लिए किस सर्वर को आवश्यकता है, यह निर्धारित करने में सक्षम होंगे। यदि आप इसे आईपी द्वारा कर सकते हैं, हालांकि एक जीईटी पैरा, हालांकि एक पोस्ट एक्सएमएल पैरा (जैसे SOAP)। आदि

+0

मुझे स्वीकार करना होगा, मुझे अपाचे मॉड्यूल लिखने के विचार से बहकाया गया था - लेकिन अहमद ने मुझे वास्तविकता में वापस लाया :) – morpheous

+0

@ मॉर्फीस मैंने इसे पहले ही किया था, और यह बुरा नहीं था। मेरे ऐप के आधार के रूप में एक ट्यूटोरियल का उपयोग करके, मैं आधा दिन में चला रहा था। तब से, मुझे कभी वापस जाना नहीं था और किसी भी अपाचे विशिष्ट सामान को छूना नहीं था। – Gianni

0

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

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

दृष्टिकोण जितना चाहें उतना गूढ़ हो सकता है। उदाहरण के लिए यदि आपका विरासत सॉफ्टवेयर सामान्य इंटेल आर्किटेक्चर पर चलता है और आपके पास हार्डवेयर क्षमता है तो वीएम समाधान हैं, जहां आप एक पतली आभासी मशीन बनाने में सक्षम होना चाहिए, जो सॉफ़्टवेयर का एक उदाहरण चला रहा है और मल्टीप्लेक्सर को उन सभी को बांधने के लिए सक्षम होना चाहिए।

यदि दूसरी तरफ आप एचपीयूएक्स की तरह कुछ चल रहे हैं :-) अन्य दृष्टिकोण भी हैं। आप थोड़ा और विस्तार कैसे देते हैं?

अहमद।

1

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

+0

सच है, लेकिन एपीआई बदलना यद्यपि हल करने के लिए एक छोटी सी सरल समस्या है। – morpheous

संबंधित मुद्दे