काम पर, हमारे पास एक बड़ा आंतरिक अनुप्रयोग है जो 2 साल के लिए विकास के अधीन है; मैं अभी हाल ही में इस परियोजना में शामिल हुआ हूं और कुछ आर्किटेक्चर ने मुझे थोड़ा हैरान कर दिया है, इसलिए मैं उम्मीद कर रहा हूं कि आर्किटेक्ट से ये सवाल पूछने से पहले मैं किसी को कुछ सलाह दे सकता हूं (इसलिए मैं उनके साथ एक सूचित चर्चा कर सकता हूं )।
मेरी क्षमा याचना अगर नीचे थोड़ी लंबी है, तो मैं सिर्फ एक अच्छी तस्वीर को चित्रित करने की कोशिश करना चाहता हूं कि सिस्टम क्या है इससे पहले कि मैं अपनी खुशी पूछूं
सिस्टम सेटअप करने का तरीका यह है कि हमारे पास एक मुख्य वेब एप्लिकेशन (asp.net, AngularJS) है जो ज्यादातर विभिन्न अन्य सेवाओं से डेटा एकत्र करता है। तो मूल रूप से यह एक AngularJS आवेदन के लिए एक मेजबान है; शाब्दिक रूप से एक MVC नियंत्रक है जो क्लाइंट साइड को बूटस्ट्रैप करता है, और फिर हर दूसरा नियंत्रक एक WebAPI नियंत्रक है।
क्लाइंट-साइड से कॉल को इन नियंत्रकों द्वारा नियंत्रित किया जाता है, जो हमेशा उन बॉक्सों पर तैनात होते हैं जो वेब एप्लिकेशन को होस्ट करने के अलावा कुछ भी नहीं करते हैं। वर्तमान में हमारे पास 4 ऐसे बॉक्स हैं।
हालाँकि, कॉल को अंततः WebAPI अनुप्रयोगों के एक और सेट के माध्यम से रूट किया जाता है (आमतौर पर ये प्रति व्यावसायिक क्षेत्र, जैसे कि सुरक्षा, ग्राहक डेटा, उत्पाद डेटा, आदि)। इन सभी WebAPI को एक साथ समर्पित बक्से में भी तैनात किया जाता है; हमारे पास इनमें से 4 बॉक्स भी हैं।
एक एकल अपवाद के साथ, इन WebAPI का उपयोग हमारे संगठन के किसी अन्य भाग द्वारा नहीं किया जाता है।
अंत में ये वेबएपीआई "बैक एंड" सेवाओं के लिए कॉल का एक और सेट बनाते हैं, जो आम तौर पर विभिन्न ईआरपी सिस्टम और डेटा स्टोर (जिनके ऊपर हमारा कोई नियंत्रण नहीं है) के शीर्ष पर थप्पड़ मारना asmx या wcf सेवाएँ हैं।
हमारे अधिकांश एप्लिकेशन का व्यावसायिक तर्क इन WebApis में है, जैसे कि विरासत डेटा को बदलना, इसे एकत्र करना, व्यावसायिक नियमों को निष्पादित करना, सामान्य प्रकार की बात।
मुझे उलझन में है कि WebApplication और इसे सेवा देने वाले WebAPI के बीच ऐसा अलगाव होने के क्या संभावित लाभ हैं। चूंकि कोई भी उनका उपयोग नहीं कर रहा है, मुझे कोई स्केलेबिलिटी लाभ नहीं दिखता है (अर्थात बढ़ा हुआ लोड संभालने के लिए किसी अन्य 4 एपीआई बॉक्स में डालने का कोई मतलब नहीं है, क्योंकि एपीआई सर्वर पर लोड बढ़ने का मतलब यह होना चाहिए कि वेब सर्वर पर लोड बढ़ गया है - इसलिए Api सर्वर के लिए वेब सर्वर का 1: 1 अनुपात होना चाहिए)
मुझे अतिरिक्त HTTP कॉल ब्राउज़र => HTTP => WebApp => HTTP => WebAPI => HTTP => बैकएंड सेवाएं बनाने में कोई लाभ नहीं दिखता है। (WebApp और WebAPI के बीच HTTP कॉल मेरी समस्या है)
इसलिए मैं वर्तमान में अलग-अलग समाधानों से स्थानांतरित किए गए वर्तमान वेबएपीआई को पुश करने के लिए देख रहा हूं, बस वेबएप्लिकेशन्स समाधान के भीतर अलग-अलग परियोजनाओं के लिए, बीच में सरल परियोजना संदर्भ और एक एकल तैनाती मॉडल के साथ। इसलिए वे अंततः केवल कक्षा पुस्तकालय बन जाते थे।
तैनाती-वार, इसका मतलब है कि हमारे पास 4 + 4 के विपरीत 8 "पूर्ण स्टैक" वेब बॉक्स होंगे।
नए दृष्टिकोण के जो लाभ मुझे दिखाई दे रहे हैं
- प्रदर्शन में वृद्धि क्योंकि वेब अनुप्रयोग और WebAPI सर्वरों के बीच क्रमबद्धता / deserialisation का एक कम चक्र है
- वेब अनुप्रयोग और WebApi सर्वर की आउटगोइंग और इनकमिंग सीमाओं पर DTO और मैपर्स के संदर्भ में हटाए जा सकने वाले कोड के टन (अर्थात बनाए रखने / परीक्षण करने की आवश्यकता नहीं)।
- सार्थक ऑटोमैटिक इंटीग्रेशन टेस्ट बनाने की बेहतर क्षमता, क्योंकि मैं केवल बैक-एंड सेवाओं का मजाक उड़ा सकता हूं और मिड-टियर HTTP जंप के आसपास गड़बड़ी से बच सकता हूं।
तो सवाल यह है: क्या मैं गलत हूं? क्या मुझे अलग किए गए WebApplication और WebAPI बक्से के कुछ मौलिक "जादू" याद हैं?
मैंने कुछ एन-टियर आर्किटेक्चर सामग्री पर शोध किया है, लेकिन उनमें से कुछ भी ऐसा प्रतीत नहीं हो सकता है जो हमारी स्थिति के लिए एक ठोस लाभ दे सके (क्योंकि स्केलेबिलिटी एक मुद्दा नहीं है जहां तक मैं बता सकता हूं, और यह एक आंतरिक ऐप है WebAPI अनुप्रयोगों के संदर्भ में सुरक्षा कोई समस्या नहीं है।)
और यह भी, अगर मैं अपने प्रस्तावित सेटअप में सिस्टम को फिर से व्यवस्थित करने के लिए लाभ के संदर्भ में क्या खो रहा हूं?