पिछले वर्ष के बेहतर हिस्से के लिए मेरी कंपनी एक मोनोलिथ को टुकड़ा कर रही है और (माइक्रो) सेवा आर्किटेक्चर के सिद्धांतों पर नए उत्पादों का निर्माण कर रही है। यह सब ठीक है और यूआई और बैकएंड तर्क को अलग रखने और निर्भरताओं की मात्रा को कम करने में हमें बहुत लचीलापन देता है।सेवा उन्मुख आर्किटेक्चर में बिजनेस डेटा पूछताछ/रिपोर्टिंग
लेकिन!
हमारे व्यापार का एक महत्वपूर्ण हिस्सा है जिसके परिणामस्वरूप, बढ़ती हुई सिरदर्द है, अर्थात् रिपोर्टिंग।
जब से हम सुनिश्चित करें कि कोई डेटा प्रतिकृति सेवाओं के बीच (और व्यापार को बांटने तर्क) है कि वहाँ बनाने, तो प्रत्येक सेवा का स्वयं का डेटा जानता है और अगर एक और सेवा वास्तव में है कि डेटा के लिए एक संदर्भ रखने की जरूरत है, वे इसे पहचान पत्र के माध्यम से करते हैं (इकाई लिंकिंग, अनिवार्य रूप से)। और अन्यथा यह महान है, रिपोर्टिंग के लिए यह बहुत अच्छा नहीं है।
हमारे व्यापार को अक्सर हमारे ग्राहकों के साथ होने वाले विशिष्ट उदाहरणों के बारे में विज्ञापन-प्रसार रिपोर्ट बनाने की आवश्यकता होती है। 'पुराने दिनों' में आपने एक साधारण एसक्यूएल क्वेरी बनाई जो कुछ डेटाबेस टेबल में शामिल हो गई और जो कुछ भी आपको चाहिए, पूछताछ की गई, लेकिन decoupled सेवाओं के साथ यह संभव नहीं है। और यह एक समस्या है क्योंकि व्यवसाय इसे देखता है।
मैं व्यक्तिगत रूप से पिछली छोर में रिपोर्टिंग उद्देश्यों के लिए डेटा प्रतिकृति का प्रशंसक नहीं हूं, क्योंकि इसमें एक दुःस्वप्न में वृद्धि करने की एक और प्रवृत्ति हो सकती है (जो कि यह हमारे विरासत मोनोलिथ में भी है)। तो यह समस्या वास्तव में आधुनिक माइक्रोस्कोप बनाम विरासत monoliths के बारे में नहीं है, लेकिन सामान्य रूप से डेटा निर्भरताओं के बारे में है।
क्या आपको इस तरह के मुद्दों का सामना करना पड़ा है और यदि हां, तो आपने इसे कैसे हल किया?
संपादित करें:
हम कुछ संभावित समाधान कैसे इस को हल करने के घर में चर्चा कर दिया गया है, लेकिन उनमें से कोई वास्तव में अच्छा कर रहे हैं और मैं इस सवाल का जवाब मैं देख रहा हूँ मिल नहीं किया है अभी तक कि हल करती है बड़े पैमाने पर मुद्दों।
अच्छी पुरानी प्रतिकृति-सबकुछ-और-चलो-बीआई-लोग-आंकड़े-इसे-अभी भी इस दिन उपयोग किया जाता है। पुराने मोनोलिथ टाइम्स से बीआई/डेटा-वेयरहाउस टीम ने सभी डेटाबेसों के डुप्लिकेट किए हैं, लेकिन एक ही अभ्यास अधिक असुविधाजनक है, लेकिन अभी भी डेटाबेस के उपयोग करने वाले सभी सूक्ष्मजीवों के लिए इस दिन किया जाता है। यह विभिन्न कारणों से अच्छा नहीं है और साझा सैंडबॉक्स कैंसर के साथ आता है जो आप उम्मीद कर सकते हैं।
एक अलग माइक्रोस्कोस या सूक्ष्मजीवों का एक सेट बनाएं जो विशिष्ट रिपोर्ट लाने के लिए हैं। उनमें से प्रत्येक माइक्रोस्कोप सेट करने के लिए कनेक्ट होता है जो प्रासंगिक डेटा रखता है और रिपोर्ट को अपेक्षित बनाता है। यह हालांकि कड़ा युग्मन प्रस्तुत करता है और बड़े डेटासेट के साथ अविश्वसनीय रूप से जटिल और धीमा हो सकता है।
एक अलग माइक्रोस्कोस या माइक्रोसर्विसेज का एक सेट बनाएं जिसमें प्रत्येक पृष्ठभूमि में पृष्ठभूमि में अन्य डेटाबेस से दोहराए गए डेटाबेस हैं। यह समस्याग्रस्त है क्योंकि टीम डेटाबेस जोड़े जा रहे हैं और डेटा को सीधे दोहराया गया है और उपयोग किए जा रहे डेटाबेस की तकनीक पर एक मजबूत निर्भरता है।
क्या प्रत्येक सेवा RabbitMQ को एक ईवेंट भेजती है कि बीआई सेवाएं उठाएगी और फिर आवश्यक होने पर अतिरिक्त डेटा प्राप्त करेंगी। यह मेरे लिए अब तक का सबसे अच्छा लगता है, लेकिन अब तक सबसे जटिल है क्योंकि सभी सेवाओं को प्रासंगिक डेटा प्रकाशित करना शुरू करना है। यह वही है जो मैं वर्तमान समय में, एक बहुत ही अमूर्त स्तर से, व्यक्तिगत रूप से चुनता हूं।
* यूआई और बैकएंड तर्क अलग रखना * - यही कारण है कि आप SOA करते हैं। –
https://www.infoq.com/articles/BI-and-SOA - –
की सहायता कर सकता है [एसओए (बिजनेस इंटेलिजेंस एंड सर्विस ओरिएंटेड आर्किटेक्चर) में रिपोर्ट्स [संभावित रूप से डुप्लिकेट] (http://stackoverflow.com/questions/9538710/रिपोर्ट-इन-सो-बिजनेस-इंटेलिजेंस-सर्विस-उन्मुख-आर्किटेक्चर) –