यदि आप लेन-देन का उपयोग नहीं कर सकते हैं तो आप एंटरप्राइज़ वातावरण में वेब सेवाओं का प्रभावी ढंग से उपयोग कैसे कर सकते हैं?


14

जिस स्थान पर मैं काम कर रहा हूं, वह कुछ जमीनी नियमों को स्थापित करने की कोशिश कर रहा है, और अब हम जो बहस कर रहे हैं वह कोड के पुन: उपयोग के लिए स्थानीय पुस्तकालय बनाम वेब सेवाएं हैं। अधिकांश कंपनियों में वेब सेवाएं लोकप्रिय पसंद प्रतीत होती हैं, और यही कारण है कि यहाँ अधिकांश डेवलपर्स की ओर झुकाव है।

मैं सिर्फ यह नहीं देख सकता कि आप किसी भी गंभीर काम के लिए वेब सेवाओं का प्रभावी उपयोग कैसे कर सकते हैं। यदि मैं लेन-देन का उपयोग नहीं कर सकता, तो मैं कई सेवा कॉलों को सुरक्षित रूप से कैसे निष्पादित कर सकता हूं?

मान लीजिए कि मेरे पास एक क्रॉन जॉब है जो हमारे डेटाबेस से ग्राहकों को पकड़ता है जो एक निश्चित शर्त को पूरा करते हैं जिसे उन्हें अधिसूचित करने की आवश्यकता है। उन्हें फ़ैक्स, एक ईमेल भेजा जाता है, और आंतरिक रूप से समस्या को ट्रैक करने के लिए एक टिकट बनाया जाता है। यह 3 अलग-अलग सर्विस कॉल है जो प्रत्येक ग्राहक के लिए लूप में होगी।

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

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

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

आप आमतौर पर इस विधि को कैसे संभालेंगे?


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

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

"यदि पुस्तकालय सभी स्थानीय होते हैं, तो सब कुछ सिर्फ एक लेनदेन में लपेटा जा सकता है, और इसमें से कुछ भी नहीं होगा"। असत्य। ईमेल भेजे जाने के बाद त्रुटि हो सकती है लेकिन अंतिम डेटाबेस अपडेट से पहले। कोई लेन-देन पूर्वव्यापी रूप से ईमेल या फैक्स को नहीं रोकता है।
S.Lott

@ एस.लॉट: यह होगा, क्योंकि ईमेल और फैक्स सेवा कॉल वास्तव में उन्हें केवल एक कतार में सम्मिलित कर रहे हैं, जो एक अलग प्रक्रिया द्वारा वितरित होते हैं। यदि मैंने ऊपर वर्णित लेन-देन किया है, तो कतार सम्मिलन समाप्त कर दिया जाएगा।
ryeguy

1
@ryeguy: कृपया प्रश्न को अपडेट करें। कृपया प्रश्न में टिप्पणी न जोड़ें। यह आपकी वास्तुकला का एक महत्वपूर्ण हिस्सा है। कृपया प्रश्न में इसका खुलासा करें।
S.Lott

जवाबों:


5

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


3

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

विषम वातावरण में लेनदेन का समर्थन करने के लिए एक विकल्प एक परिवहन तंत्र का उपयोग कर रहा है जो लेनदेन का समर्थन करता है और उन सभी प्लेटफार्मों पर समर्थित है जहां से इसका उपयोग किया जाएगा। उन्नत संदेश कतार प्रोटोकॉल (AMQP) समर्थन लेनदेन करता है और वहाँ लगभग हर भाषा है कि आज आम तौर पर इस्तेमाल किया जाता है के लिए एक देशी एपीआई है। RabbitMQ एक सर्वर है जो AMQP को लागू करता है और इसे एक मजबूत समाधान के रूप में उद्योग में शामिल किया गया है।

एक RabbitMQ आधारित प्रणाली का लाभ उठाते हुए आपको एक पूर्ण ESB होने की राह पर ले जाना चाहिए जो आपको उसमें विकसित करने की आवश्यकता है। आप एक चैनल को संदेश प्रकाशित करते हैं और एक कतार की सदस्यता लेते हैं। जहां वास्तव में शक्तिशाली हो जाता है वह यह है कि चैनल और कतार के बीच, आप बहुत सारी दिलचस्प चीजें कर सकते हैं। एक चैनल कई कतारें (पब / उप) फ़ीड कर सकता है एक कतार कई चैनलों द्वारा खिलाया जा सकता है, आप सामग्री आदि के आधार पर संदेशों को अलग-अलग कतारों में भेज सकते हैं।

मैं सिर्फ लेन-देन के विकल्पों के बारे में पढ़ रहा था (जो ओवरहेड के साथ आते हैं और एक async ऑपरेशन को एक अवरुद्ध ऑप में बदलते हैं)। RabbitMQ एक प्रकाशक पुष्टिकरण का समर्थन करता है । मूल रूप से यह आपको एक असफल लेनदेन को संभालने के लिए एक प्रकाशित विधि के लिए कॉलबैक को पंजीकृत करने की अनुमति देता है। आपके मामले में यह ईमेल / फैक्स अनुरोधों को पूर्ववत कर सकता है और टिकट को हटा सकता है।

बेशक खरगोश छेद (दण्ड को क्षमा करता है) वहाँ से और भी गहरा जाता है। आप आंतरिक और बाहरी दोनों वेब सेवाओं के साथ जटिल ऑर्केस्ट्रेशन करने के लिए रैबिट का उपयोग कर सकते हैं।

आपके सार्वजनिक सामना करने वाली वेबसाइट के लिए, यह मृत सरल हो जाता है। आपकी सेवा (यह SOAP, REST या JSON हो) बस एक संदेश को उचित सेवा कतार में प्रकाशित करता है और अपने आंतरिक सिस्टम को वहां से संभालने देता है।

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


2

आपके द्वारा खोजे जा रहे कीवर्ड 'वेब सेवा कोरियोग्राफी' हैं।

की जाँच करें विकिपीडिया के इसके बारे में लेख।


कभी-कभी "ऑर्केस्ट्रेशन" भी कहा जाता है।
एस.लॉट

1

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

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


1

मैं सिर्फ यह नहीं देख सकता कि आप किसी भी गंभीर काम के लिए वेब सेवाओं का प्रभावी उपयोग कैसे कर सकते हैं। यदि मैं लेन-देन का उपयोग नहीं कर सकता, तो मैं कई सेवा कॉलों को सुरक्षित रूप से कैसे निष्पादित कर सकता हूं?

आप नहीं कर सकते।

आपके द्वारा पूछा जाने वाला प्रश्न यह है: मैं वेब सेवा ढांचे एक्स के साथ लेनदेन कैसे लागू कर सकता हूं? अभी, आप केवल यह मान रहे हैं कि यह असंभव है।

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