इवेंट राइटिंग के लिए इवेंट सोर्सिंग दुर्लभ है?


9

मैं इवेंट सोर्सिंग पर पढ़ रहा हूं और खुद से यह पूछना बंद नहीं कर सकता कि क्या यह केवल विदेशी परिस्थितियों में समझ में आता है जहां बहुत दुर्लभ हैं या सैन्य-ग्रेड ऑडिटिंग की आवश्यकता होती है।

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

तो मुझे क्या याद आ रही है? क्या घटना की स्थिति से राज्य बहाल करना आमतौर पर भी किया जाता है? या विचार शायद ही ऐसा करने के लिए है और इसके बजाय सामान्य संचालन के लिए पूरी तरह से एक अलग भंडारण का उपयोग करें (यानी CQRS से क्वेरी भंडारण का उपयोग करें), और केवल असाधारण मामलों (जैसे प्रतिकृति, ऑडिटिंग आदि) में घटनाओं से पुनर्स्थापित करें ?

जवाबों:


6

तो मुझे क्या याद आ रही है?

अंदाजा लगाना।

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

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

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

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

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

क्या घटना की स्थिति से राज्य बहाल करना आमतौर पर भी किया जाता है?

हाँ यही है। CQRS के उदाहरणों में सामान्य रूप से जो दिखाया गया है, वह यह है कि एप्लीकेशन लेयर, यह सुनिश्चित करने के बाद कि सबमिट कमांड अच्छी तरह से बनाई गई है, एप्लिकेशन लेयर डोमेन ऑब्जेक्ट को रिपॉजिटरी से लोड करेगा, जहां लोड एक डिफॉल्ट कंस्ट्रक्टर है, जिसके बाद इवेंट स्ट्रीम का रिप्ले होता है (या समकक्ष, घटनाओं की एक सूची के साथ एक कारखाने के लिए एक कॉल)।

दो अन्य, विरोधाभासी विचार।

  1. रिपॉजिटरी इंटरफेस के पीछे कैश हो सकता है
  2. कैश अमान्यकरण दो कठिन समस्याओं में से एक है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.