माइक्रोसर्विस के लिए सबसे अधिक स्वीकार की जाने वाली लेनदेन रणनीति क्या है


80

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

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

क्या कोई दूसरा, स्वीकृत विकल्प है? इन दोनों को अपने नुकसान होने लगते हैं। पहले एक गतिरोध और अन्य मुद्दों का एक समूह पैदा कर सकता है, दूसरा डेटा असंगति हो सकता है। क्या बेहतर विकल्प हैं?


बस यह सुनिश्चित करने के लिए कि क्या एक ही समय में कई ग्राहकों द्वारा उपयोग किए जाने वाले माइक्रोसर्विस हैं या एक समय में सिर्फ एक?
मार्सेल

2
मैं इस सवाल को अज्ञेय, मार्सेल से पूछना चाह रहा था। लेकिन मान लेते हैं कि हम एक प्रणाली का उपयोग कर रहे हैं जो उस दोनों को करने के लिए पर्याप्त है, और हम एक वास्तुकला चाहते हैं जो दोनों का समर्थन करती है।
क्रिस्टोफ़

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

10
आप हमेशा मेरे सवाल को कम "खराब शब्द", जेफ फिशर बनाने के लिए बदलने की कोशिश कर सकते हैं।
क्रिस्टोफ

यह प्रश्न और चर्चा एसओ पर इस अन्य प्रश्न से निकटता से संबंधित है ।
पाउलो मर्सन

जवाबों:


42

सामान्य दृष्टिकोण यह है कि उन माइक्रोसर्विसेज को जितना संभव हो उतना अलग-थलग करें - उन्हें एकल इकाइयों के रूप में मानें। फिर लेन-देन को सेवा के संदर्भ में एक पूरे के रूप में विकसित किया जा सकता है (यानी सामान्य डीबी लेनदेन का हिस्सा नहीं है, हालांकि आप अभी भी सेवा में आंतरिक लेनदेन कर सकते हैं)।

सोचें कि लेन-देन कैसे होता है और आपकी सेवाओं के लिए किस तरह की समझदारी है, आप एक रोलबैक तंत्र को लागू कर सकते हैं जो मूल ऑपरेशन को अन-ऑवर करता है, या एक 2-चरण कमिट सिस्टम जो वास्तविक संचालन के लिए मूल ऑपरेशन को सुरक्षित रखता है। बेशक, इन दोनों प्रणालियों का मतलब है कि आप अपना स्वयं का कार्यान्वयन कर रहे हैं, लेकिन फिर आप पहले से ही अपने माइक्रोसॉफ़्ट को लागू कर रहे हैं।

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


5
आप मान रहे हैं कि धनवापसी कभी भी विफल हो सकती है।
संजीव कुमार दांगी

9
@SanjeevKumarDangi इसकी संभावना कम है और अगर यह विफल हो जाता है, तो भी इसे आसानी से नियंत्रित किया जा सकता है क्योंकि होल्डिंग खाता और वास्तविक खाता बैंक के नियंत्रण में होता है।
गृध्रपैल

30

मुझे लगता है कि मानक ज्ञान का लेन-देन क्रॉस क्रॉसोसर्विस सीमाओं से कभी नहीं होता है। यदि डेटा के किसी भी सेट को वास्तव में दूसरे के साथ परमाणु रूप से सुसंगत होना चाहिए, तो वे दो चीजें एक साथ होती हैं।

यह एक कारण है कि किसी सिस्टम को सेवाओं में विभाजित करना बहुत कठिन है जब तक कि आपने इसे पूरी तरह से डिज़ाइन नहीं किया है। आधुनिक दुनिया में कौन सा शायद इसका मतलब लिखा है ...


37
इस तरह के दृष्टिकोण से अंत में सभी माइक्रोसर्विसेज को एकल अखंड अनुप्रयोग में विलय करने में मदद मिल सकती है।
स्लाव फोमिन II

4
यह सही तरीका है। यह वास्तव में सरल है: यदि आपको सेवाओं में लेन-देन की आवश्यकता है, तो आपकी सेवाएं गलत हैं: उन्हें फिर से डिज़ाइन करें! @SlavaFominII जो आप कहते हैं वह केवल सच है यदि आप नहीं जानते कि एक माइक्रोसैसिन प्रणाली कैसे डिजाइन करें। यदि आप अपने आप को माइक्रोसिस्टर्स के दृष्टिकोण से लड़ते हुए पाते हैं, तो ऐसा न करें, आपका मोनोलिथ एक बुरे माइक्रोसेर डिजाइन से बेहतर होगा। केवल तभी जब आपको सही सेवा सीमाएं मिलें, जब आपको सेवाओं में मोनोलिथ को विभाजित करना चाहिए। अन्यथा माइक्रोसर्विसेज का उपयोग करना सही वास्तुशिल्प विकल्प नहीं है, यह सिर्फ प्रचार के बाद है।
फ्रांसेक कॉस्टेल्स

@FrancescCastells यदि हमारी सेवाओं को अन्य सेवाओं के बीच लेन-देन की आवश्यकता होती है, तो क्या आपका मतलब है कि हमें बंधे हुए संदर्भों को अनदेखा करना चाहिए और अपनी सेवाओं को इस तरह से मॉडल करना चाहिए कि यह एकल लेनदेन के रूप में समाप्त हो जाए? मैं microservices में एक नौसिखिया हूँ, अभी भी मेरे सवाल को माफ कर रहा हूँ अगर यह अनुभवहीन लगता है ....: D: D
Bilbo Baggins

@BilboBaggins मेरा मतलब है कि बंधे हुए संदर्भों को अनदेखा करना। परिभाषा के अनुसार लेन-देन एक सीमित संदर्भ में होता है और उनमें से कई में नहीं। इसलिए, यदि आप अपने माइक्रोफ़ोन को अपने बंधे हुए संदर्भों के साथ सही ढंग से डिज़ाइन करते हैं, तो आपके लेनदेन को कई सेवाओं का विस्तार नहीं करना चाहिए। ध्यान दें, कुछ समय, जो आपको चाहिए वह लेन-देन नहीं है, लेकिन जब चीजें सही ढंग से नहीं चलती हैं, तो अंतिम स्थिरता और उचित क्षतिपूर्ति कार्यों की बेहतर हैंडलिंग।
फ्रांसेक Castells

मुझे आपकी बात नहीं मिल रही है, क्या ऐसा मौका है कि हम इस पर चर्चा कर सकें?
बिल्बो बैगिग्ज

17

मुझे लगता है कि यदि आपके आवेदन में स्थिरता एक मजबूत आवश्यकता है, तो आपको खुद से पूछना चाहिए कि क्या माइक्रोसॉफ़्ट बेहतर दृष्टिकोण है। जैसे मार्टिन फाउलर कहते हैं :

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

लेकिन शायद आपके मामले में, आप उपलब्धता की स्थिति में संगति का त्याग कर सकते हैं

व्यावसायिक प्रक्रियाएँ अक्सर आपके विचार से असंगतताओं के प्रति अधिक सहिष्णु होती हैं क्योंकि व्यवसाय अक्सर उपलब्धता को अधिक पुरस्कार देते हैं।

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


1
वितरित व्यापार लेनदेन में, कभी-कभी वर्कफ़्लो इंजन या ध्यान से डिज़ाइन की गई कतार जैसी ऑर्केस्ट्रेशन परत को जोड़कर स्थिरता को संबोधित किया जाता है। यह परत सभी दो चरण को संभालती है और वापस रोलिंग करती है, और माइक्रो सर्वर विशिष्ट व्यवसाय तर्क पर ध्यान केंद्रित करने की अनुमति देता है। लेकिन CAP में वापस, उपलब्धता और स्थिरता में निवेश प्रदर्शन को शिकार बनाता है। ओईओपी में आपके व्यवसाय से जुड़े डिकॉउंडेड वर्गों की तुलना में माइक्रोसर्विसेस कैसे करते हैं?
ग्रेग

आप सुसंगत FWIW
f0ster

1
+1। मुझे अक्सर आश्चर्य होता है कि एक माइक्रोसर्विसेज के संदर्भ में लेन-देन बिल्कुल क्यों वांछित है, यदि डेटा के सभी 'पुल' विचारों को भौतिक विचारों के रूप में लागू किया जा सकता है। उदाहरण के लिए, यदि एक माइक्रोसेवक एक खाते से दूसरे खाते में और दूसरे खाते में क्रेडिट करता है, तो शेष राशि के विचार केवल क्रेडिट और डेबिट के जोड़े पर विचार करेंगे, जहां बेजोड़ क्रेडिट और डेबिट अभी भी भौतिक दृष्टि से बफ़र्स में होंगे।
प्रहरी

16

जैसा कि यहां पर कम से कम एक उत्तर में दिया गया है, लेकिन वेब पर कहीं और भी सुझाव दिया गया है, एक माइक्रोसेवा डिजाइन करना संभव है, जो दो लेन-देन के बीच स्थिरता की आवश्यकता होने पर एक सामान्य लेनदेन में एक साथ संस्थाओं को बनाए रखता है।

लेकिन एक ही समय में, आपके पास अच्छी तरह से ऐसी स्थिति हो सकती है जहां इकाइयाँ वास्तव में एक ही माइक्रोसिस्ट में शामिल नहीं होती हैं, उदाहरण के लिए, बिक्री रिकॉर्ड और ऑर्डर रिकॉर्ड (जब आप बिक्री को पूरा करने के लिए कुछ ऑर्डर करते हैं)। ऐसे मामलों में, आपको अच्छी तरह से दो माइक्रोसर्विस के बीच स्थिरता सुनिश्चित करने के लिए एक तरीके की आवश्यकता हो सकती है।

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

मैंने उन कंपनियों के साथ काम किया है जो इस जटिल मुद्दे से निपटने के लिए अपने स्वयं के लेन-देन ढांचे के निर्माण के मार्ग से नीचे चली गई हैं, लेकिन मैं इसकी सिफारिश नहीं करता क्योंकि यह महंगा है और परिपक्व होने में समय लगता है।

ऐसे उत्पाद हैं जो आपके सिस्टम पर बोल्ट किए जा सकते हैं जो निरंतरता का ध्यान रखते हैं। एक व्यवसाय प्रक्रिया इंजन एक अच्छा उदाहरण है और वे आमतौर पर मुआवजे का उपयोग करके और अंततः स्थिरता को संभालते हैं । अन्य उत्पाद इसी तरह से काम करते हैं। आप आमतौर पर क्लाइंट (एस) के पास सॉफ़्टवेयर की एक परत के साथ समाप्त होते हैं, जो वास्तविक व्यवसाय प्रसंस्करण करने के लिए स्थिरता और लेनदेन और कॉल (माइक्रो) सेवाओं से संबंधित है । ऐसा ही एक उत्पाद जेनेरिक जेसीए कनेक्टर है जिसका उपयोग जावा ईई समाधान (पारदर्शिता के लिए: मैं लेखक हूं) के साथ किया जा सकता है। अधिक जानकारी के लिए http://blog.maxant.co.uk/pebble/2015/08/04/1438716480000.html देखें और यहां उठाए गए मुद्दों की गहन चर्चा करें।

लेन-देन और स्थिरता को संभालने का एक अन्य तरीका है कि एक कॉल को एक संदेश कतार की तरह कुछ लेन-देन के लिए एक कॉल में एक माइक्रो-सेवा के लिए लपेटा जाए। ऊपर से बिक्री रिकॉर्ड / ऑर्डर रिकॉर्ड उदाहरण लें - आप बस बिक्री माइक्रोसिस्ट को ऑर्डर सिस्टम को एक संदेश भेज सकते हैं, जो उसी लेनदेन में प्रतिबद्ध है जो डेटाबेस को बिक्री लिखता है। परिणाम एक अतुल्यकालिक समाधान है जो बहुत अच्छी तरह से तराजू है । वेब सॉकेट जैसी तकनीकों का उपयोग करने से आप अवरुद्ध होने की समस्या से भी जूझ सकते हैं जो अक्सर अतुल्यकालिक समाधानों को स्केल करने से संबंधित है। इस तरह के पैटर्न पर अधिक विचारों के लिए, मेरे अन्य लेख देखें: http://blog.maxant.co.uk/pebble/2015/08/11/1439322480000.html

जो भी समाधान आप चुनते हैं, उसे चुनना यह पहचानना महत्वपूर्ण है कि आपके सिस्टम का केवल एक छोटा हिस्सा ऐसी चीजें लिख रहा होगा, जो लगातार होने की आवश्यकता है - अधिकांश पहुंच केवल-पढ़ने के लिए होने की संभावना है। उस कारण से, लेन-देन प्रबंधन का निर्माण केवल सिस्टम के संबंधित भागों में करें, ताकि यह अभी भी अच्छी तरह से पैमाने पर हो सके।


इस बीच, मैं कहूंगा कि प्रक्रिया को एक अतुल्यकालिक में बदलने पर गंभीरता से विचार करना चाहिए, जहां प्रक्रिया का प्रत्येक चरण पूरी तरह से लेन-देन वाला है। विवरण के लिए यहां देखें: blog.maxant.co.uk/pebble/2018/02/18/1518974314273.html
एंट

"बिक्री रिकॉर्ड / ऑर्डर रिकॉर्ड उदाहरण ऊपर से बनाएं - आप केवल बिक्री माइक्रोसेवल्स को ऑर्डर सिस्टम को एक संदेश भेज सकते हैं, जो उसी लेनदेन में प्रतिबद्ध है जो डेटाबेस को बिक्री लिखता है।" सुनिश्चित नहीं हैं कि आप जो सुझाव दे रहे हैं वह मूल रूप से एक वितरित लेनदेन है, जिसने कहा, आप इस मामले में रोलबैक परिदृश्य को कैसे संभालेंगे? उदाहरण के लिए संदेश कतार के लिए प्रतिबद्ध हो जाता है लेकिन DB की ओर वापस लुढ़क जाता है।
13 मई को sactiw

@sactiw निश्चित नहीं है कि अगर मेरे मन में दो चरण हो सकते हैं, लेकिन मैं इससे बचूंगा और अब इसके बजाय अपना व्यवसाय डेटा लिखूंगा, और यह तथ्य कि संदेश को कतार में जोड़ने की जरूरत है, एक लेन-देन में मेरे microservice DB को । "तथ्य" उर्फ ​​एक "कमांड" एक स्वचालित रिट्री मैकेनिज्म का उपयोग करते हुए, लेनदेन के बाद प्रतिबद्ध होने के बाद async संसाधित होता है। एक उदाहरण के लिए 2018-03-10 से ब्लॉग लेख देखें। यदि संभव हो तो आगे की रणनीति के पक्ष में रोलबैक या क्षतिपूर्ति से बचें।
चींटी कुत्चेरा

1

माइक्रोसॉर्क्स में अंतर के बीच स्थिरता प्राप्त करने के तीन तरीके हैं। सेवाएं:

  1. ऑर्केस्ट्रेशन - एक प्रक्रिया जो लेनदेन और सेवाओं में रोलबैक का प्रबंधन करती है।

  2. कोरियोग्राफी - एक-दूसरे के बीच सेवा पास संदेश और अंत में एक सुसंगत स्थिति तक पहुंचते हैं।

  3. हाइब्रिड - उपरोक्त दोनों को मिलाना।

पूरा पढ़ने के लिए लिंक पर जाएं : https://medium.com/capital-one-developers/microservices-when-to-react-vs-orchestrate-c6b18308a14c


1

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

विकल्प 1: यदि संभव हो तो लेनदेन की आवश्यकता से बचें

स्पष्ट और पहले उल्लेख किया है, लेकिन आदर्श अगर हम इसे प्रबंधित कर सकते हैं। क्या घटक वास्तव में एक ही microservice से संबंधित थे? या क्या हम सिस्टम को फिर से डिज़ाइन कर सकते हैं ताकि लेनदेन अनावश्यक हो जाए? शायद गैर-लेन-देन को स्वीकार करना सबसे सस्ती कुर्बानी है।

विकल्प 2: एक कतार का उपयोग करें

यदि पर्याप्त निश्चितता है कि दूसरी सेवा हम जो भी करना चाहते हैं उस पर सफल होंगे , हम इसे किसी न किसी रूप में कतार के माध्यम से कह सकते हैं। पंक्तिबद्ध आइटम को बाद में नहीं उठाया जाएगा, लेकिन हम यह सुनिश्चित कर सकते हैं कि आइटम पंक्तिबद्ध है

उदाहरण के लिए, यह कहें कि हम एक इकाई को सम्मिलित करना चाहते हैं और एक ही लेनदेन के रूप में एक ई-मेल भेजना चाहते हैं। मेल सर्वर को कॉल करने के बजाय, हम ई-मेल को एक तालिका में पंक्तिबद्ध करते हैं।

Begin transaction
Insert entity
Insert e-mail
Commit transaction

एक स्पष्ट दोष यह है कि एक से अधिक microservices को एक ही तालिका तक पहुंच की आवश्यकता होगी।

विकल्प 3: लेनदेन पूरा करने से ठीक पहले बाहरी काम करें

यह दृष्टिकोण इस धारणा पर टिकी हुई है कि लेनदेन करने में विफल होने की संभावना बहुत कम है।

Begin transaction
Insert entity
Insert another entity
Make external call
Commit transaction

यदि क्वेरी विफल हो जाती है, तो बाहरी कॉल अभी तक नहीं हुई है। यदि बाहरी कॉल विफल हो जाती है, तो लेनदेन कभी भी प्रतिबद्ध नहीं होता है।

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

विकल्प 4: लंबित स्थिति में चीजें बनाएं

जैसा कि यहां पोस्ट किया गया है , हमारे पास कई माइक्रोसर्विसेज अलग-अलग घटक बना सकते हैं, प्रत्येक एक लंबित स्थिति में, गैर-लेन-देन में।

कोई भी सत्यापन किया जाता है, लेकिन कुछ भी निश्चित स्थिति में नहीं बनाया जाता है। सब कुछ सफलतापूर्वक बनाए जाने के बाद, प्रत्येक घटक सक्रिय होता है। आमतौर पर, यह ऑपरेशन इतना सरल है और कुछ गलत होने की संभावनाएं इतनी कम हैं, कि हम सक्रिय रूप से गैर-सक्रिय रूप से भी करना पसंद कर सकते हैं।

सबसे बड़ी कमी शायद यह है कि लंबित वस्तुओं के अस्तित्व के लिए हमें जिम्मेदार होना चाहिए। किसी भी चुनिंदा प्रश्न पर विचार करने की आवश्यकता है कि क्या लंबित डेटा शामिल करना है। ज्यादातर को इसे नजरअंदाज करना चाहिए। और अपडेट पूरी तरह से एक और कहानी है।

विकल्प 5: माइक्रोसर्विस को इसकी क्वेरी को साझा करने दें

अन्य विकल्पों में से कोई भी आपके लिए नहीं है? तो फिर चलो अपरंपरागत हो जाओ ।

कंपनी के आधार पर, यह अस्वीकार्य हो सकता है। मुझे पता है। यह अपरंपरागत है। यदि यह स्वीकार्य नहीं है, तो किसी अन्य मार्ग पर जाएं। लेकिन अगर यह आपकी स्थिति में फिट बैठता है, तो यह समस्या को सरल और शक्तिशाली रूप से हल करता है। यह सिर्फ सबसे स्वीकार्य समझौता हो सकता है।

एक से अधिक माइक्रो सर्वर से प्रश्नों को सरल, एकल डेटाबेस लेनदेन में बदलने का एक तरीका है।

इसे निष्पादित करने के बजाय क्वेरी वापस करें।

Begin transaction
Execute our own query
Make external call, receiving a query
Execute received query
Commit transaction

नेटवर्क-वार, प्रत्येक माइक्रोसेवक को प्रत्येक डेटाबेस तक पहुंचने में सक्षम होना चाहिए। भविष्य में स्केलिंग के संबंध में भी इसे ध्यान में रखें।

यदि लेनदेन में शामिल डेटाबेस एक ही सर्वर पर हैं, तो यह एक नियमित लेनदेन होगा। यदि वे विभिन्न सर्वरों पर हैं, तो यह एक वितरित लेनदेन होगा। कोड समान रूप से समान है।

हम इसके कनेक्शन प्रकार, इसके मापदंडों और इसके कनेक्शन स्ट्रिंग सहित क्वेरी प्राप्त करते हैं। प्रवाह को पठनीय रखते हुए हम इसे एक साफ-सुथरी निष्पादन योग्य कमांड क्लास में लपेट सकते हैं: माइक्रोसेर कॉल का परिणाम एक कमांड में होता है, जिसे हम अपने लेनदेन के हिस्से के रूप में निष्पादित करते हैं।

कनेक्शन स्ट्रिंग वह है जो उत्पन्न करने वाला माइक्रोसर्विस हमें देता है, इसलिए सभी इरादों और उद्देश्यों के लिए, क्वेरी को अभी भी उस माइक्रोसॉर्स्ट द्वारा निष्पादित माना जाता है। हम सिर्फ ग्राहक माइक्रो सर्विस के माध्यम से इसे भौतिक रूप से रूट कर रहे हैं। क्या इससे कुछ अन्तर पड़ता है? ठीक है, यह हमें उसी लेनदेन में दूसरी क्वेरी के साथ डाल देता है।

यदि समझौता स्वीकार्य है, तो यह दृष्टिकोण हमें एक microservice वास्तुकला में एक अखंड आवेदन की सीधी लेन-देन देता है।


0

मैं समस्या के स्थान को कम करने के साथ शुरू करूंगा - आपकी सेवा सीमाओं की पहचान करना । ठीक से किए जाने पर, आपको सेवाओं में लेन-देन करने की आवश्यकता नहीं होगी।

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

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

अगर आपको लगता है कि आपका डोमेन पहले स्थिरता की मांग करता है, तो फिर से सोचें। कोई भी बड़ा और मिशन-क्रिटिकल सिस्टम इसे ध्यान में रखकर नहीं बनाया गया है। वे सभी वितरित और अंततः सुसंगत हैं। पैट हेलैंड के क्लासिक पेपर की जाँच करें ।

वितरित प्रणाली का निर्माण कैसे करें, इसके बारे में कुछ व्यावहारिक सुझाव दिए गए हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.