2017-07-02 17 views
13

माइक्रोसर्विसेज आर्किटेक्चर का सुझाव है कि प्रत्येक सेवा को अपना डेटा संभालना चाहिए। इसलिए किसी भी सेवा (सेवा ए) अन्य सेवा (सेवा बी) के स्वामित्व वाले डेटा पर निर्भर किसी भी डेटा को सीधे डीबी कॉल करके नहीं बल्कि दूसरी सेवा (सेवा बी) द्वारा प्रदान की गई एपीआई के माध्यम से एक्सेस करनी चाहिए।माइक्रोस्कोर्सेस: विदेशी कुंजी रिश्तों को कैसे संभालना है

तो माइक्रोसॉर्विसेज सर्वोत्तम प्रथाओं को विदेशी कुंजी बाधाओं की जांच करने का सुझाव देता है।

उदाहरण: मैं उत्पादों के लिए डिलीवरी फीचर (माइक्रोस्कोस 1) विकसित कर रहा हूं और कुछ उत्पाद केवल कुछ ही स्थानों पर वितरित किए जा सकते हैं जैसा कि केवल उत्पाद माइक्रो सेवा (mircoservice 2) के लिए उपलब्ध उत्पादों तालिका में उल्लिखित है।

मैं कैसे सुनिश्चित कर सकता हूं कि माइक्रोस्कोस 1 (यानी डिलीवरी सुविधा) एक असुरक्षित स्थान पर ऑर्डर नहीं लेती है। मेरे पास यह सवाल है क्योंकि डिलीवरी सुविधा सीधे उत्पाद डेटाबेस तक नहीं पहुंच सकती है, इसलिए डिलिवरी डेटा बेस में डिलीवरी ऑर्डर होने पर डीबी स्तर पर कोई बाधा लागू नहीं होती है (यह देखने के लिए कोई जांच संभव नहीं है कि कोई विदेशी कुंजी मिलान उत्पाद डेटाबेस में मौजूद है या नहीं या टेबल)।

उत्तर

8

एकाधिक माइक्रोस्कोप के लिए साझा डेटाबेस का उपयोग करना संभव है। आप इस लिंक में माइक्रोस्कोप के डेटा प्रबंधन के लिए पैटर्न पा सकते हैं: http://microservices.io/patterns/data/database-per-service.html। वैसे, यह सूक्ष्मजीव वास्तुकला के लिए एक बहुत ही उपयोगी ब्लॉग है।

अपने मामले में, आप प्रति सेवा पैटर्न डेटाबेस का उपयोग करना पसंद करते हैं। यह सूक्ष्मजीवों को अधिक स्वायत्त बनाता है। इस स्थिति में, आपको अपने कुछ डेटा को एकाधिक माइक्रोस्कोप के बीच डुप्लिकेट करना चाहिए। आप microservices के बीच एपीआई कॉल के साथ डेटा साझा कर सकते हैं या आप इसे एसिंक मैसेजिंग के साथ साझा कर सकते हैं। यह आपके बुनियादी ढांचे और डेटा के परिवर्तन की आवृत्ति पर निर्भर करता है। यदि यह अक्सर बदल नहीं रहा है, तो आपको एसिंक घटनाओं के साथ डेटा डुप्लिकेट करना चाहिए।

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

एपीआई लागू करने के लिए शायद आसान हो सकता है लेकिन इस विकल्प में नेटवर्क लागत अधिक है। जब आप एपीआई कॉल कर रहे हों तो आपकी सेवाएं कम स्वायत्त हैं। क्योंकि, आपके उदाहरण में जब उत्पाद सेवा कम हो जाती है, तो वितरण सेवा अपना काम नहीं कर सकती है। यदि आप एसिंक संदेश के साथ डेटा डुप्लिकेट करते हैं, तो वितरण करने के लिए आवश्यक डेटा डिलिवरी माइक्रोस्कोस के डेटाबेस में स्थित है। जब उत्पाद सेवा काम नहीं कर रही है तो आप डिलीवरी कर पाएंगे।

+0

महान जवाब में मदद करता है। मैं एपीआई कॉल का उपयोग करता हूं, लेकिन इसे किसी अन्य सेवा से डेटा की सॉर्टिंग और पेजिनेशन की भी आवश्यकता होती है। क्या आप उस मामले के लिए सबसे अच्छा तरीका जानते हैं? – tranceholic

+0

आपको पेजिंग से संबंधित पैरामीटर जोड़ना चाहिए और अपने एपीआई को सॉर्ट करना चाहिए। फिर सही क्रम के साथ सही पृष्ठ प्राप्त करने की ज़िम्मेदारी एपीआई के उपभोक्ताओं द्वारा ली जाएगी। ग्राफिकल जैसे एपीआई को परिभाषित करने के लिए उपयोग की जाने वाली कुछ तकनीकें हैं। जहां तक ​​मुझे पता है, उन प्रौद्योगिकियों में पहले से ही सॉर्टिंग और पेजिनेशन विशेषताएं हैं। यदि आप इस तरह की तकनीक का उपयोग नहीं कर रहे हैं, तो आप बस अपने क्लाइंट से पैरामीटर प्राप्त कर सकते हैं और पृष्ठों के साथ सॉर्ट किए गए डेटा को वापस करने के लिए उनका उपयोग कर सकते हैं। –

4

कम युग्मन प्राप्त करने के लिए अपना कोड वितरित करते समय, आप संसाधन साझाकरण से बचना चाहते हैं, और डेटा एक संसाधन है जिसे आप साझा करना चाहते हैं।

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

रेफरेंसियल अखंडता का परिचय युग्मन को पुन: उत्पन्न करेगा, इसके बजाय आप अपनी प्राथमिक कुंजी के लिए गइड्स की तरह कुछ उपयोग करना चाहते हैं, वे ऑब्जेक्ट के निर्माता द्वारा बनाए जाएंगे, शेष सभी स्थिर स्थिरता के प्रबंधन के बारे में हैं।

उदी दहन के talk in NDC Oslo for a more details

आशा पर एक नजर डालें इस

संबंधित मुद्दे