मैंने हाल ही में CQRS / ES में गोता लगाना शुरू किया क्योंकि मुझे इसे काम पर लागू करने की आवश्यकता हो सकती है। यह हमारे मामले में बहुत आशाजनक है, क्योंकि यह बहुत सारी समस्याओं का समाधान करेगा।
मैंने एक ईएस / सीक्यूआरएस ऐप को सरलीकृत बैंकिंग उपयोग मामले (पैसा वापस लेने) के संदर्भ में कैसे देखा जाना चाहिए, इस पर अपनी कठिन समझ को छोड़ दिया।
अगर व्यक्ति A कुछ पैसे निकालता है तो बस योग करने के लिए:
- एक आदेश जारी किया जाता है
- आदेश सत्यापन / सत्यापन के लिए सौंप दिया जाता है
- यदि ईवेंट सफल होता है, तो ईवेंट इवेंट स्टोर में धकेल दिया जाता है
- एक एग्रीगेटर एग्रीगेट पर संशोधन लागू करने के लिए घटना को समाप्त करता है
जो मैंने समझा था, घटना लॉग सत्य का स्रोत है, क्योंकि यह FACTS का लॉग है, हम इसके बाद किसी भी प्रक्षेपण को प्राप्त कर सकते हैं।
अब, जो मुझे समझ नहीं आ रहा है, इस भव्य योजना में, इस मामले में क्या होता है:
- नियम: एक संतुलन नकारात्मक नहीं हो सकता
- व्यक्ति A में 100e का संतुलन है
- व्यक्ति A, 100e का विथड्रॉसमंड जारी करता है
- सत्यापन पास और 100e घटना का MoneyWithdrewEvent उत्सर्जित होता है
- इस बीच, व्यक्ति ए 100e का एक और विदड्रॉफ़ंड जारी करता है
- पहले MoneyWithdrewEvent को अभी तक एकत्र नहीं किया गया था, इसलिए सत्यापन पास हो गया है, क्योंकि कुल के खिलाफ सत्यापन जांच (जो अभी तक अपडेट नहीं की गई है)
- 100e का MoneyWithdrewEvent दूसरी बार उत्सर्जित होता है
==> हम एक संतुलन की असंगत स्थिति में हैं -100e पर जा रहे हैं और लॉग में 2 MoneyWithdrewEvent शामिल हैं
जैसा कि मैं समझता हूँ कि इस समस्या से निपटने के लिए कई रणनीतियाँ हैं:
- a) ईवेंट स्टोर में ईवेंट के साथ एग्रीगेट वर्जन आईडी डालते हैं ताकि अगर मॉडिफिकेशन पर कोई बेमेल हो तो कुछ भी न हो
- बी) कुछ लॉकिंग रणनीतियों का उपयोग करें, जिसका अर्थ है कि सत्यापन परत को किसी तरह एक बनाना है
रणनीतियों से संबंधित प्रश्न:
- a) इस मामले में, इवेंट लॉग अब सत्य का स्रोत नहीं है, इससे कैसे निपटें? इसके अलावा, हम ग्राहक के पास वापस लौट आए, जबकि निकासी की अनुमति देना पूरी तरह से गलत था, क्या इस मामले में ताले का उपयोग करना बेहतर है?
- बी) ताले == गतिरोध, क्या आपके पास सर्वोत्तम प्रथाओं के बारे में कोई अंतर्दृष्टि है?
कुल मिलाकर, मेरी समझ सही है कि कैसे संगामिति को संभालना है?
नोट: मैं समझता हूं कि एक ही व्यक्ति को इतने कम समय में दो बार पैसा निकालना खिड़की में असंभव है, लेकिन मैंने एक सरल उदाहरण लिया, विवरण में खो जाने के लिए नहीं