मैंने अभी यह लेख पढ़ा है , और मैं उलझन में हूँ।
चलो एक ही डेटाबेस को साझा करते हुए , "कार्यकर्ता" के रूप में 1 वेबएप और 1 अलग-अलग एप्लिकेशन की कल्पना करते हैं ।
ओह, मैंने कहा "साझा करना" .. लेकिन लेख किस बारे में चेतावनी देता है? :
चौथा, अनुप्रयोगों (या सेवाओं) के बीच एक डेटाबेस साझा करना एक बुरी बात है। यह सिर्फ वहाँ साझा करने के लिए अनाकार साझा राज्य को लुभाने के लिए है और इससे पहले कि आप जानते हैं कि आपके पास एक बहुत ही शानदार राक्षस होगा।
=> असहमत। कुछ मामले हैं जहां अलग-अलग अनुप्रयोग अभी भी एक ही इकाई का हिस्सा हैं, और इसलिए, "युग्मन मुद्दा" की धारणा इस मामले में कोई मतलब नहीं है।
चलो जारी रखें: वेब डोमेन क्लाइंट HTTP अनुरोधों को संभालता है और किसी भी समय कुछ एग्रीगेट (डीडीडी अवधि) को अपडेट कर सकता है, जो संबंधित डोमेन घटनाओं को उत्पन्न करता है।
कार्यकर्ता का लक्ष्य आवश्यक कार्य को संसाधित करके उन डोमेन घटनाओं को संभालना होगा।
मुद्दा ये है:
ईवेंट डेटा को कार्यकर्ता को कैसे पास किया जाना चाहिए?
पहला उपाय, जैसा कि पढ़ा गया लेख बढ़ावा देता है, एक महान संदेश-उन्मुख मिडलवेयर होने के नाते, RabbitMQ का उपयोग करना होगा।
वर्कफ़्लो सरल होगा:
किसी भी समय वेब dyno एक घटना उत्पन्न करता है, यह इसे RabbitMQ के माध्यम से प्रकाशित करता है, जो कार्यकर्ता को खिलाता है।
दोष यह होगा कि कुछ भी संभावित भेजने विफलताओं से निपटने के बिना, कुल अद्यतन और घटना के प्रकाशन के बीच तत्काल स्थिरता की गारंटी नहीं देता है ... या हार्डवेयर मुद्दे; यह एक और मुख्य मुद्दा है।
उदाहरण: यह संभव होगा कि कोई ईवेंट समग्र अद्यतन की सफलता के बिना प्रकाशित किया गया था ... जिसके परिणामस्वरूप एक ईवेंट डोमेन मॉडल के गलत प्रतिनिधित्व का प्रतिनिधित्व करता है।
आप तर्क दे सकते हैं कि वैश्विक XA (दो-चरण प्रतिबद्ध) मौजूद है, लेकिन यह एक समाधान नहीं है जो सभी डेटाबेस या मिडलवेर्स को फिट करता है।
तो इस तात्कालिक स्थिरता को सुनिश्चित करने के लिए एक अच्छा समाधान क्या हो सकता है? :
IMO, डेटाबेस में ईवेंट को संग्रहीत करते हुए, कुल अद्यतन के समान स्थानीय लेनदेन में।
एक साधारण एसिंक्रोनस शेड्यूलर बनाया जाएगा और डेटाबेस से वर्तमान अप्रकाशित घटनाओं को क्वेरी करने के लिए जिम्मेदार होगा और उन्हें RabbitMQ पर भेज देगा, जो बदले में कार्यकर्ता को आबाद करता है।
लेकिन वेब साइड में और रास्ते में एक अतिरिक्त अनुसूचक की आवश्यकता क्यों है: इस मामले में RabbitMQ की आवश्यकता क्यों है?
इस समाधान के द्वारा, यह तार्किक रूप से प्रकट होता है, कि RabbitMQ अनावश्यक हो सकता है, खासकर क्योंकि डेटाबेस साझा किया गया है।
दरअसल, जो भी हो, हमने देखा कि तात्कालिक संगतता में डेटाबेस से एक मतदान शामिल है।
इस प्रकार, कार्यकर्ता इस मतदान के लिए सीधे जिम्मेदार क्यों नहीं होंगे?
इसलिए, मुझे आश्चर्य है कि संदेश-उन्मुख मिडलवेयर को बढ़ावा देते हुए वेब पर इतने सारे लेख शायद ही कतई डेटाबेस की आलोचना करते हैं।
लेख का अंश:
सरल, नौकरी के लिए सही उपकरण का उपयोग करें: यह परिदृश्य एक संदेश प्रणाली के लिए रो रहा है। यह ऊपर वर्णित सभी समस्याओं को हल करता है; कोई अधिक मतदान, कुशल संदेश वितरण, कतारों से पूर्ण संदेश को साफ करने की आवश्यकता नहीं, और कोई साझा स्थिति नहीं।
और तत्काल संगति, अनदेखा?
संक्षेप में, यह वास्तव में लगता है कि जो भी मामला है, जिसका अर्थ डेटाबेस साझा है या नहीं, हमें डेटाबेस मतदान की आवश्यकता है ।
क्या मुझे कुछ आलोचनात्मक धारणाएँ याद थीं?
धन्यवाद