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