2014-07-10 12 views
17

मैंने सूक्ष्मजीव वास्तुकला के बारे में कुछ लेख पढ़े हैं, लेकिन कोई भी लेनदेन का विषय नहीं लेता है। वे सब कहते हैं कि यह करना मुश्किल है। हो सकता है कि कोई इसका वर्णन कर सके कि इसे कैसे संभाला जाए?माइक्रोस्कोर्सेस में लेनदेन

लेकिन डोमेन पक्ष से नहीं, बल्कि तकनीकी पक्ष से। आइए कहें कि हमारे पास व्यावसायिक मामला है जहां हमें दो अलग-अलग सेवाओं का आह्वान करने की आवश्यकता है और दोनों डेटाबेस पर कुछ बदलाव करते हैं। लेकिन अगर किसी दूसरी त्रुटि पर कुछ त्रुटि होती है तो रोलबैक कैसे करें?

इस समस्या के लिए कुछ पुस्तकालयों या डिजाइन पटर को कौन जानता है?

उत्तर

4

सर्वोत्तम डिजाइन में अलग-अलग सेवाएं हैं: प्रत्येक सेवा केवल अपने कार्य के भीतर अपना काम करती है और आपके वर्कफ़्लो को एकल सेवा पर असफलताओं की अपेक्षा होती है।

यदि आपको वास्तव में केवल तभी प्रतिबद्ध करने की आवश्यकता है यदि सभी सेवाओं को त्रुटियों के बिना बुलाया जाता है तो आपको उच्च स्तर की सेवा बनाना चाहिए जो बाहरी कॉल के अंदर उन कॉल को निष्पादित करे।

+1

आपका क्या मतलब है:> आपको उच्च स्तरीय सेवा – KirkoR

+1

बनाना चाहिए मेरा मतलब है कि आपके पास एक और सेवा होनी चाहिए जो वैश्विक लेनदेन शुरू करेगी और अपनी सभी कॉल के परिणाम के आधार पर प्रतिबद्ध/रोलबैक करने के लिए इस लेनदेन का उपयोग करके अपनी अन्य सेवाओं को कॉल करें। मुझे नहीं पता कि यह परिणाम वास्तव में कैसे हासिल किया जा सकता है, यह उन तकनीकों पर निर्भर करता है जिनका आप उपयोग कर रहे हैं। मुझे लगता है कि यह आलेख कुछ उपयोगी जानकारी प्रदान कर सकता है (http://docs.oracle.com/cd/E17904_01/web.1111/e13734/transaction.htm)। दूर, जैसा कि पहले बताया गया था, यह वास्तव में चुनौतीपूर्ण संदर्भ है और प्रत्येक सेवा के लिए व्यक्तिगत लेनदेन का उपयोग करके बेहतर होगा। – davmcpaul

+0

यहां आप एक उपयोगी वास्तविक जीवन वास्तविक उदाहरण पा सकते हैं कि आपकी समस्या से कैसे संपर्क किया जा सकता है: http://www.eaipatterns.com/ramblings/18_starbucks.html – davmcpaul

9

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

यहाँ वितरित कर रहे हैं उल्लेख या चर्चा की लेन-देन:

https://en.wikipedia.org/wiki/Distributed_transaction

http://contino.co.uk/microservices-not-a-free-lunch/

http://martinfowler.com/articles/microservices.html

यह प्रतीत होता है लोगों को यह से बचने के लिए के रूप में यह मुश्किल है की कोशिश करो। शायद यही कारण है कि आपको बहुत कुछ नहीं मिला है।

आशा इस एक कदम आगे :-) में मदद करता है पिछले जवाब के शीर्ष पर

0

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

http://blog.maxant.co.uk/pebble/2015/08/04/1438716480000.html

0

दो चरण के लिए प्रतिबद्ध option.Coordinator cohorts.Cohorts वापस ok.After समन्वयक भेजने के लिए तो अनुरोध संदेश के लिए प्रतिबद्ध भेज हो सकता है कोहोर्ट्स को प्रतिबद्ध संदेश भेजता है। अगर किसी भी विफलता को खुश करने वाला समन्वयक समूह को रोलबैक संदेश भेजता है।

2

पहले कच्चे बात जो इस सवाल को पढ़ने के बाद मेरे मन में आया, बनाने के लिए हर एक साथ API एड साथ एपीआई हटाना है कहते हैं, एक अतिरिक्त बूलियन ध्वज delFlag सुविधा देता है।

बूलियन ध्वज delFlag;

पोस्ट के लिए, यह 0 होगा। DELETE के लिए, यह 1 होगा।

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

पीएस- बस एक कच्चा विचार। अगर आपको लगता है कि यह गलत है तो मुझे सही करें।

0

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

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