কীভাবে কোনও নোডজেএস অ্যাপ সার্ভারলেস তৈরি করতে হয়

আশা করি সার্ভারলেসকে আমি যতটা ভালবাসি ততই ভালবাসা কারণ এটি এই বিষয়ের একটি অন্য পোস্ট।

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

তবে আপনার ব্যাকএন্ডে থাকতে পারে এমন অন্যান্য (মাইক্রো) পরিষেবাগুলি কীভাবে? আপনি জানেন, আপনার সমস্ত অ্যাপ্লিকেশন কোডটি একক একক একডাব্লুএস ল্যাম্বডা ফাংশনে স্থাপন করা সেরা ধারণা নয়।

চ্যালেঞ্জ

আমরা কেবল সার্ভারলেস মাইক্রোসার্ভেসিস হিসাবে অ্যাপ্লিকেশন মডিউলগুলি সরবরাহ করতে চাই যা একে অপরের সাথে যোগাযোগ করতে হবে। পরিষেবাদির মধ্যে যোগাযোগকে অগ্রাধিকার দিয়ে এক ধরণের এসিএল দ্বারা নিয়ন্ত্রিত করা উচিত।

চেষ্টা 1. এপিআই গেটওয়ে

সমস্যাটি সমাধান করার চেষ্টা করার সময় আমার এই প্রথম চিন্তা ছিল: কেবলমাত্র এপিআই গেটওয়ের মাধ্যমে সমস্ত মাইক্রোসার্ভেসিকে প্রকাশ করুন। সমস্যাটি হ'ল ... তৈরি করা হচ্ছে এমন এপিআইগুলি সর্বজনীন।

কেন যে সমস্যা? উদাহরণস্বরূপ, অনুমোদন দ্বারা অ্যাক্সেস সীমাবদ্ধ থাকলেও আমরা চাই না যে বিলিং পরিষেবা বিশ্বের কোথাও উপলব্ধ হোক।

ঠিক আছে, আপনি API টি ব্যক্তিগত করতে পারেন, তবে সুরক্ষা নির্দেশিকা যথেষ্ট সীমাবদ্ধ:

আপনার এপিআই সুরক্ষিতভাবে চালনার অনুমতি দেওয়ার জন্য আপনি API গেটওয়ে রিসোর্স নীতিগুলি ব্যবহার করতে পারেন:
* নির্দিষ্ট এডাব্লুএস অ্যাকাউন্টের ব্যবহারকারী * নির্দিষ্ট উত্সের আইপি অ্যাড্রেস রেঞ্জ বা সিআইডিআর ব্লক * নির্দিষ্ট ভার্চুয়াল প্রাইভেট ক্লাউড (ভিপিসি) বা ভিপিসি এন্ডপয়েন্টস (যে কোনও অ্যাকাউন্টে)

এটি এই জাতীয় পরিষেবার মধ্যে যোগাযোগ নিয়ন্ত্রণ করা বেশ কঠিন করে তোলে। এখানে করার একমাত্র উপায় হ'ল পৃথক ভিপিসিগুলিতে পরিষেবা দেওয়া, যা খুব বেশি কাজ।

পরীক্ষা 2. ল্যাম্বদা

কেন আমরা প্রতিটি মাইক্রোসার্ভিসকে আলাদা আলাদা ডাব্লুএস ল্যাম্বডায় রাখি না? এটি কি সমস্যার সমাধান করবে?

হ্যাঁ, এটি প্রকৃতপক্ষে একটি সার্ভারহীন মাইক্রোসার্ভেস এবং আপনি আন্তঃ-পরিষেবা অ্যাক্সেসকে অনুকূল করতে আইএএম নীতিগুলি ব্যবহার করতে পারেন। তবে এটি "সহজ" নয়।

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

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

চেষ্টা করুন 3. ফ্যাট ল্যাম্বদা

আমরা কি একক ল্যাম্বডা হিসাবে অবশ্যই অনেকগুলি সমাপ্তি সরবরাহ করতে পারি (অবশ্যই কোনও এপিআই গেটওয়ে ছাড়াই)?

যদি আমরা এটি করতে পারি তবে আমরা পূর্ববর্তী বিকল্পটির পুরো সুবিধা নেব, তবে আমরা আমাদের স্থাপনার ইউনিটগুলির গ্রানুলারিটিটিও বেছে নিতে পারি।

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

এটি এখানে আমার বাস্তবায়ন: aws-rpc। এই নোডেজ মডিউলটি ল্যাম্বড্যান্ডহ্যান্ডলার ফাংশনটি উন্মোচিত করে যেখানে আপনি কেবল একটি বস্তুটি পাস করেন এবং ল্যাম্বডায় অ্যাক্সেস করতে পারে এমন সমস্ত ব্যবহারকারীদের জন্য এটি স্বয়ংক্রিয়ভাবে উপলব্ধ হয়ে যায়:

'আউস-আরপিসি' থেকে {ল্যাম্বডএহ্যান্ডলার import আমদানি করুন; './TestServiceImpl' থেকে 'আমদানি করুন S টেস্টসোভারসআইআইপিএল';
// এটি আপনার স্টেজিং ইউনিট // এটি ল্যাম্বদা হ্যান্ডলার ফাংশন এক্সপোর্ট কনস্ট হ্যান্ডলার = ল্যাম্বডএহ্যান্ডলার (নতুন টেস্টসোর্সআইএমপিএল)) হিসাবে আপনি নির্দিষ্ট করেছেন;

এখন আপনি কেবল এডাব্লুএস ল্যাম্বদা হিসাবে "হ্যান্ডলার" সরবরাহ করতে পারেন। পদ্ধতিগুলি কীভাবে কল করবেন:

'./ টেস্টসেবা' থেকে 'আমদানি করুন';
কনস্ট্যান্ট ক্লায়েন্ট = createClient এর জন্য অপেক্ষা করুন ("ল্যাম্বডনাম", "পরীক্ষা"); কনসোল.লগ (ক্লায়েন্ট.টেষ্ট () এর জন্য অপেক্ষা করুন);

দয়া করে নোট করুন যে ক্লায়েন্ট স্টাব অবজেক্টের জন্য পদ্ধতি উত্পন্ন করতে সক্ষম হওয়ার জন্য, উদাহরণস্বরূপ আপনার তৈরির ক্লায়েন্টে সমস্ত পদ্ধতির নাম পাস করতে হবে।

এটি প্রয়োজনীয় কারণ জেএসের কাছে টাইপস্ক্রিপ্ট ইন্টারফেসগুলি সম্পর্কে রানটাইম সম্পর্কিত তথ্য নেই। আমি এটি বিমূর্ত ক্লাসগুলি সহ প্রয়োগ করতে পারি, তবে আমি ¯ \ _ (ツ) _ / like পছন্দ করি না ¯

বোনাস! আপনি স্থানীয়ভাবে এটি সব করতে পারেন!

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

সারসংক্ষেপ

আপনি মেঘ সরবরাহকারী যে পরিষেবাগুলিতে অফার করে এবং আপনার অবকাঠামোটি পুনরুদ্ধার করে সেগুলিতে আপনি হারিয়ে গেলে এটি করা খুব সহজ।

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

আপনি যদি এই বিষয়টি পছন্দ করেন তবে নিম্নলিখিতগুলিও পড়ুন:

  • আপনাকে কীভাবে সেরা সার্ভারলেস আর্কিটেকচার তৈরি করবেন তা শিখতে হবে
  • কীভাবে একটি ফ্রি সার্ভারলেস সিআই / সিডি পাইপলাইন তৈরি করবেন: 3 সহজ উদাহরণ Simple
  • অঞ্চল জুড়ে ডায়নামোডিবি-র সহজ প্রতিলিপি
  • একটি বহু-আঞ্চলিক অ্যাপ্লিকেশন কীভাবে তৈরি করবেন (এবং পে জিরো)
  • জাভা ওয়েব অ্যাপ্লিকেশন সার্ভারলেস করুন

মন্তব্য, পছন্দ এবং শেয়ার খুব প্রশংসা করা হয়। নীচে!