কম্পিউটার

পরিষ্কারভাবে Sidekiq স্কেলিং

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

আমরা কিভাবে স্কেল করি

আমাদের প্রসেসিং পাইপলাইন Sidekiq-এর উপর অনেক বেশি নির্ভর করে, যা আমাদের জন্য কঠিন। পাইপলাইনের বেশিরভাগ কাজ একটি অটোস্কেলিং গ্রুপের অন্তর্গত উদাহরণগুলির দ্বারা পরিচালিত হয়। যখন Sidekiqbacklog বৃদ্ধি পায়, একটি CloudWatch অ্যালার্ম ট্রিগার করে, যার ফলে এই গ্রুপে নতুন দৃষ্টান্ত শুরু হয়। ট্র্যাফিক কমে যাওয়ায় এবং ব্যাকলগ অদৃশ্য হওয়ার সাথে সাথে ঘটনাগুলি বন্ধ হয়ে যায়৷

শৈলী সহ আমরা কীভাবে স্কেল করি

এই সেটআপের একমাত্র সমস্যা হল যে আমরা নিশ্চিত করতে চাই যে Sidekiqworkers তাদের সমস্ত কাজ শেষ করার আগে একটি উদাহরণ তৈরি করে। যদিও Sidekiq পুনঃনির্ধারণ করা কাজগুলিকে সমর্থন করে যেগুলি সমাপ্তির আগে শেষ হয়ে যায়, আমরা যখন পারি তখন এটি এড়াতে পছন্দ করি— একটি কাজ পুনঃনির্ধারিত এবং পুনরায় চালু করার চেয়ে কাজ শেষ করতে কয়েক সেকেন্ড সময় নেওয়া ভাল। সৌভাগ্যবশত, এর অসাধারণত্বে, Sidekiq-এর একটি পদ্ধতি রয়েছে যেটি কর্মী প্রক্রিয়াগুলিকে বর্তমান কাজ শেষ হওয়ার পরে নতুন কাজ গ্রহণ করা বন্ধ করার জন্য বলে, যা কর্মীদের সমাপ্তির প্রস্তুতির জন্য নিষ্কাশন করা সহজ করে তোলে। কৌশলটি সেই কর্মীদের জানাচ্ছে যে তাদের নিষ্কাশন শুরু করতে হবে — এবং এর জন্য, আমরা লাইফসাইকেল হুকস, ক্লাউডওয়াচ ইভেন্ট + ল্যাম্বডা, EC2 সিম্পল সিস্টেম ম্যানেজার এবং সামান্য কিছু কোড ব্যবহার করি৷

এই পোস্টের বাকি অংশটি আপনাকে দেখাবে কিভাবে আপনি আমাদের সেটআপ কপি করতে পারেন সেই ইন্সট্যান্সগুলি যা সেই শুভরাত্রিতে মৃদুভাবে যায়৷

পূর্বশর্ত

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

কোড

একবার সেই আইটেমগুলি জায়গায় হয়ে গেলে, আপনি টুকরো টুকরোগুলিকে একসাথে সংযুক্ত করা শুরু করতে পারেন। আমরা প্রক্রিয়ার শেষে শুরু করব — আমাদের স্ক্রিপ্টগুলি যা দৃষ্টান্তে থাকবে এবং Sidekiq ড্রেনিং পরিচালনা করবে — এবং আমরা পিছনের দিকে কাজ করব৷ প্রথমত, রুবি কোড যা কর্মীদের শান্ত করবে এবং তাদের কাজ শেষ করার জন্য অপেক্ষা করবে:

আমরা Sidekiq এপিআই-এর মাধ্যমে বর্তমান ইনস্ট্যান্সে চলমান Sidekiq প্রসেসের একটি তালিকা পাই, তাদের নতুন কাজ গ্রহণ করা বন্ধ করতে বলি, তারপর সমস্ত প্রক্রিয়ার কোনো সক্রিয় কাজ না হওয়া পর্যন্ত অপেক্ষা করুন৷

এখানে শেল স্ক্রিপ্ট যা সেই স্ক্রিপ্টটিকে ট্রিগার করবে যখন এটি উদাহরণটি শেষ করার সময় হবে:

অনেক সেটআপ করার আছে, কিন্তু এই স্ক্রিপ্টের মাংস লাইন8 থেকে শুরু হয়। প্রথমে আমরা অটোস্কেলিং গ্রুপকে সংকেত দিই যে আমরা লাইফসাইকেল হুকে কাজ করছি। এটি একটি গার্ড হওয়ার পার্শ্ব-প্রতিক্রিয়া আছে — যদি এই উদাহরণটি অটোস্কেলিংগ্রুপ দ্বারা সমাপ্তির জন্য নির্ধারিত না থাকে, তাহলে এই কমান্ডটি ব্যর্থ হবে, এবং কর্মী শাটডাউন স্ক্রিপ্টটি চালু করা হবে না। এই স্ক্রিপ্টটি কল করা উচিত নয় যদি না দৃষ্টান্তটি সমাপ্তির জন্য নির্ধারিত হয়, তবে এটি সামান্য রক্ষণাত্মক হতে আঘাত করে না। :) ধরে নিচ্ছি আমরা এগিয়ে যাচ্ছি, আমরা কর্মীদের বন্ধ করে দিই, এবং তারপর আমরা অটোস্কেলিং গ্রুপকে টার্মিনেশনের সাথে এগিয়ে যেতে বলি৷ যদি আমরা সেই API কল না করি, তাহলে হুকের সময়সীমা শেষ না হওয়া পর্যন্ত উদাহরণটি চলবে৷ (আমরা কিছুক্ষণের মধ্যে এটিতে পৌঁছাব)।

SSM নথি

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

আপনি দস্তাবেজগুলি ক্লিক করে আপনার নথি তৈরি করতে পারেন৷ EC2 কনসোলের সিস্টেম ম্যানেজার শেয়ার্ড রিসোর্সেস বিভাগে লিঙ্ক (সাইডবারের নিচের দিকে), নথি তৈরি করুন ক্লিক করে বোতাম, এবং সেই JSON-কে কন্টেন্ট বক্সে ড্রপ করে।

The Lambda ফাংশন

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

আপনাকে PrepInstanceForTermination প্রতিস্থাপন করতে হবে আপনার ডকুমেন্টের জন্য আপনি যে নামটি বেছে নিন তা দিয়ে, কিন্তু অন্যথায় এই কোডটি শুধু কপি-এবং-পেস্ট করা হয়৷

এই Lambda ফাংশনের জন্য কয়েকটি অনুমতি প্রয়োজন (সাধারণ Lambda অনুমতিগুলি ছাড়াও), এবং এটির জন্য এখানে একটি IAM নীতি নথি রয়েছে:

আবার, আপনাকে নথির নাম প্রতিস্থাপন করতে হতে পারে।

দ্য হুক এবং ইভেন্ট নিয়ম

সেখানে অপেক্ষা করুন - আমরা প্রায় সেখানে! আপনার দুটি জিনিস বাকি আছে:ক্লাউডওয়াচ ইভেন্ট এবং লাইফসাইকেল হুক তৈরি করুন৷ প্রথম, ইভেন্ট:

CloudWatch ব্যবস্থাপনা কনসোলে, ইভেন্টস-এ ক্লিক করুন সাইডবারে, এবং তারপর নিয়ম তৈরি করুন ক্লিক করুন৷ বোতাম এটিই আপনার তৈরি করা ল্যাম্বডাফাংশনটিকে ট্রিগার করবে৷

পরিষ্কারভাবে Sidekiq স্কেলিং

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

এটি হয়ে গেলে, EC2 ম্যানেজমেন্ট কনসোলে ফিরে যান এবং অটোস্কেলিং গ্রুপে নেভিগেট করুন যেখানে আপনি পরিচালনা করতে চান এমন উদাহরণ রয়েছে৷ লাইফসাইকেল হুকস-এ ক্লিক করার পরে ট্যাব, আপনি একটি হুক তৈরি করতে সক্ষম হবেন৷ আমাদের এইরকম দেখায়:

পরিষ্কারভাবে Sidekiq স্কেলিং

টার্মিনেট হল সেই ট্রানজিশন যা আমরা আগ্রহী, এবং আমরা টার্মিনেশনটি এগিয়ে যেতে চাই (ডিফল্ট ফলাফল:চালিয়ে যান) যদি কোনো কারণে API কল আমাদের শেল স্ক্রিপ্টে 600 সেকেন্ড (হার্টবিট টাইমআউট) অতিবাহিত হওয়ার পরে না ঘটে। এর ফলে 10 মিনিটের পরেও Sidekiq কর্মীদের কাজ না করা হলেও, আমাদের ইন্সট্যান্সগুলিকে এক বা অন্যভাবে বন্ধ করা হবে৷

এটি একটি মোড়ানো

তুমি পেরেছো! আপনার কাছে এখন একটি অটোস্কেলিং গ্রুপ রয়েছে যা মানবিক উপায়ে এর সাইডিকিক দৃষ্টান্তগুলিকে শেষ করতে পারে। উপভোগ করুন!

P.S.:একটি অতি-সহায়ক টিউটোরিয়ালের জন্য ক্রেডিট awslabs-এর কাছে যায় যা এই টুকরোগুলির কয়েকটিকে একত্রিত করে।


  1. GPU স্কেলিং বনাম ডিসপ্লে স্কেলিং ব্যাখ্যা করা হয়েছে

  2. উবুন্টু 20.04 এ কীভাবে ভগ্নাংশ স্কেলিং সক্ষম করবেন

  3. উবুন্টু 19.04 এ নতুন কি?

  4. রুবিতে ব্যতিক্রম ঘটলে স্থানীয় এবং ইনস্ট্যান্স ভেরিয়েবল লগ করা