नोडजेएस अ‍ॅप सर्व्हर रहित कसा करावा

आशा आहे की आपण सर्वरलेस माझ्याइतकेच प्रेम कराल कारण ही या विषयावरील आणखी एक पोस्ट आहे.

ते एक साधा सर्व्हर-कमी आरईएसटी API असल्यास, आपले AWS: Lambda + API गेटवे मधील सेटअप अगदी स्पष्ट आहे.

परंतु आपल्या बॅकएंडमध्ये इतर (मायक्रो) सेवा कशा असतील? आपणास माहित आहे की, आपला सर्व अनुप्रयोग कोड एका अखंड AWS लॅम्बडा फंक्शनमध्ये ठेवणे ही सर्वोत्तम कल्पना नाही.

आव्हान

आम्हाला फक्त सर्व्हरलेस मायक्रो सर्व्हिसेस म्हणून अनुप्रयोग मॉड्यूल्स प्रदान करायच्या आहेत ज्यांना एकमेकांशी संप्रेषण देखील करावे लागेल. सेवांमधील संप्रेषण शक्यतो एसीएलच्या प्रकाराद्वारे नियमित केले जावे.

प्रयत्न 1. एपीआय गेटवे

समस्येचे निराकरण करण्याचा प्रयत्न करताना मला मिळालेला हा पहिला विचार आहे: फक्त एपीआय गेटवेद्वारे सर्व मायक्रोसेव्हर्सेस उघड करा. समस्या अशी आहे ... तयार केली गेलेली एपीआय सार्वजनिक आहेत.

ही समस्या का आहे? उदाहरणार्थ, अधिकृततेद्वारे प्रवेश प्रतिबंधित असला तरीही आम्हाला बिलिंग सेवा जगात कुठेही उपलब्ध व्हायची नाही.

ठीक आहे, आपण एपीआय खाजगी बनवू शकता, परंतु सुरक्षितता मार्गदर्शक तत्त्वे खूप मर्यादित आहेत:

आपण याद्वारे आपल्या एपीआयला सुरक्षितपणे विनंती करण्यास अनुमती देण्यासाठी एपीआय गेटवे संसाधन धोरणे वापरू शकता:
* विशिष्ट एडब्ल्यूएस खात्याचा वापरकर्ता * निर्दिष्ट स्त्रोत आयपी पत्ता श्रेणी किंवा सीआयडीआर ब्लॉक्स * निर्दिष्ट आभासी खाजगी ढग (व्हीपीसी) किंवा व्हीपीसी अंतिम बिंदू (कोणत्याही खात्यात)

अशा प्रकारच्या सेवांमधील संप्रेषण नियंत्रित करणे खूप अवघड आहे. येथे करण्याचा एकमेव मार्ग म्हणजे स्वतंत्र व्हीपीसीमध्ये सेवा देणे, जे बरेच काम आहे.

प्रयोग 2. लंबडा

आम्ही फक्त प्रत्येक मायक्रो सर्व्हिसला स्वतंत्र एडब्ल्यूएस लेम्बडामध्ये का ठेवत नाही? हे समस्येचे निराकरण करेल?

होय, ही खरोखर सर्व्हरलेस मायक्रो सर्व्हिस आहे आणि आपण आंतर-सेवा प्रवेश ऑप्टिमाइझ करण्यासाठी आयएएम पॉलिसी वापरू शकता. तथापि, हे "सोपे" नाही.

मला माहित आहे की या दिवसात डिलिव्हरी युनिट म्हणून छोटी भूमिका करणे अगदी सामान्य आहे. आपल्या सेवेकडे एकापेक्षा अधिक अंतिम बिंदू / पद्धत / फंक्शन असल्यास त्यास एकाधिक लंबदा म्हणून प्रदान करणे चांगले.

मला त्याचे फायदे समजतात, परंतु आपण देखभाल आणि विकासाच्या सुलभतेचा त्याग करता. तसेच, लॅम्बडा फंक्शन्सच्या सेट म्हणून सेवा उघडकीस आणण्याची कल्पना मला खरोखर आवडत नाही. बिलिंगचा व्यवहार करणार्‍या अनेक स्वतंत्र कार्यांची कल्पना करा? हा यापुढे मर्यादित संदर्भ नाही. अशी काही प्रकरणे आहेत जेव्हा अशा ग्रॅन्युलॅरिटी उपयुक्त ठरू शकते, हे एक दुर्मिळ प्रकरण आहे.

प्रयत्न करा 3. फॅट लेम्बडा

आम्ही प्रत्यक्षात एकल लॅम्बडा म्हणून (एपीआय गेटवेशिवाय, अर्थातच) बरीच समाप्ती देऊ शकतो?

जर आम्ही हे करू शकलो तर आम्ही मागील पर्यायांचा पुरेपूर फायदा घेऊ, परंतु आम्ही आमच्या उपयोजन युनिट्सचे ग्रॅन्युलॅरिटी देखील निवडू शकतो.

मला पाहिजे ते येथे आहे: आपण लागू करू शकणारी कोणतीही सेवा पद्धतींसह एक सोपी, जुनी जेएस ऑब्जेक्ट असावी. आपल्या ऑब्जेक्ट आणि एडब्ल्यूएस लेम्बडा दरम्यान गोंद कोडच्या काही ओळी जोडून हे करणे सोपे आहे.

त्याची माझी अंमलबजावणी येथे आहेः aws-rpc. हे नोडजेस मॉड्यूल लॅम्बडाहँडलर फंक्शनचा पर्दाफाश करते जिथे आपण केवळ एक ऑब्जेक्ट पास करता आणि ते लॅम्बडामध्ये प्रवेश करू शकणार्‍या सर्व वापरकर्त्यांसाठी स्वयंचलितपणे उपलब्ध केले जाते:

'एड्स-आरपीसी' वरून {लॅम्बडाहँडलर import आयात करा; './TestServiceImpl' वरून {टेस्ट सर्व्हिसआयम्पल Import आयात करा;
// हे आपले स्टेजिंग युनिट आहे // आपण हे लॅम्ब्डा हँडलर फंक्शन एक्सपोर्ट कॉन्स्ट हँडलर = लॅम्बडाहँडलर (नवीन टेस्ट सर्व्हिसइम्पल ()) म्हणून निर्दिष्ट करता;

आता आपण सहजपणे "हँडलर" एडब्ल्यूएस लेम्बडा म्हणून प्रदान करू शकता. पद्धती कशा म्हणायच्या:

'./TestS सर्विस' वरून {टेस्ट सर्व्हिस Import आयात करा;
कॉन्स्ट क्लायंट = createClient ची प्रतीक्षा करा ("लॅम्बडानेम", "चाचणी"); कन्सोल.लॉग (क्लायंट.टेस्टची प्रतीक्षा ());

कृपया लक्षात घ्या की क्लायंट स्टब ऑब्जेक्टसाठी पद्धती व्युत्पन्न करण्यास सक्षम होण्यासाठी, आपण उदाहरणाप्रमाणे तयार करण्यासाठी सर्व पद्धती नावे तयार करणे आवश्यक आहे.

हे आवश्यक आहे कारण जेएसकडे टाइपस्क्रिप्ट इंटरफेसविषयी रनटाइम माहिती नाही. मी अमूर्त वर्गांसह याची अंमलबजावणी करू शकलो परंतु मला ¯ \ _ (ツ) _ / ¯ आवडत नाही.

बोनस! आपण हे सर्व स्थानिक पातळीवर करू शकता!

मला वाटते की तुमच्या स्थानिक विकासाचे वातावरण शक्य तितके आरामदायक असेल. या कारणास्तव, मी एडब्ल्यूएससाठी काही तरतूद न करता स्थानिकपणे सेवा आणि क्लायंट चालविण्याची क्षमता देखील जोडली आहे (फंक्शन्स रन सर्व्हर आणि क्रिएनक्लाइंट पहा). आपल्याला गीटहब रेपॉजिटरी मध्ये उदाहरणे सापडतील.

सारांश

जेव्हा आपण ढग प्रदाते ऑफर करतात आणि आपल्या पायाभूत सुविधांची दुरुस्ती करतात अशा सेवांमध्ये आपण हरवल्यास हे करणे सोपे आहे.

मी नेहमी विचार करू शकतो असा सर्वात सोपा आणि स्पष्ट उपाय निवडतो. तसेच, हे नेहमी लक्षात ठेवा की बर्‍याच तंत्रे आणि पद्धती इतर प्लॅटफॉर्मवरुन पुन्हा वापरल्या जाऊ शकतात (ठळक नोडजेएस लॅम्बडाची कल्पना जावा जगाच्या तथाकथित बोल्ड ग्लासेसद्वारे प्रेरित आहे).

आपणास हा विषय आवडत असल्यास, खालील देखील वाचा:

  • आपल्याला उत्कृष्ट सर्व्हरलेस आर्किटेक्चर कसे तयार करावे हे शिकण्याची आवश्यकता आहे
  • एक विनामूल्य सर्व्हरलेस सीआय / सीडी पाइपलाइन कशी तयार करावी: 3 सोपी उदाहरणे
  • संपूर्ण प्रदेशात डायनामोडीबीची सोपी प्रतिकृती
  • एक बहु-प्रादेशिक अनुप्रयोग कसा तयार करावा (आणि पे शून्य)
  • जावा वेब अॅप सर्व्हरलेस करा

टिप्पण्या, पसंती आणि शेअर खूप कौतुक आहेत. तळाशी!