क्या SOA सेवा संरचना वास्तव में व्यवहार में काम करती है?


15

मुख्य SOA सेवा डिज़ाइन सिद्धांतों में से एक सेवा संगतता सिद्धांत ( https://en.wikipedia.org/wiki/Service_composability_principle ) है।

विचार यह है कि बिल्डिंग ब्लॉक्स के रूप में मौजूदा सेवाओं का उपयोग करके नई सेवाओं की रचना करके व्यक्ति तेजी से नई सेवाओं का विकास कर सकता है। जब आप नई विधियों को लागू करते हैं, तो आप वस्तुओं के तरीकों को कैसे कहते हैं, इसके अनुरूप। यह वह जगह है जहाँ SOA से बहुत अधिक उत्पादकता को बढ़ावा मिलता है।

यहाँ छवि विवरण दर्ज करें

क्या वास्तव में कोई ऐसा करता है? मैंने इसे बार-बार लिखित पाठ में बार-बार देखा है, लेकिन स्वयं वास्तविक विश्व कार्यान्वयन का अनुभव नहीं किया है। अधिकांश पाठ लेनदेन लेनदेन के किसी भी उल्लेख को छोड़ देते हैं , जो मुझे रचना योग्य सेवाओं को साकार करने में सबसे बड़ी बाधा लगती है।

पहले, आपको वास्तव में किसी भी गैर-तुच्छ सेवाओं की रचना करने से पहले लेनदेन की समस्या से निपटने की आवश्यकता है। निश्चित रूप से, यदि उदाहरण में "findCurrentTime ()" और "writeLogMessage ()" है, तो लेन-देन के बारे में चिंता करना आसान नहीं है, लेकिन वास्तविक दुनिया के उदाहरण जैसे "DepositMoney ()" और "withdrawMoney ()" के होने पर नहीं।

मुझे दो विकल्पों का पता है:

  1. डब्लूएस-एटॉमिक ट्रांजैक्शन या इस तरह के वास्तविक लेनदेन को लागू करें
  2. मुआवजा-आधारित समाधान को लागू करें जो ए को "कैंसला ()" या सोमेसिक के साथ कॉल की भरपाई करता है यदि बी में कॉल विफल हो जाता है

ये दोनों मेरे लिए बहुत ही समस्याग्रस्त / अनुपयोगी लगते हैं:

  • WS- परमाणु लेनदेन
    • एक बहुत जटिलता के कारण, अधिकांश सलाह है कि मैंने पाया सिर्फ चेतावनी दी है "दर्द पिछवाड़े में, न यह करना"
    • समर्थन सीमित है, उदाहरण के लिए यदि आप खुले स्रोत ESBs लेते हैं, तो मुख्य विकल्प ServiceMix, Mule या WSO2 इसका समर्थन नहीं करते हैं
  • मुआवजा
    • क्षतिपूर्ति की हैंडलिंग को लागू करना मुझे बहुत जटिल लगता है। यदि सेवा A सफल हो जाती है तो हम क्या करते हैं और हमें कभी सेवा B से उत्तर नहीं मिलता है और यह नहीं पता होता है कि यह विफल हुआ या सफल हुआ? इस तरह के तर्क को मैन्युअल रूप से संभालना (कंपोज़िटिंग सेवाओं के कार्यान्वयनकर्ता के रूप में) मुझे अपनी कलाई को मारना चाहता है - यह उसी तरह का काम है जैसा कुछ उपकरण मुझे करना चाहिए!
    • मैं यह भी नहीं देखता कि आप गैर-तुच्छ सेवाओं में मुआवजे के तरीके कैसे रख सकते हैं। कहते हैं कि आपकी सेवा A "डिपॉजिटमनी ()" है और वह सफल हो जाती है, कुछ अन्य कार्रवाई जल्दी से कहीं और धन हस्तांतरित करती है, और फिर हमें "क्षतिपूर्तिडॉपरमॉनी ()" प्राप्त होती है, अब हम क्या करते हैं? कीड़े की एक बड़ी कैन की तरह लगता है।

मेरे लिए ऐसा लगता है कि सेवा संरचना एक ऐसा मूलभूत एसओए सिद्धांत है जो आपको वास्तव में एसओए के लाभ नहीं मिलता है यदि आप सेवाओं को आसानी से नहीं बना सकते हैं । वास्तविकता क्या है? SOA के 90% उपयोगकर्ता वास्तविक सेवा के बिना "अपंग SOA" का उपयोग करते हैं? या अधिकांश उपयोगकर्ता वास्तव में सेवा संरचना का उपयोग करते हैं और मैं इसकी कठिनाई बढ़ा रहा हूं?


+1 यह इतना बड़ा सवाल है, और इस तरह की शर्म की बात पर ज्यादा ध्यान नहीं दिया गया है।
गाज़_एज

जवाबों:


0

छोटा जवाब हां है!

मैंने कई बड़े वित्तीय संगठनों में इसे देखा है, और, इसने अच्छा काम किया है।

लेन-देन के मुद्दे जटिल हैं, लेकिन आमतौर पर Oracles WebLogic EAI या IBMs Websphere ESB जैसे (महंगे) मिडलवेयर द्वारा नियंत्रित किया जाता है।


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

एक अनुवर्ती प्रश्न के रूप में, मैं उत्सुक हूं कि SOA कार्यान्वयन कितने प्रतिशत "ठीक से" करते हैं और वास्तविक सेवा संरचना का उपयोग करते हैं? मेरा कूबड़ बहुत कम होगा, 10% की तरह ... क्या मैं गलत हूं?
जैने मटिला

4

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

आपकी कुछ और विशिष्ट चिंताओं का जवाब देने के लिए ...

आप लेनदेन का उपयोग कर सकते हैं:

  1. WS-TX एक PITA है और मैं इससे बचूंगा।
  2. आपकी सभी सेवाएँ एकल एप्लिकेशन सर्वर में चल रही हो सकती हैं, जिस स्थिति में आप उन सभी को XA लेनदेन के साथ जोड़ सकते हैं। यही कारण है कि एप्लिकेशन सर्वर के रूप में ऐसी चीजों का आविष्कार किया गया था।

मुआवजा आधारित दृष्टिकोण पर विचार:

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

कुछ स्थितियों में कोई फर्क नहीं पड़ता:

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

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

आप छोटे टुकड़ों में लेनदेन को तोड़ने के लिए अतुल्यकालिक संदेश का उपयोग कर सकते हैं:

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

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

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

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


बहुत बढ़िया जवाब! अंतिम खंड पर मेरी केवल टिप्पणी है जहां आप जेएमएस और लेनदेन के साथ अतुल्यकालिक संदेश के बारे में बात करते हैं, मुझे डर है कि इससे यहां क्षमताओं का कुछ बुरा प्रभाव पड़ सकता है। संदेश भेजने के लिए सेवा उपभोक्ता का लेन-देन केवल यह गारंटी देने वाला है कि संदेश को कतार में भेज दिया गया है। हमारे पास इस बात की कोई गारंटी नहीं है कि उपभोक्ता क्या करेंगे, अगर वे संदेश पढ़ने जा रहे हैं तो अकेले रहने दें।
maple_shaft

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

+1 के लिए "यही कारण है कि एप्लिकेशन सर्वर के रूप में ऐसी चीजों का आविष्कार किया गया था।" मैं अब हफ्तों से इस समस्या से जूझ रहा हूं। Im एक नई परियोजना शुरू कर रहा है और SOA का उपयोग करना चाहता हूं - पूर्ण लेन-देन की निरंतरता की अनुमति देने के लिए एक ही बॉक्स पर सभी सेवाएं होने से आगे की तरह लगता है - धन्यवाद!
गाज़_एडज

-1

नहीं, यह एक मिथक है। सर्विस आर्किटेक्चर डिजाइन करते समय यह गलत इरादा है। समस्याओं का एक पूरा गुच्छा है:

  1. बहुत तंग युग्मन। यदि एक सेवा को बदल दिया गया तो आपको पूरी प्रणाली का परीक्षण करने की आवश्यकता है।
  2. इस तरह की सेवाएं बहुत बारीक होती हैं, इसलिए इसमें बहुत अधिक आंतरिक संचार होता है।
  3. ठीक-ठाक होने के परिणामस्वरूप बहुत सारी सेवाएँ हैं। सिस्टम को समझना कठिन हो रहा है, प्रश्नों को ट्रैक करना कठिन हो रहा है।
  4. इकाई-सेवाएँ खराब रूप से घेर ली गई हैं: कोई भी व्यावसायिक नियम वहाँ नहीं देखे गए हैं, यह तर्क ऑपरेशन सेवाओं में है। तो कोई भी सेवा किसी भी इकाई-सेवा को कॉल कर सकती है और अपने डेटा को सामान्य अपडेट-क्वेरी के साथ अपडेट कर सकती है जो उसके इंटरफ़ेस में मौजूद है। इस तरह की इकाई सेवाओं को अक्सर डेटा-केंद्रित के रूप में संदर्भित किया जाता है - प्रक्रिया-केंद्रित, व्यवहार-केंद्रित सेवाओं के विपरीत।
  5. इन सेवाओं के बीच संचार की सहज प्रकृति समकालिक है। तो संभावना है कि चुने गए परिवहन http होगा। इसलिए इसकी सभी कमियां जो मैं थोड़ी देर बाद बात करूंगा।

सर्विस आर्किटेक्चर से संपर्क करने के और भी गलत तरीके हैं । इसलिए सतर्क रहें।


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