কীভাবে প্লাজেবল গোলং অ্যাপ্লিকেশন তৈরি করতে হবে এবং এডাব্লুএস ল্যাম্বদা স্তরগুলি থেকে বেনিফিট।

গোলং - এটি আপনার মনোযোগ কেন মূল্য?

গোলাং হ'ল একটি মুক্ত উত্স প্রোগ্রামিং ভাষা, যা গুগল দ্বারা বিকাশিত এবং প্রয়োগ করা হয়। এটি আধুনিক অ্যাপ্লিকেশনগুলিতে বিশেষত মেঘের মধ্যে খুব ব্যাপকভাবে ব্যবহৃত হয়। এগুলি সর্বাধিক বৈশিষ্ট্যযুক্ত বৈশিষ্ট্য:

  • গোলং স্থিতিশীলভাবে রচিত - এটি কম নমনীয়তা সরবরাহ করে তবে আপনাকে ত্রুটি থেকে রক্ষা করে,
  • এটি উদ্দেশ্যমূলক নয়। তবে, আপনি কাঠামো এবং ইন্টারফেস তৈরি করতে পারেন এবং এর ফলাফল 4 টি ওওপি নীতিগুলির মধ্যে 3: ডেটা বিমূর্তি, এনক্যাপসুলেশন এবং পলিমারফিজম। যা অনুপস্থিত তা সবই উত্তরাধিকার
  • গোরটাইনস! - আমি ব্যবহার করেছি এমন আলোর ফিলামেন্টগুলির সর্বোত্তম বাস্তবায়ন। গো অপারেটরের সাহায্যে আপনি সহজেই একটি নতুন থ্রেড তৈরি করতে পারেন এবং বিভিন্ন জোরোটাইনগুলির মধ্যে চ্যানেলগুলির মাধ্যমে যোগাযোগ করতে পারেন।
  • এটি সমস্ত নির্ভরতা সহ একক বাইনারি ফাইলে সংকলিত - কোনও প্যাকেজ বিরোধ নেই!

ব্যক্তিগতভাবে আমি গোলংকে আমি প্রতিদিন ব্যবহার করি সবচেয়ে বড় ভাষা হিসাবে বিবেচনা করি। তবে এই নিবন্ধটি আপনার প্রথম ফাংশন তৈরি বা "হ্যালো ওয়ার্ল্ড" মুদ্রণের বিষয়ে নয়। আমি আপনাকে আরও কিছুটা উন্নত জিনিস দেখাব। আপনি যদি শিক্ষানবিশ হন এবং গোলং সম্পর্কে আরও জানতে চান তবে দয়া করে মূল পৃষ্ঠাটি দেখুন।

এডাব্লুএস ল্যাম্বদা ও গোলং

এডাব্লুএস ল্যাম্বদা জন মেঘের মধ্যে অন্যতম জনপ্রিয় সার্ভারলেস কম্পিউটিং পরিষেবাদি, নভেম্বর 2014 এ অ্যামাজন ওয়েব সার্ভিসেস দ্বারা প্রকাশিত। আপনি সার্ভার সেট আপ বা পরিচালনা না করে ডায়নামোডিবি, এসএনএস বা এইচটিটিপি ট্রিগারগুলির মতো ইভেন্টের প্রতিক্রিয়ায় আপনার কোডটি চালাতে পারেন! আপনি কি জানেন আসলে কি দুর্দান্ত? এটি জানুয়ারী 2018 থেকে গোলং শব্দটিকে সমর্থন করে আসছে। এডাব্লুএস ল্যাম্বদার সাথে কাজ করা সত্যিই সহজ - কেবল আপনার কোড এবং সমস্ত নির্ভরতার সাথে সংকোচিত প্যাকেজ আপলোড করুন (আপনি গোলং ব্যবহার করছেন তবে একক বাইনারি)।

দ্রুত এগিয়ে, 4 বছর পরে, 2018 আবার: উদ্ভাবিত এডাব্লুএস ল্যাম্বদা স্তরগুলি প্রকাশ করে যা আপনাকে এক বা একাধিক এডাব্লুএস অ্যাকাউন্টে বিভিন্ন ফাংশনের জন্য ভাগ করা ডেটা সংরক্ষণ এবং পরিচালনা করতে দেয়! উদাহরণস্বরূপ, আপনি যদি পাইথন ব্যবহার করছেন তবে আপনি সমস্ত নির্ভরতা অতিরিক্ত স্তরে রাখতে পারেন যা পরে অন্যান্য ল্যাম্বডাস ব্যবহার করতে পারেন। প্রতিটি জিপড প্যাকেজে আলাদা নির্ভরতা রাখার দরকার নেই! গোলং বিশ্বে পরিস্থিতি অন্যরকম, কারণ এডাব্লুএস লাম্বদার জন্য সংকলিত বাইনারিগুলি আপলোড করা দরকার। আমরা কীভাবে এডাব্লুএস ল্যাম্বদা স্তরগুলি থেকে উপকৃত হতে পারি? উত্তরটি সহজ - গোলং প্লাগইনগুলির সাহায্যে একটি মডুলার অ্যাপ্লিকেশন তৈরি করুন!

গোলং প্লাগইনস - একটি মডুলার অ্যাপ্লিকেশন তৈরির উপায়

গোলাং প্লাগইনগুলি Go1.8 এ প্রকাশিত বৈশিষ্ট্য যা আপনাকে ভাগ করে নেওয়া লাইব্রেরিগুলি (.so ফাইল) গতিশীলভাবে লোড করতে দেয়। আপনার কিছু কোড আলাদা আলাদা লাইব্রেরিতে রফতানি করার বা অন্য কেউ তৈরি ও সংকলিত প্লাগইন ব্যবহার করার বিকল্প রয়েছে। তবে কিছুটা সীমাবদ্ধতা রয়েছে তা উত্সাহজনক:

  • আপনার প্লাগইন অবশ্যই একটি একক প্রধান মডিউল হতে হবে,
  • আপনি কেবল ফাংশন এবং ভেরিয়েবলগুলি লোড করতে পারেন যা ELF প্রতীক হিসাবে রফতানি করা হয়।
  • স্থির টাইপিংয়ের কারণে আপনাকে প্রতিটি ভারযুক্ত প্রতীককে সঠিক ধরণের রূপান্তর করতে হবে। সবচেয়ে খারাপ পরিস্থিতিতে আপনার কোডটিতে আপনার সঠিক ইন্টারফেসটি সংজ্ঞায়িত করতে হবে,
  • এটি কেবল লিনাক্স এবং ম্যাকোস-এ কাজ করে। ব্যক্তিগতভাবে, আমি এটিকে কোনও অসুবিধা হিসাবে দেখছি না :)

আপনার প্রথম প্লাগইন তৈরি করুন এবং পরীক্ষা করুন

এখন আমাদের প্রথম প্লাগইন তৈরি করা যাক। উদাহরণ হিসাবে আমরা স্ট্রিং এনক্রিপশনের জন্য একটি সাধারণ মডিউল তৈরি করব। আসুন বেসিকগুলিতে ফিরে যাই এবং দুটি সহজ এনক্রিপশন অ্যালগরিদমগুলি প্রয়োগ করি - সিজার এবং ভার্মান।

  • সিজার সাইফার হ'ল জুলিয়াস ক্লিজেস প্রথম ব্যবহৃত অ্যালগরিদম। এটি পাঠ্যের প্রতিটি বর্ণকে স্থানের নির্দিষ্ট সংখ্যা স্থানান্তরিত করে। উদাহরণস্বরূপ, আপনি যদি গোল কী শব্দটি কী 4 সহ এনক্রিপ্ট করতে চান তবে আপনি কেটিপেক পাবেন। ডিক্রিপশন একইভাবে কাজ করে। আপনাকে যা করতে হবে তা হ'ল চিঠিগুলি বিপরীত দিকে চালিত করা।
  • ভারমান সিফার একই স্থানান্তরিত ধারণার ভিত্তিতে সিজার সিফারের অনুরূপ। পার্থক্য হ'ল আপনি প্রতিটি অক্ষরকে বিভিন্ন অবস্থানের অবস্থানের দিকে নিয়ে যান। পাঠ্যটি ডিক্রিপ্ট করার জন্য, পাঠ্যটি এনক্রিপ্ট করা হয়েছে এমন অবস্থানগুলির সাথে আপনার কী প্রয়োজন। উদাহরণস্বরূপ, আপনি যদি গোলং শব্দটি কী [-1, 4, 7, 20, 4, -2] দিয়ে এনক্রিপ্ট করতে চান তবে আপনি ভবিষ্যত পাবেন।

এই উদাহরণটির সম্পূর্ণ বাস্তবায়ন এখানে পাওয়া যাবে।

প্লাগিন বাস্তবায়ন

নিম্নলিখিত স্নিপেটে উপরে উল্লিখিত দুটি অ্যালগরিদমের বাস্তবায়ন রয়েছে। প্রত্যেকের জন্য, আমরা আমাদের পাঠ্য এনক্রিপ্ট এবং ডিক্রিপ্ট করার দুটি পদ্ধতি প্রয়োগ করি:

আপনি দেখতে পাচ্ছেন, আমরা এখানে 3 টি পৃথক চিহ্ন রফতানি করেছি (গোলং কেবল এই শনাক্তকারীদের রফতানি করে যা উপরের চিঠিটি দিয়ে শুরু হয়):

  • এনক্রিপটসিজার - ফানক (ইনট, স্ট্রিং) স্ট্রিং যা সিসার অ্যালগরিদম ব্যবহার করে পাঠ্য এনক্রিপ্ট করে।
  • ডিক্রিপটসিসার - ফানক (ইনট, স্ট্রিং) স্ট্রিং যা সিজার অ্যালগরিদম ব্যবহার করে পাঠ্যটি ডিকোড করে,
  • ভারম্যানসিফার - ভারমানসিফার প্রকারের পরিবর্তনশীল, যা 2 টি পদ্ধতি প্রয়োগ করে: এনক্রিপ্ট: ফানক (স্ট্রিং) স্ট্রিং এবং ডিক্রিপ্ট: ফানক () (* স্ট্রিং, ত্রুটি)

এই প্লাগইনটি সংকলন করতে আপনাকে নিম্নলিখিত কমান্ডটি চালনা করতে হবে:

বিল্ড-বিল্ডমোড = প্লাগইন -o প্লাগইন / সিফার.স প্লাগইন / সিফার.গোতে যান

এই মুহূর্তে বিশেষ কিছু নেই - কেবলমাত্র কয়েকটি সাধারণ ফাংশন তৈরি করা হয়েছে এবং -buildmode = প্লাগইন যুক্তি যুক্ত করে একটি মডিউল প্লাগইন হিসাবে সংকলিত হয়েছে।

প্লাগইনটি লোড করুন এবং পরীক্ষা করুন

মজা শুরু হয় যখন আমরা আমাদের অ্যাপ্লিকেশনটিতে সংকলিত প্লাগইনটি ব্যবহার করতে চাই। আসুন একটি সহজ উদাহরণ তৈরি করুন:

প্রথমে আপনাকে গোলং প্লাগইন প্যাকেজটি আমদানি করতে হবে। এটিতে কেবল দুটি ফাংশন রয়েছে - প্রথমটি একটি ভাগ করা লাইব্রেরি লোড করা এবং দ্বিতীয়টি রফতানি প্রতীক খুঁজে পাওয়া। আপনার লাইব্রেরিটি লোড করতে, আপনাকে ওপেন ফাংশনটি ব্যবহার করতে হবে, যার জন্য আপনার ভাগ করা প্লাগ-ইন করার পথ এবং প্লাগ-ইন টাইপের রিটার্ন ভেরিয়েবল নির্দিষ্ট করতে হবে। যদি লাইব্রেরিটি লোড করা যায় না (উদাঃ ভুল পথ বা ক্ষতিগ্রস্থ ফাইল), এই ফাংশনটি ত্রুটিটি ফিরিয়ে আনবে যা পরিচালনা করা দরকার।

পরবর্তী পদক্ষেপটি হ'ল পদ্ধতিটি ব্যবহার করে প্রতিটি রফতানি প্রতীক লোড করা। একটি ছোট অসুবিধা হ'ল আপনাকে প্রতিটি রফতানি ফাংশনটি আলাদাভাবে লোড করতে হবে। তবে, আপনি ভার্মান সিফার প্রতীকটির জন্য একইভাবে একাধিক ফাংশন একত্রিত করতে পারেন। আপনি যে চিহ্নগুলি ব্যবহার করতে চান তা সমস্ত লোড করার পরে, আপনাকে সেগুলি সঠিক ধরণের রূপান্তর করতে হবে। গোলং একটি স্ট্যাটিক্যালি টাইপ করা ভাষা, সুতরাং castালাই ছাড়াই এই চিহ্নগুলি ব্যবহার করার কোনও উপায় নেই। মনে রাখবেন, আপনি যদি এমন কোনও চলক রফতানি করে যা কিছু পদ্ধতি প্রয়োগ করে তবে আপনাকে এটি সঠিক ইন্টারফেস প্রকারে কাস্ট করতে হবে (এটি হ্যান্ডেল করার জন্য আমাকে এনক্রিপশন এজিং ইন্টারফেসটি সংজ্ঞায়িত করতে হয়েছিল)। \ নিউলাইন \ নতুন লাইন

অ্যাপ্লিকেশনটি সংকলন ও চালনা করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

যান বিল্ড app.go ./app

আউটপুটে, আপনার এনক্রিপ্ট করা এবং ডিক্রিপ্ট হওয়া পাঠ্যটি প্রমাণ হিসাবে আলগোরিদিম সঠিকভাবে কাজ করছে তা দেখতে হবে।

এডাব্লুএস ল্যাম্বডায় প্লাগইনটি ব্যবহার করুন

আমাদের ডাব্লুএস ল্যাম্বডায় আমাদের প্লাগইনটি ব্যবহার করার জন্য আমাদের অ্যাপ্লিকেশনটিতে কিছু পরিবর্তন করতে হবে:

  • এডাব্লুএস ল্যাম্বদা ল্যাম্বদা ধারকটিতে / অপ্ট ডিরেক্টরিতে স্তরগুলি মাউন্ট করে, তাই আমাদের এই ডিরেক্টরি থেকে আমাদের প্লাগ-ইন লোড করতে হবে।
  • আমাদের একটি হ্যান্ডলার ফাংশন তৈরি করতে হবে যা ল্যাম্বডা ইঞ্জিন দ্বারা আমাদের পরীক্ষার ইভেন্টটি প্রক্রিয়া করার জন্য ব্যবহৃত হবে।

নিম্নলিখিত স্নিপেটে আমাদের অ্যাপ্লিকেশন রয়েছে যা ল্যাম্বদা ব্যবহার করার জন্য রূপান্তর করেছে:

আপনি দেখতে পাচ্ছেন, বাস্তবায়নটি আগেরটির মতোই। আমরা কেবল সেই ডিরেক্টরিটি পরিবর্তন করেছি যা থেকে আমরা আমাদের প্লাগইনটি লোড করেছি এবং মানগুলি মুদ্রণের পরিবর্তে ফাংশন প্রতিক্রিয়া যুক্ত করেছি। গোলংয়ে ল্যাম্বডাস লেখার বিষয়ে আরও তথ্যের জন্য, অ্যাডাব্লুএস ডকুমেন্টেশন দেখুন।

এডাব্লুএস লাম্বদা মোতায়েন

এডাব্লুএস ল্যাম্বদা ফাংশন এবং স্তর স্থাপনের দুটি উপায় রয়েছে। আপনি নিজেই একটি সঙ্কুচিত প্যাকেজ তৈরি এবং আপলোড করতে পারেন বা উন্নত কাঠামো ব্যবহার করতে পারেন যা এটি অনেক সহজ এবং দ্রুত তৈরি করবে। আমার বেশিরভাগ প্রকল্পের জন্য আমি সার্ভারহীন কাঠামো ব্যবহার করি। অতএব আমি ইতিমধ্যে এই সরঞ্জামটি সহ সাধারণ কনফিগারেশন ফাইল সার্ভারলেস.আইএমএল প্রস্তুত করেছি:

পরিষেবা: সিফার সার্ভিস ফ্রেমওয়ার্ক সংস্করণ: "> = 1.28.0 <2.0.0" সরবরাহকারী: নাম: আউজ রানটাইম: go1.x
স্তর: সিফারলায়ার: পথ: বিন / প্লাগইন সামঞ্জস্যপূর্ণ রানটাইম: - go1.x
ফাংশন: ইঞ্জিন: হ্যান্ডলার: বিন / সাইফার ইঞ্জিন প্যাকেজ: বাদ: - ./** অন্তর্ভুক্ত করুন: -।

স্তর অঞ্চলে, আমরা ইতিমধ্যে তৈরি হওয়া প্লাগ-ইনটির পথ সহ একটি একক স্তরকে সংজ্ঞায়িত করেছি - এটি লাম্বদা ফাংশনের সাথে একত্রে সরবরাহ করা হয়েছে। আপনি 5 টি বিভিন্ন স্তর নির্ধারণ করতে পারেন, যার ক্রমটি সত্যই গুরুত্বপূর্ণ। এগুলি একই / অপটিক ডিরেক্টরিতে মাউন্ট করা হয়, সুতরাং উচ্চতর সংখ্যার স্তরগুলি পূর্ববর্তী মাউন্ট করা স্তরগুলি থেকে ফাইলগুলি ওভাররাইট করতে পারে। প্রতিটি স্তরের জন্য আপনাকে কমপক্ষে 2 টি প্যারামিটার নির্দিষ্ট করতে হবে: স্তর উত্সের সাথে ডিরেক্টরিটির পথ (আপনার ক্ষেত্রে প্লাগ-ইন বাইনারি ফাইলের পথে) এবং সামঞ্জস্যপূর্ণ রানটাইমগুলির তালিকা।

পরবর্তী ফাংশন বিভাগটি এমন একটি জায়গা যেখানে আপনি কার্যকর করার জন্য ফাংশনগুলির তালিকা নির্ধারণ করেন। প্রতিটি ফাংশনের জন্য আপনাকে কমপক্ষে কমপাইল করা অ্যাপ্লিকেশনটির পথ নির্দিষ্ট করতে হবে। তদতিরিক্ত, উপরে বর্ণিত স্তরের রেফারেন্স সহ আমাদের স্তর প্যারামিটারটি সংজ্ঞায়িত করতে হবে। এটি মোতায়েনের সময় আমাদের ল্যাম্বদা ফাংশনে স্বয়ংক্রিয়ভাবে স্তরটি সংযোজন করবে। মজার বিষয় হ'ল আপনি যদি এই সংস্থানটি উল্লেখ করতে চান তবে আপনাকে নিজের ল্যাম্বদা স্তরটির নাম টাইটেলকেসে রূপান্তর করতে হবে এবং ল্যাম্বডায়ার প্রত্যয় যুক্ত করতে হবে। দেখে মনে হয় যে সার্ভারলেস দল বিভিন্ন ধরণের সংস্থান সম্পর্কিত সংঘাত সমাধানের জন্য এটি এটিকে বাস্তবায়ন করেছিল।

আমাদের কনফিগারেশন ফাইল সার্ভারলেস.আইএমএল প্রস্তুত হওয়ার সাথে সাথে আপনাকে শেষ কাজটি করতে হবে যা আমাদের অ্যাপ্লিকেশনটি সংকলন, প্লাগ ইন এবং স্থাপন করা। এর জন্য আমরা সাধারণ মেকফিল ব্যবহার করতে পারি:

.ফোনি: বিল্ড প্লাগইন পরিষ্কারভাবে মোতায়েন করুন
বিল্ড: ডিপ সুরক্ষিত -v এনভিভ জিওওএস = লিনাক্স যান বিল্ড -ldflags = "-স-ডাব্লু" -বিন / সিফারইঞ্জাইন সিফারইঙ্গাইন / মেইন.গো
buildPlugin: env GOOS = Linux go build -ldflags = "- s -w" -buildmode = প্লাগইন-বিন / প্লাগইন / সিফার.সো .. / প্লাগিন / সাইফার.গো
পরিষ্কার: rm -rf ./bin ./vendor Gopkg.lock
মোতায়েন: পরিষ্কার buildPlugin বিল্ড এসএলএস --verbose মোতায়েন

আপনি নিম্নলিখিত কমান্ডটি চালিয়ে আপনার ফাংশনটি তৈরি এবং স্থাপন করতে পারেন:

সরবরাহ

এডাব্লুএস ল্যাম্বদা চেষ্টা করুন

পূর্বে উল্লিখিত হিসাবে, এডাব্লুএস ল্যাম্বদা কোড ইভেন্টটির প্রতিক্রিয়াতে চালিত হয়। যাইহোক, আমরা কোনও ইভেন্ট ট্রিগার কনফিগার করেছি না যাতে তাদের আমাদের সহায়তা ছাড়া কল করা যায় না। আমাদের এটি সার্ভারলেস ফ্রেমওয়ার্ক বা অ্যাডস্ক্লি সরঞ্জাম ব্যবহার করে ম্যানুয়ালি করতে হবে:

sls কল --f ফাংশন-নাম আউস ল্যাম্বদা আহবান - ফাংশন নাম ফাংশন-নাম আউটপুট-ফাইল

উত্তরে, আপনার আগের মতো একই আউটপুটটি দেখা উচিত, যা প্রমাণ করে যে আমাদের ল্যাম্বদা ফাংশনটি সঠিকভাবে কাজ করছে এবং প্লাগইন অতিরিক্ত স্তর থেকে লোড হয়। এখন আপনি অন্যান্য ফাংশন তৈরি করতে পারেন যা একই স্তরটি ব্যবহার করে বা অন্য এডাব্লুএস অ্যাকাউন্টগুলির সাথে ভাগ করে নিতে পারে।

সারসংক্ষেপ

গোলং মডিউলগুলি ব্যবহার করে এবং কীভাবে তারা সদ্য মুক্তিপ্রাপ্ত এডাব্লুএস ল্যাম্বদা স্তরগুলির সাথে একীভূত হতে পারে তা পরীক্ষা করে খুব মজাদার হয়েছিল। প্লাগইন লাইব্রেরিটি সত্যিই দুর্দান্ত, তবে এটির সীমাবদ্ধতা এবং গোলাং স্পেসিফিকেশনের কারণে এটি কেবলমাত্র কিছু নির্দিষ্ট পরিস্থিতিতে ব্যবহার করা যেতে পারে। আমি মনে করি যে প্রমিত প্রকল্পগুলিতে কাজ করা বেশিরভাগ বিকাশকারীদের জন্য, প্লাগইনগুলির প্রয়োজন হয় না বা এমনকি সম্ভবও হয় না। আমি কেবল দুটি কারণ সম্পর্কে চিন্তা করতে পারি:

  • জটিল অ্যালগরিদমগুলির বাস্তবায়ন যা অন্যান্য অ্যাপ্লিকেশনগুলি ব্যবহার করতে পারে, যেমন। ভিডিও কোডিং বা এনক্রিপশন অ্যালগরিদম।
  • কোডটি প্রকাশ না করে অন্যদের সাথে আপনার অ্যালগরিদম ভাগ করুন।