2011-06-09 15 views
5

कंपनी की आंतरिक प्रणाली का बैकएंड जटिल हो रहा है और मैं भारी मोनोलिथिक सिस्टम की बजाय एसओए स्टाइल आर्किटेक्चर करने का विचार तलाशना चाहता हूं। मैं कहां से शुरू करूं?कोल्डफ्यूजन में एसओए स्टाइल आर्किटेक्चर?

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

डीबी परत के बारे में कैसे? क्या उन्हें एक विशाल डीबी साझा करना चाहिए या क्या उन्हें चीजों को अपने तरीके से स्टोर करना चाहिए?

धन्यवाद

उत्तर

1

सबसे पहले, आप क्या करने की कोशिश कर रहे हैं? एसओए उन प्रणालियों के लिए उपयोगी है जिन्हें अपेक्षाकृत आसानी से बदलने और नए प्रोग्रामर के लिए सुलभ होने की आवश्यकता है। दूसरी तरफ आप एक प्रदर्शन ट्रेडऑफ करते हैं क्योंकि आप अलग-अलग दृढ़ता को समाप्त करते हैं - ताकि डेटाबेस की बजाय एप्लिकेशन सर्वर पर इसकी बातचीत हो। आम तौर पर यह प्रदर्शन ट्रेडऑफ एक गैर-मुद्दा है, लेकिन यदि आप उच्च लेनदेन प्रणाली के माध्यम से काम कर रहे हैं तो आपको डेटाबेस में कुछ एल्गोरिदम डालकर समझौता करने की आवश्यकता हो सकती है और वे आपकी सेवाओं के टूटने का उल्लंघन कर सकते हैं।

तो अगर आप पेशेवरों चाहते हैं और विशेष रूप से विपक्ष के साथ संबंध नहीं हैं, विषय पर कुछ लागू किताबें पढ़ने से शुरू:

  • मार्टिन फाउलर की Patterns of Enterprise Application Architecture - Service Layer पैटर्न के लिए विशेष रूप से भुगतान ध्यान में
  • Domain Driven Design Quickly एक ही नाम की "(अनिवार्य रूप से आईएमओ) लंबी पुस्तक" लम्बे "की एक संगत संस्करण, जो आपको सेवाओं को परिभाषित करने और प्रत्येक के नीचे ऑब्जेक्ट पदानुक्रम के बारे में सोचने में मदद करता है।

क्या आप के प्रति रुझान करना चाहते हैं उच्च स्तर सेवा वस्तुओं जिसका रिश्तों एक service locator कंटेनर के माध्यम से dependency injection के माध्यम से प्रबंधित कर रहे हैं के साथ एक डिजाइन है। कोल्डफ्यूजन के मामले में ColdSpring एक उदाहरण है। यह object mocking के लिए अनुमति देता है ताकि आप आसानी से इकाई परीक्षण कर सकें। उदाहरण के लिए, यदि सेवाएं अन्य सर्वरों पर रहती हैं, तो स्थानीय स्तर पर सेवा ऑब्जेक्ट्स होती हैं जो निर्भरता के रूप में पारित होने वाली प्रॉक्सी होती हैं। इन प्रॉक्सी का परीक्षण करने के लिए मजाक किया गया है इसलिए उन्हें दूरस्थ सर्वर से बात करने की ज़रूरत नहीं है।

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

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

0

मैं अवधि एसओए अलग सेट अप का एक बहुत का वर्णन किया जाता सुना है तो मुझे यकीन है कि अगर वहाँ एक "सही" जवाब है, लेकिन मूल अवधारणा सेवा परत है नहीं कर रहा हूँ। बड़ा फायदा यह है कि डीबी परत के बारे में आपके अंतिम प्रश्न का उत्तर उपर्युक्त है। एक बार सेवा परत में भंडारण/दृढ़ता को संभालने के लिए तर्क अलग हो जाता है और एप्लिकेशन केवल इस परत में कॉल करते हैं, तो कुछ डेटा को अन्य सर्वरों पर ले जाना बहुत आसान हो जाता है या आवश्यकता होने पर उन्हें एक साथ समेकित करना बहुत आसान हो जाता है। आप कुछ सेवाओं को भी समाप्त कर सकते हैं जो सिर्फ अन्य सेवाओं को बुलाते हैं जिन्हें अक्सर service facade के रूप में जाना जाता है।

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

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

+1

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

+0

@ ब्रूक्स-बिलसन लेकिन "वेब-सेवाओं का उपयोग करने के लिए पॉइंट-टू-पॉइंट आर्किटेक्चर" को पहले से ही एसओए आर्किटेक्चर के रूप में योग्यता प्राप्त किया जा सकता है, सही? – Henry

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