2015-05-11 7 views
6

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

मेरे पास तीन मुख्य सेवाएं हैं, मान लें कि foo-service, bar-service, और baz-service। इन सेवाओं को कभी संवाद करने की आवश्यकता नहीं है, लेकिन सभी तीन सेवाएं नियमित रूप से HTTP अनुरोधों के माध्यम से security-service पर बात करती हैं। मैं इसे कई कारणों से रोकना चाहता हूं- सबसे बड़ी बात यह है कि मेरी व्यक्तिगत सेवाओं के प्रत्येक अनुरोध से सुरक्षा सेवा के लिए अनुरोध मिलता है, जो लोड संतुलन के लिए खाता लेने के बाद कई अतिरिक्त होप्स में बदल सकता है। मैं पढ़ रहा हूं मार्क रिचर्ड्स द्वारा "सॉफ्टवेयर आर्किटेक्चर पैटर्न", और उन्होंने इन उदाहरणों में सिफारिश की है कि आपको डेटाबेस साझा करना चाहिए और DRY का उल्लंघन करना चाहिए: प्रत्येक सेवा में आवश्यक कार्यक्षमता की प्रतिलिपि बनाएँ। फिर भी, वह इस उदाहरण का उपयोग छोटे "उपयोगिता" वर्गों के साथ करता है, जो वास्तव में इस उदाहरण में लागू नहीं हो सकता है।

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

तो मेरा प्रश्न, क्या मुझे कोड कॉपी या पेस्ट करना चाहिए या प्रत्येक सेवा में एक मॉड्यूल बनाना चाहिए? धन्यवाद!

+1

यह एक क्रॉस-कटिंग चिंता की तरह लगता है कि साइटमैंडर का जन्म हुआ था। यह सेवाओं पर एक फ़िल्टर या मूल लेख होना चाहिए, अतिरिक्त नेटवर्क हॉप नहीं। – duffymo

+0

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

+1

सुरक्षा सेवा क्या करता है, प्रमाणीकरण या प्राधिकरण? – miraculixx

उत्तर

4

मैं इस सबसे बड़े कारणों है कि मेरे अलग-अलग सेवाओं के लिए प्रत्येक अनुरोध सुरक्षा सेवा, आदि एक बार आप लोड संतुलन के लिए खाते में जो कई अतिरिक्त हॉप्स में बदल सकते हैं के लिए एक अनुरोध spawns है की एक किस्म के लिए बंद करना चाहते हैं । एक अलग सेवा के रूप में छोड़ने की

पेशेवरों:
- सुरक्षा व्यापार तर्क जाने वाले बदलाव केवल सुरक्षा सेवा प्रभावित करते हैं और ग्राहक सेवा में होने वाले बदलाव की जरूरत नहीं है।

क्लाइंट सेवाओं में सुरक्षा तर्क को स्थानांतरित करने के प्रोएस:
- गति/प्रदर्शन।
- प्रबंधन के लिए एक कम सेवा का मतलब ऑपरेशन लागत कम हो सकता है।

आवश्यकताएं के आधार पर गति (प्रदर्शन) यहां ट्रम्प हो सकती है, लेकिन यह विकास लागत में वृद्धि के साथ आएगी।

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

इस वीडियो बना सकता है आप संबंध STO प्रवृत्ति आगे बढ़ाते साथ बेहतर महसूस: https://www.youtube.com/watch?v=StCrm572aEs

इससे पता चलता है कि कैसे और क्यों नेटफ्लिक्स प्रवृत्ति bucked और उनके एपीआई के लिए बाकी वास्तुकला के साथ जाना नहीं था। मूल रूप से वास्तुकला आवश्यकताओं और लागत का एक ग्राहक है, यह दूसरी तरफ नहीं है।

संपादित करें: एक सेवा के रूप छोड़ने के लिए एक और बड़ा प्रो आप प्रत्येक भाषा के लिए कई मॉड्यूल बनाने के लिए समर्थित होने के नाते हो सकता है है। मेरे काम पर हमारी सुरक्षा सेवाओं का उपयोग कई भाषाओं में क्लाइंट सेवाओं द्वारा किया जाता है।

+0

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

+1

हां इसे समयपूर्व अनुकूलन के रूप में देखा जा सकता है। हाँ आप समय बर्बाद कर सकते हैं। एक अच्छी कहानियां है कि दिमाग में आता है "कोई अच्छा काम नहीं किया जाता है"। –

1

आप अन्य सेवाओं में सुरक्षा तर्क एम्बेड करते हैं, तो आप वास्तव में यह एक microservice वास्तुकला अब आप कॉल नहीं कर सकते कर सकते हैं? मैं यह भी समझता हूं कि हर दूसरे सेवा के लिए उस अतिरिक्त और डुप्लिकेट सर्वर राउंड ट्रिप को ड्रैग का थोड़ा सा हो सकता है। विचार करने के लिए यहां कुछ व्यवहार्य विकल्प दिए गए हैं।

फ़ायरवॉल के पीछे इन चार माइक्रोस्कोपों ​​को रखो। आने वाली अनुरोध को सत्यापित करने के लिए सुरक्षा सेवा का उपयोग करने वाली सार्वजनिक सेवा सेवा का पर्दाफाश करें और फिर दिए गए प्रमाण-पत्रों के लिए अनुरोध मान्य होने पर अन्य सेवाओं को कॉल करें। अन्य सेवाएं हमेशा कॉलर पर भरोसा करती हैं जो आपके विश्वसनीय माहौल में स्वामित्व वाली और संचालित सेवा है।

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

0

सुरक्षा के रूप में आपको एक अलग सेवा के रूप में आवश्यकता है जिसे आप वर्णन करते हैं, यह एक बेहद बुरा विचार है। क्या मैं आपको मॉड्यूलरिसेशन के बुनियादी विचारों के बारे में बता सकता हूं कि पारनास ने On the Criteria To Be Used in Decomposing Systems into Modules में इतनी स्पष्ट रूप से वर्णित किया है। कोई युग्मन का मतलब कोई संयोजन नहीं है, और इंजीनियरिंग उस धुरी पर मीठी जगह खोजने के बारे में है।

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

आपका सुरक्षा मॉड्यूल एक HTTP अनुरोध से अपनी सेवाओं के करीब होने की जरूरत है, किसी लिंक किए गए-इन मॉड्यूल ठीक हो सकता है।

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