paint-brush
उद्देश्य-संचालित माइक्रोसर्विस डिज़ाइनद्वारा@johnjvester
1,513 रीडिंग
1,513 रीडिंग

उद्देश्य-संचालित माइक्रोसर्विस डिज़ाइन

द्वारा John Vester2022/06/30
Read on Terminal Reader
Read this story w/o Javascript

बहुत लंबा; पढ़ने के लिए

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

Company Mentioned

Mention Thumbnail
featured image - उद्देश्य-संचालित माइक्रोसर्विस डिज़ाइन
John Vester HackerNoon profile picture

जब मैंने अपना करियर शुरू किया था, तब मुझे बज़वर्ड्स की उम्मीद नहीं थी। उन दिनों, अधिकांश तकनीकी समाचार सूचना-वीक और नेटवर्क वर्ल्ड जैसे पेपर-आधारित साप्ताहिक प्रकाशनों में आते थे। मुझे याद है कि मैं खुद को सोच रहा था, "यार, वे हर हफ्ते इन्हीं शब्दों का बार-बार इस्तेमाल कर रहे हैं।"


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


हालाँकि, हाल ही में, मैंने देखा कि buzzwords का उपयोग प्लेसहोल्डर के रूप में किया जाता है, जहाँ उनका कोई मतलब नहीं होता है। माइक्रोसर्विसेज, इवेंट-संचालित आर्किटेक्चर, एआई और एमएल जैसे शब्दों का उपयोग संदर्भों में किया जाता है, जो मुझे यह निष्कर्ष निकालने के लिए प्रेरित करता है कि बहुत से लोग इन शर्तों को पूरी तरह से नहीं समझते हैं। मुझे भी इसकी उम्मीद नहीं थी...


एक गलत समझे गए प्रश्न से संबंधित इस साधारण बातचीत की कल्पना करें:


व्यक्ति # 1: आपकी उड़ान कितने बजे रवाना होती है?

व्यक्ति # 2: इस साल के अंत में।


जबकि व्यक्ति # 2 एक उत्तर प्रदान करता है जो गलत नहीं है, उत्तर वास्तव में व्यक्ति # 1 की पूछताछ के लिए कोई मूल्य नहीं देता है।


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


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

उद्देश्य-संचालित माइक्रोसर्विस डिज़ाइन

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


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


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


आइए एक बहुत ही सरल उदाहरण का उपयोग करके एक उद्देश्य-संचालित माइक्रोसर्विस डिज़ाइन के निर्माण पर ध्यान दें।

डॉकर-आधारित माइक्रोसर्विस बनाना

चीनी लिंग भविष्यवक्ता एक ग्रिड प्रणाली है जिसका उपयोग जन्म के समय बच्चे के लिंग का पूर्वानुमान लगाने के लिए किया जाता है। यह गर्भाधान के महीने और गर्भाधान के समय माँ की वर्तमान आयु प्रदान करके किया जाता है।


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


नीचे चीनी जेंडर प्रेडिक्टर ग्रिड का एक उदाहरण दिया गया है:



उदाहरण के तौर पर, एक 18 वर्षीय मां जिसने जनवरी में एक बच्चे को जन्म दिया, वह एक मादा बच्चा पैदा करेगी।


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


 { "month": 1, "age": 18, "gender": "female", "errorMessage": null }


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


सेवा के लिए कोड GitLab पर निम्न पते पर पाया जा सकता है:

https://gitlab.com/johnjvester/birth-predictor

रेंडर ब्लूप्रिंट का उपयोग करके एक प्रतिलिपि प्रस्तुत करने योग्य पैटर्न बनाना

मैंने निम्नलिखित प्रकाशनों में __ Render __platform के बारे में लिखा है:


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


चूंकि जन्म-पूर्वसूचक सेवा में एक बहु-चरण Dockerfile शामिल है, इसलिए मैं यह देखना चाहता था कि रेंडर प्लेटफॉर्म पर Docker- आधारित सेवा को तैनात करना कितना आसान है। हालाँकि, मैंने देखा खाका विनिर्देश और यह भी देखना चाहता था कि यह कैसे काम करता है।

ब्लूप्रिंट क्या है?

एक ब्लूप्रिंट कोड (IaC) के रूप में इन्फ्रास्ट्रक्चर का रेंडर का कार्यान्वयन है। IaC भी कुछ ऐसा है जिसे मैं "* कोड के रूप में" नामक एक बड़ी अवधारणा में समूहित करता हूं। जिन संगठनों को कई सेवाओं की तैनाती का प्रबंधन करने की आवश्यकता होती है या जिनके पास बहुत सारे विकल्पों की आवश्यकता वाली सेवाएं होती हैं, वे अपने रेंडर इंफ्रास्ट्रक्चर (सेवाएं, डेटाबेस और पर्यावरण समूह) को एक render.yaml फ़ाइल में कोड के रूप में परिभाषित कर सकते हैं।

रेंडर ब्लूप्रिंट का उपयोग करना

ब्लूप्रिंट उदाहरण पर निर्माण प्रदान किया गया यहां , मैं डॉकर कंटेनरों के माध्यम से चलने वाली अपनी स्प्रिंग बूट सेवाओं के लिए जल्दी से एक ब्लूप्रिंट बनाने में सक्षम था:


 services: - type: web name: restful-api-spring-boot env: docker region: ohio # optional (defaults to oregon) plan: free # optional (defaults to starter) branch: master # optional (uses repo default) numInstances: 1 # optional (defaults to 1) healthCheckPath: /actuator/health envVars: - key: SERVER_PORT value: 443


वहां से, मैंने नाम संपत्ति को अपडेट करने और रेपो संपत्ति जोड़ने के लिए जन्म-भविष्यवक्ता सेवा के लिए वाईएएमएल डेटा को अनुकूलित किया, जैसा कि नीचे बताया गया है:


 services: - type: web name: birth-predictor env: docker repo: https://gitlab.com/johnjvester/birth-predictor region: ohio # optional (defaults to oregon) plan: free # optional (defaults to starter) branch: master # optional (uses repo default) numInstances: 1 # optional (defaults to 1) healthCheckPath: /actuator/health envVars: - key: SERVER_PORT value: 443


यह जानकारी birth-predictor भंडार की जड़ में, render.yaml नामक फ़ाइल में संग्रहीत की गई थी। इस परिवर्तन को करने और मर्ज करने के बाद, सेवा रेंडर प्लेटफॉर्म पर परिनियोजन के लिए तैयार थी।


रेंडर डैशबोर्ड से, मैंने नया चुना | खाका विकल्प:


इसके बाद, मैंने जन्म-भविष्यवक्ता भंडार का चयन किया, जिसे मैंने अपने GitLab खाते से जुड़े निर्देशों का उपयोग करके जोड़ा यहां .


चूंकि मैं एक ब्लूप्रिंट का उपयोग कर रहा था, मुझे बस अपनी नई सेवा के लिए एक सेवा समूह का नाम प्रदान करना था:


लागू करें बटन दबाने के बाद, परिनियोजन प्रक्रिया शुरू हुई:


कुछ मिनट बाद, सेवा को बिना किसी समस्या के तैनात किया गया:


कार्रवाई में जन्म भविष्यवक्ता

जन्म-भविष्यवाणी सेवा चलने के साथ, मैं एक नई भविष्यवाणी प्राप्त करने के लिए निम्नलिखित कर्ल कमांड जारी कर सकता हूं:


 curl --location --request POST 'https://birth-predictor.onrender.com/predict' \ --header 'Content-Type: application/json' \ --data-raw '{ "conceptionMonth" : 11, "conceptionAge" : 43 }'


परिणामी प्रतिक्रिया पेलोड इस तरह दिखता है:


 { "month": 11, "age": 43, "gender": "male", "errorMessage": null }


यह जानकारी सिर्फ गर्भधारण के महीने और मेरी पत्नी की उम्र से मेल खाती है जब हमारे बेटे (फिनी) की कल्पना की गई थी। अगस्त 2017 में, वह आया!


ठीक वैसे ही जैसे उन्होंने किंग राजवंश के दौरान किया था, हम अपने बच्चे के लिंग का सफलतापूर्वक पूर्वानुमान लगाने के लिए चीनी लिंग भविष्यवक्ता पर भरोसा करने में सक्षम थे।

निष्कर्ष

2021 से, मैं निम्नलिखित मिशन वक्तव्य के अनुसार जीने की कोशिश कर रहा हूं, जो मुझे लगता है कि किसी भी आईटी पेशेवर पर लागू हो सकता है:


“अपना समय उन सुविधाओं/कार्यक्षमताओं को प्रदान करने पर केंद्रित करें जो आपकी बौद्धिक संपदा के मूल्य को बढ़ाती हैं। अन्य सभी चीजों के लिए ढांचे, उत्पादों और सेवाओं का लाभ उठाएं।"

- जे वेस्टर


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


एक बार सेवा, घटक, या एप्लिकेशन तैयार हो जाने के बाद, टीमों को केवल अपने रिपॉजिटरी की जड़ में render.yaml फ़ाइल को शामिल करने की आवश्यकता होती है, फिर ब्लूप्रिंट विकल्प का उपयोग करके रेंडर प्लेटफॉर्म पर एक नई सेवा बनाएं। आगे बढ़ते हुए, कनेक्टेड रिपोजिटरी के लिए कोई भी अपडेट विख्यात शाखा को कोड देने के कुछ मिनट बाद ऑटो-डिप्लॉय करेगा।


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


मुझे विश्वास है कि buzzwords हमेशा प्रौद्योगिकी क्षेत्र का हिस्सा रहेगा। हालाँकि, उन buzzwords के पीछे के सच्चे इरादे को समझना और अपनाना कुछ ऐसा है जो मुझे उम्मीद है कि प्रौद्योगिकीविद् इसका पीछा करेंगे।


यदि आप इस प्रकाशन के स्रोत कोड में रुचि रखते हैं, तो आप इसे निम्नलिखित पते पर GitLab पर पा सकते हैं:


https://gitlab.com/johnjvester/birth-predictor


आपका दिन वाकई बहुत अच्छा हो!