2016-11-06 16 views
8

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

  • कैसे एपीआई प्रवेश द्वार बहुत चालाक अनुरोध Balnce लोड करने के लिए बनाने के लिए अगर मैं एक ही microservice से 2 नोड है:

    enter image description here

    यहाँ मेरे सवालों और विचारों कर रहे हैं?

  • यदि माइक्रोस्कोव में से एक यह है कि खोज कैसे जानी चाहिए?
  • क्या कोई समान कार्यान्वयन है? क्या मेरा डिजाइन सही है?
  • क्या मुझे यूरेका या इसी तरह की चीजों का उपयोग करना चाहिए?
+0

एपीआई गेटवे में आमतौर पर लोड संतुलन सुविधा अंतर्निहित होती है। कुछ चिपचिपा सत्र आदि जैसी सुविधाओं को भी लागू करते हैं। तीन सबसे लोकप्रिय एपीआई गेटवे सभी लोड बैलेंसर्स हैं (वे मूल रूप से एपीआई गेटवे के रूप में डिज़ाइन नहीं किए गए थे): हैप्रोक्सी, निजिनक्स और अपाचे। एपीआई गेटवे के रूप में वेबसर्वर और लोड बैलेंसर्स का उपयोग करने में समस्या यह है कि यदि आप नोड को जोड़ना या निकालना चाहते हैं तो आपको गेटवे को पुनरारंभ करने की आवश्यकता है। मैंने एक एपीआई गेटवे लिखा है विशेष रूप से गतिशील जोड़ने और पुनरारंभ किए बिना नोड्स को हटाने की अनुमति देने के लिए: https://github.com/slebetman/typhos। यह उत्पादन के लिए तैयार नहीं है लेकिन आप इसे – slebetman

+0

फोर्क कर सकते हैं, चूंकि एपीआई गेटवे आमतौर पर लोड बैलेंसर्स होते हैं, इसलिए आमतौर पर 400 और 500 त्रुटियों को वापस करने वाले नोड्स का पता लगाने के लिए विशेषताएं होती हैं। तो आम तौर पर खोज सेवाएं केवल यूआरएल को सेवा में वापस कर देती हैं और यूआरएल लगभग हमेशा एपीआई गेटवे को इंगित करती है। कुछ आर्किटेक्चर एपीआई गेटवे (अमेज़ॅन) का उपयोग नहीं करते हैं, इसलिए वे डाउन नोड्स का पता लगाने के लिए खोज सेवा पर निर्भर करते हैं – slebetman

+0

@ स्लेबेटमैन याह मुझे पता है कि मैं इसे खरोंच से बना रहा हूं क्योंकि मुझे नोडजेज़ के लिए कोई अच्छा गेटवे नहीं मिला है कोई ? –

उत्तर

3

आपका डिज़ाइन ठीक है।

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

  2. डिस्कवरी सही स्थिति में है - अगर आप अपने डिजाइन को फिट करने वाले किसी भी व्यक्ति को कहीं भी नहीं देखते हैं लेकिन Consul

  3. आप सेवाओं और एपीआई-गेटवे के लिए कंसुल-टेम्पलेट का उपयोग कर सकते हैं या माइक्रो-डिस्कवरी-फ्रेमवर्क का उपयोग कर सकते हैं, इसलिए वे बूट पर एंड-पॉइंट डेटा साझा करते हैं।

  4. एसीएल/प्राधिकरण प्रति सेवा लागू किया जाना चाहिए, और एपीआई गेटवे से पहला अनुरोध सभी प्राधिकरण मिडलवेयर के अधीन होना चाहिए।

  5. प्रत्येक अनुरोध के लिए अनुरोध आईडी प्रदान करने वाले एपीआई गेटवे के अनुरोधों को ट्रैक करना स्मार्ट है ताकि जीवन चक्र को "आंतरिक" प्रणाली में ट्रैक किया जा सके।

  6. मैं संदेश भेजने के लिए Redis जोड़ना होगा/कार्यकर्ताओं/कतारों/तेजी में स्मृति कैश/कैश अमान्यकरण की तरह सामान (अगर कोई बिना सभी एमएस वास्तुकला संभाल सकते हैं) - या RabbitMQ ले यदि आप और अधिक वितरित लेन-देन है और मैसेजिंग के बहुत सारे

  7. इन सभी को कंटेनरों (डॉकर) पर स्पिन करें ताकि इसे बनाए रखना और इकट्ठा करना आसान हो जाएगा।

  8. बीआई के लिए क्यों आपको इसके लिए एक सेवा की आवश्यकता होगी? आपके पास बाहरी ईएलके एलिस्टिसर्च, लॉगस्टैश, किबाना हो सकता है) और एक बार में डैशबोर्ड, लॉग एग्रीगेशन और विशाल बड़े डेटा वेयरहाउस हो सकते हैं।

5

आपका डिज़ाइन ठीक लगता है। हम एपीआई गेटवे दृष्टिकोण का उपयोग कर हमारी माइक्रोस्कोप परियोजना भी बना रहे हैं। गेटवे सेवा (जीडब्ल्यू) सहित सभी सेवाएं कंटेनरकृत हैं (हम डॉकर का उपयोग करते हैं) जावा एप्लिकेशन (वसंत बूट या ड्रॉपविज़ार्ड)। समान वास्तुकला भी नोडजेज़ का उपयोग करके बनाया जा सकता है।कुछ विषयों अपने प्रश्न के साथ संबंधित उल्लेख करने के लिए:

  • प्रमाणीकरण/प्राधिकरण: गिनीकृमि सेवा ग्राहकों के लिए एकल प्रवेश बिंदु है। JSON वेब टोकन (JWT) का उपयोग करके जीडब्ल्यू में सभी प्रमाणीकरण/प्राधिकरण संचालन को संभाला जाता है जिसमें नोडजेस लाइबेरे भी होते हैं। हम जेडब्ल्यूटी टोकन में उपयोगकर्ता की भूमिकाओं जैसे प्राधिकरण की जानकारी रखते हैं। एक बार टोकन जीडब्लू में जेनरेट हो जाने के बाद और क्लाइंट पर लौटाया जाता है, प्रत्येक अनुरोध पर क्लाइंट HTTP शीर्षलेख में टोकन भेजता है तो हम टोकन की जांच करते हैं कि ग्राहक को विशिष्ट सेवा या टोकन की कॉल करने की आवश्यक भूमिका है या नहीं। इस दृष्टिकोण में, आपको सर्वर के सत्र में उपयोगकर्ता के सत्र को ट्रैक रखने की आवश्यकता नहीं है। असल में कोई सत्र नहीं है। आवश्यक जानकारी जेडब्ल्यूटी टोकन में है।
  • सेवा खोज/लोड संतुलन: हम डोकर का उपयोग, डोकर झुंड जो डोकर इंजन (डोकर v.12.1 के बाद) में बंडल एक डोकर इंजन क्लस्टरिंग उपकरण है। हमारी सेवाएं डॉकर कंटेनर हैं। डॉकर का उपयोग करके कंटेनरकृत दृष्टिकोण सेवाओं को तैनात, बनाए रखने और स्केल करना आसान बनाता है। प्रोजेक्ट की शुरुआत में, हमने हैप्रोक्सी, रजिस्ट्रार और कंसुल को आपके ड्राइंग के समान सेवा खोज और लोड संतुलन को लागू करने के लिए एक साथ उपयोग किया। तब हमें एहसास हुआ, हमें सेवा खोज और भार संतुलन के लिए उनकी आवश्यकता नहीं है जब तक हम डॉकर नेटवर्क बनाते हैं और डॉकर स्वार का उपयोग करके हमारी सेवाओं को तैनात करते हैं। इस दृष्टिकोण के साथ आप आसानी से dev, beta, prod जैसे प्रत्येक वातावरण के लिए अलग-अलग नेटवर्क बनाकर अलग-अलग वातावरणों में अलग-अलग वातावरण बना सकते हैं। एक बार जब आप नेटवर्क बनाते हैं और सेवाओं को तैनात करते हैं, तो सेवा खोज और लोड संतुलन आपकी चिंता नहीं है। उसी डॉकर नेटवर्क में, प्रत्येक कंटेनर में अन्य कंटेनर के DNS रिकॉर्ड्स होते हैं और उनके साथ संवाद कर सकते हैं। डॉकर झुंड के साथ, आप एक कमांड के साथ आसानी से सेवाओं को स्केल कर सकते हैं। सेवा के प्रत्येक अनुरोध पर, डॉकर सेवा के उदाहरण के लिए अनुरोध (भार संतुलन) वितरित करता है।