प्लग्जेबल गोलॅंग Applicationप्लिकेशन कसे तयार करावे आणि एडब्ल्यूएस लेम्बडा लेयर्सचा लाभ कसा मिळवावा.

गोलंग - आपले लक्ष का द्यायचे?

गोलंग ही एक मुक्त स्त्रोत प्रोग्रामिंग भाषा आहे जी Google ने विकसित केली आणि अंमलात आणली. आधुनिक अनुप्रयोगांमध्ये, विशेषत: मेघामध्ये याचा मोठ्या प्रमाणात वापर केला जातो. ती सर्वात वैशिष्ट्यपूर्ण वैशिष्ट्ये आहेत:

  • गोलंग स्थिरपणे लिहिलेले आहे - हे कमी लवचिकता देते परंतु त्रुटींपासून आपले संरक्षण करते,
  • हे ऑब्जेक्ट देणार नाही. तथापि, आपण स्ट्रक्चर्स आणि इंटरफेस तयार करू शकता आणि त्या परिणामी 4 पैकी 3 ओओपी तत्त्वे: डेटा अ‍ॅबस्ट्रॅक्शन, एन्केप्सुलेशन आणि पॉलिमॉर्फिझम. हरवलेले सर्व वारसा आहे
  • गोरोटीन्स! - मी वापरलेल्या प्रकाशाच्या तंतुंची उत्तम अंमलबजावणी. गो ऑपरेटरद्वारे आपण सहजपणे एक नवीन धागा तयार करू शकता आणि भिन्न गोरोटीन्स दरम्यान चॅनेलद्वारे संप्रेषण करू शकता.
  • हे सर्व अवलंबितांसह एका बायनरी फाईलमध्ये संकलित केले आहे - यापुढे पॅकेज विरोधाभास नाहीत!

व्यक्तिशः, मी गोलंगला मी दररोज वापरत असलेली सर्वात मोठी भाषा मानतो. तथापि, हा लेख आपले प्रथम कार्य तयार करणे किंवा "हॅलो वर्ल्ड" मुद्रित करण्याबद्दल नाही. मी तुम्हाला थोडी अधिक प्रगत सामग्री दर्शवितो. आपण नवशिक्या असल्यास आणि गोलंगबद्दल अधिक जाणून घेऊ इच्छित असल्यास, कृपया मुख्य पृष्ठास भेट द्या.

एडब्ल्यूएस लंबडा आणि गोलंग

नोव्हेंबर २०१ in मध्ये Amazonमेझॉन वेब सर्व्हिसेसने जाहीर केलेल्या सार्वजनिक मेघमधील एडब्ल्यूएस लेम्बडा सर्वात लोकप्रिय सर्व्हरलेस संगणकीय सेवांपैकी एक आहे. डायनामोडीबी, एसएनएस किंवा सर्व्हर सेट न करता किंवा व्यवस्थापित केल्याशिवाय एचटीटीपी ट्रिगर सारख्या इव्हेंटला प्रतिसाद म्हणून आपण आपला कोड चालवू शकता! आपल्याला माहित आहे काय खरोखर काय चांगले आहे? जानेवारी 2018 पासून ते गोलंग टर्मचे समर्थन करत आहे. एडब्ल्यूएस लेंबडा सह कार्य करणे खरोखर सोपे आहे - फक्त आपला कोड आणि सर्व अवलंबिता (आपण गोलांग वापरत असल्यास एकल बायनरी) सह संकुचित पॅकेज अपलोड करा.

फास्ट फॉरवर्ड, 4 वर्षांनंतर, 2018 पुन्हाः आविष्कार एडब्ल्यूएसने लॅम्बडा लेयर्स रीलिझ केल्या ज्यामुळे आपल्याला विविध फंक्शन्ससाठी सामायिक केलेला डेटा एका किंवा अगदी एकाधिक AWS खात्यात व्यवस्थापित करण्याची परवानगी मिळते! उदाहरणार्थ, जर आपण पायथन वापरत असाल तर आपण इतर अवलंबन अतिरिक्त थरात घालू शकता जे नंतर इतर लॅम्बडास वापरु शकतील. यापुढे प्रत्येक झिप केलेल्या पॅकेजमध्ये भिन्न अवलंबिता जोडण्याची आवश्यकता नाही! गोलंग जगात परिस्थिती वेगळी आहे कारण एडब्ल्यूएस लेम्बडाला कंपाईल बायनरी फायली अपलोड करणे आवश्यक आहे. एडब्ल्यूएस लेम्बडा थरांचा आम्हाला कसा फायदा होईल? उत्तर सोपे आहे - गोलंग प्लगइन्ससह मॉड्यूलर अनुप्रयोग तयार करा!

गोलंग प्लगइन्स - मॉड्यूलर अनुप्रयोग तयार करण्याचा एक मार्ग

गोलांग प्लगइन्स हे Go1.8 मध्ये प्रकाशित केलेले वैशिष्ट्य आहे जे आपणास सामायिक केलेल्या लायब्ररी (.so फायली) गतिकरित्या लोड करण्याची परवानगी देते. आपल्या कोडचा काही भाग वेगळ्या लायब्ररीत निर्यात करण्याचा किंवा दुसर्‍या एखाद्याने तयार केलेला आणि तयार केलेला प्लगइन वापरण्याचा पर्याय आहे. तथापि, त्यास काही मर्यादा आहेत हे प्रोत्साहित करते:

  • आपले प्लगइन एकल मुख्य मॉड्यूल असणे आवश्यक आहे,
  • आपण केवळ ईएलएफ चिन्हे म्हणून निर्यात केलेली कार्ये आणि चल लोड करू शकता.
  • स्थिर टायपिंगमुळे आपल्याला प्रत्येक भारित चिन्हास योग्य प्रकारात रूपांतरित करावे लागेल. सर्वात वाईट परिस्थितीत, आपल्याला आपल्या कोडमधील योग्य इंटरफेस परिभाषित करण्याची आवश्यकता आहे,
  • हे केवळ लिनक्स आणि मॅकओएसवर कार्य करते. व्यक्तिशः, मी हे एक तोटा म्हणून पाहत नाही :)

आपले प्रथम प्लगइन तयार आणि चाचणी घ्या

आता आपलं पहिलं प्लगइन बनवू. उदाहरण म्हणून आम्ही स्ट्रिंग एन्क्रिप्शनसाठी एक सोपा मॉड्यूल बनवू. मूलभूत गोष्टींवर परत जाऊ आणि सीझर आणि वर्मन या दोन सोप्या एन्क्रिप्शन अल्गोरिदमची अंमलबजावणी करू.

  • सीझर सायफर हा अल्गोरिदम आहे ज्युलियस सीसेजने प्रथम वापरला. हे मजकुरामधील प्रत्येक अक्षरे स्थानांची निर्दिष्ट संख्या बदलते. उदाहरणार्थ, आपल्याला की 4 सह गोलांग हा शब्द एनक्रिप्ट करायचा असेल तर तुम्हाला केटीपेक मिळेल. डिक्रिप्शन त्याच प्रकारे कार्य करते. आपल्याला सर्व करायचे आहे की अक्षरे उलट दिशेने हलवा.
  • वर्मान सिफर समान बदलत्या कल्पनेवर आधारित सीझर सायफरसारखेच आहे. फरक हा आहे की आपण प्रत्येक अक्षरास स्थानांची भिन्न संख्या हलवित आहात. मजकूर डिक्रिप्ट करण्यासाठी आपल्याला मजकूर कूटबद्ध केलेल्या स्थानांसह की आवश्यक आहे. उदाहरणार्थ, आपण गोलांग हा शब्द की [-1, 4, 7, 20, 4, -2] सह कूटबद्ध करू इच्छित असाल तर आपल्याला भविष्य मिळेल.

या उदाहरणाची संपूर्ण अंमलबजावणी येथे आढळू शकते.

प्लगइन अंमलबजावणी

खालील स्निपेटमध्ये वर नमूद केलेल्या दोन अल्गोरिदमची अंमलबजावणी आहे. प्रत्येकासाठी, आम्ही आपला मजकूर कूटबद्ध आणि डिक्रिप्ट करण्याच्या दोन पद्धती लागू करतो:

आपण पाहू शकता की, आम्ही येथे 3 भिन्न चिन्हे निर्यात केली आहेत (गोलंग केवळ वरील अभिज्ञेने सुरू होणारे हे अभिज्ञापक निर्यात करतात):

  • एनक्रिप्टेसीसर - सीनसार अल्गोरिदम वापरून मजकूर कूटबद्ध करणारी स्ट्रिंग.
  • डिक्राईप्टसिज़र - फनक (इंट, स्ट्रिंग) स्ट्रिंग जे केसर अल्गोरिदम वापरून मजकूर डीकोड करते,
  • वर्मनसिफर - व्हर्मानिफर प्रकाराचे व्हेरिएबल, जे 2 पद्धती लागू करतात: एनक्रिप्टः फंक्शन (स्ट्रिंग) स्ट्रिंग आणि डिक्रिप्टः फंक () (* स्ट्रिंग, एरर)

हे प्लगइन संकलित करण्यासाठी आपल्याला पुढील आदेश चालविणे आवश्यक आहे:

बिल्ड-बिल्टमोड = प्लगइन -ओ प्लगइन / सिफर.सो प्लगइन / सिफर.गो जा

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

प्लगइन लोड आणि चाचणी घ्या

जेव्हा आमच्या अ‍ॅपमध्ये कंपाईल केलेले प्लगइन वापरायचे असेल तेव्हा मजा सुरू होते. चला एक साधे उदाहरण बनवूः

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

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

अनुप्रयोग संकलित करण्यासाठी आणि चालविण्यासाठी खालील आज्ञा वापरा:

जा app.go ./app तयार करा

आउटपुटमध्ये, आपण अल्गोरिदम योग्यरित्या कार्य करीत असल्याचा पुरावा म्हणून एनक्रिप्टेड आणि डिक्रीप्ट केलेला मजकूर पहावा.

एडब्ल्यूएस लेम्बडा मधील प्लगइन वापरा

AWS Lambda मध्ये आपले प्लगइन वापरण्यासाठी आम्हाला आमच्या अनुप्रयोगात काही बदल करणे आवश्यक आहे:

  • एडब्ल्यूएस लेम्बडा लेम्बडा कंटेनरमध्ये / ऑप्ट निर्देशिकामध्ये थर चढवित आहे, म्हणून आम्हाला या निर्देशिकेतून आमचे प्लग-इन लोड करावे लागेल.
  • आम्हाला एक हँडलर फंक्शन तयार करण्याची आवश्यकता आहे जी लॅम्बडा इंजिनद्वारे आमच्या चाचणी इव्हेंटवर प्रक्रिया करण्यासाठी वापरली जाईल.

खालील स्निपेटमध्ये आमचा अ‍ॅप्लिकेशन आहे जो लॅम्बडा वापरण्यासाठी रुपांतरित झाला आहे:

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

एडब्ल्यूएस लंबडा तैनात

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

सेवा: सिफर सर्व्हिस फ्रेमवर्क आवृत्ती: "> = 1.28.0 <2.0.0" प्रदाता: नाव: ऑब्स रनटाइम: go1.x
थर: सायफरलायर: पथ: बिन / प्लगइन सुसंगत रनटाइम: - go1.x
कार्ये: इंजिन: हँडलर: बिन / सिफरइंगेन पॅकेज: वगळा: - ./** समाविष्ट करा: - ./bin/cipherEngine थर: - {संदर्भ: सिफरलायर लंबडा लायर}

लेयर एरियामध्ये, आम्ही आधीच तयार केलेल्या प्लग-इनच्या मार्गासह एकल स्तर परिभाषित केला आहे - हे लॅम्बडा फंक्शनसह एकत्रित प्रदान केले आहे. आपण 5 भिन्न स्तर परिभाषित करू शकता, ज्याचा क्रम खरोखर महत्वाचा आहे. ते समान / ऑप्ट निर्देशिकामध्ये आरोहित आहेत, जेणेकरून जास्त संख्येसह स्तर पूर्वीच्या आरोहित स्तरांमधून फायली अधिलिखित करु शकतात. प्रत्येक स्तरासाठी आपण कमीतकमी 2 पॅरामीटर्स निर्दिष्ट करणे आवश्यक आहे: स्तराच्या स्त्रोतासह निर्देशिकेचा मार्ग (आपल्या बाबतीत प्लग-इन बायनरी फाईलकडे मार्ग) आणि सुसंगत रनटाइमची सूची.

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

आमच्या कॉन्फिगरेशन फाईल सर्व्हरलेस.इएमएल तयार होताच, आपल्याला शेवटची गोष्ट संकलित करणे, प्लग इन करणे आणि आमच्या अ‍ॅपला उपयोजित करणे आवश्यक आहे. यासाठी आम्ही साधे मेकफाइल वापरू शकतो:

.फोन: बिल्डप्लगिन स्वच्छपणे तैनात करा
बिल्ड: डेप सेफ -v एनव्हीओ जीओओएस = लिनक्स गो बिल्ड -ldflags = "-s -w" -बिन / सिफरइंजिन सिफरइंजिन / मेन.गो
buildPlugin: env GOOS = Linux go build -ldflags = "- s -w" -buildmode = प्लगइन -ओ बिन / प्लगइन / सिफर.सो ../plugin/cipher.go
स्वच्छ: आरएम-आरएफ. / बिन ./ विक्रेता गॉप्ग.लॉक
उपयोजितः स्वच्छ बिल्डप्लगिन बिल्ड एसएलएस उपयोजित --verbose

आपण पुढील आज्ञा चालवून आपले कार्य तयार आणि उपयोजित करू शकता:

प्रदान

AWS Lambda वापरुन पहा

आधी नमूद केल्याप्रमाणे, कार्यक्रमाच्या प्रतिसादात एडब्ल्यूएस लॅम्बडा कोड चालतो. तथापि, आम्ही कोणतेही कार्यक्रम ट्रिगर कॉन्फिगर केलेले नाही म्हणून आमच्या मदतीशिवाय त्यांना कॉल केले जाऊ शकत नाही. आम्हाला हे सर्व्हरलेस फ्रेमवर्क किंवा scस्कली टूलसह स्वहस्ते करावे लागेल:

sls कॉल -f फंक्शन-नेम ऑब्स लंबडा इनव्होक - फंक्शन-नेम फंक्शन-नेम आउटपुट-फाइल

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

सारांश

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

  • जटिल अल्गोरिदमची अंमलबजावणी जी इतर अनुप्रयोगांद्वारे वापरली जाऊ शकते, उदा. व्हिडिओ कोडिंग किंवा कूटबद्धीकरण अल्गोरिदम.
  • कोड प्रकाशित न करता आपले अल्गोरिदम इतरांसह सामायिक करा.