আমরা প্রায়ই Sidekiq অপ্টিমাইজ বা নিরীক্ষণ সম্পর্কে প্রশ্ন পাই। মনিটরিং আমাদের এক ধরনের খেলা, কিন্তু Sidekiq-এর পারফরম্যান্স অপ্টিমাইজ করা সম্পূর্ণ ভিন্ন বলের খেলা। বাস্তবে, অপ্টিমাইজ করা জটিল, তবে আসুন আপাতদৃষ্টিতে সহজ উত্তরগুলি দেখে শুরু করি...
গতি বাড়ানোর দুটি উপায়
শুরু করার জন্য, গতি দুটি উপায়ে বাড়ানো যেতে পারে — বড় কাজ করার মাধ্যমে (যা আরও মেমরি বা IO নিতে পারে বা আরও জটিল হতে পারে), বা সমকালীন সেটিংস বা কর্মীদের সামঞ্জস্য করে (যা আরও CPU এবং সম্ভবত IO ব্যবহার করবে)। ওহ, বাস্তবতা ইতিমধ্যেই শুরু হচ্ছে:গতি একটি খরচে আসে। আপনি যদি অতিরিক্ত মেমরি, IO বা CPU রাখতে পারেন তবে এটি বিনামূল্যে, তবে আমরা মনে করি যে ট্রেড-অফগুলি করা দরকার তা উপলব্ধি করা গুরুত্বপূর্ণ৷
একসঙ্গে সেটিংসের মাধ্যমে গতি বাড়ানো
Sidekiq তার প্রক্রিয়ায় একাধিক থ্রেড ব্যবহার করে একযোগে পরিচালনা করে। এইভাবে, এটি একবারে একাধিক কাজ প্রক্রিয়া করতে পারে, প্রতিটি থ্রেড একবারে একটি কাজ প্রক্রিয়া করে। ডিফল্টরূপে, Sidekiq প্রতি প্রক্রিয়ায় 10টি থ্রেড ব্যবহার করে। আপনি এটিকে আরও থ্রেড ব্যবহার করার জন্য কনফিগার করতে পারেন, এইভাবে একযোগে বৃদ্ধি পায়।
মনে রাখবেন যে নতুন সঙ্গতি মডেল আপনার অ্যাপ দ্বারা সমর্থিত হওয়া প্রয়োজন। উদাহরণস্বরূপ, এটির জন্য ডাটাবেসের সাথে সংযোগের একটি বড় পুল প্রয়োজন এবং আপনার হোস্টকে I/O ক্রিয়াকলাপগুলির বৃদ্ধি পরিচালনা করতে সক্ষম হতে হবে। আপনি আরও তথ্যের জন্য একযোগে Sidekiq ডকুমেন্টেশন পরীক্ষা করে দেখতে পারেন।
একাধিক কর্মী চালানোর মাধ্যমে গতি বৃদ্ধি করা
একাধিক প্রক্রিয়া তৈরির পাশাপাশি, আপনি একাধিক কর্মীও চালাতে পারেন। এইভাবে, আপনি যেকোন CPU- নিবিড় অংশগুলিকে স্কেল করতে পারেন, জিনিসগুলিকে সমান্তরালভাবে চালাতে পারেন যখন সেগুলি অন্যথায় CPU-তে একে অপরের পথে থাকবে যদি সেগুলি একটি প্রক্রিয়ায় চালানো হয়। আপনি যদি এটি ধরতে চান তবে আমরা আগে এই নিবন্ধে রুবি এবং গ্লোবাল ইন্টারপ্রেটার লক-এর সমকক্ষতা সম্পর্কে লিখেছি৷
এটা কি কাজ করে নাকি ভেঙ্গে যায়? কী মনিটর করবেন এবং আমাদের ম্যাজিক ড্যাশবোর্ডগুলি
ডিফল্ট পরামিতি পরিবর্তন করা আপনার অ্যাপ্লিকেশনের কর্মক্ষমতার উপর প্রভাব ফেলতে পারে। সেটিংস পরিবর্তন করার আগে, পরিবর্তনগুলি ইতিবাচক প্রভাব ফেলছে কিনা বা তারা কর্মক্ষমতা হ্রাস করছে কিনা তা দেখতে মনিটরিং সেট আপ করার পরামর্শ দেওয়া হয়৷
আসুন আমরা হোস্ট স্তরে জিনিসগুলি ভঙ্গ করছি কিনা তা পরীক্ষা করে শুরু করি। আপনি যে হার্ডওয়্যারটি চালাচ্ছেন তাতে আপনার অ্যাপটি কতটা রিসোর্স ইনটেনসিভ তা দেখতে চাইবেন। আপনার যদি মেমরি এবং সিপিইউতে ক্ষমতা অবশিষ্ট থাকে, তাহলে জিনিসগুলিকে একটু দ্রুত করার জন্য আপনি কনকারেন্সি সেটিংস বাড়াতে পারেন৷
আপনি যে APM (অ্যাপ্লিকেশন পারফরম্যান্স মনিটরিং) ব্যবহার করেন না কেন, এতে সম্ভবত হোস্ট মেট্রিক্স ট্র্যাক করার একটি উপায় রয়েছে। আপনি যদি AppSignal ব্যবহার করেন, তাহলে আপনার হোস্টের জন্য ড্যাশবোর্ডগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়। জিনিসগুলি সত্যিকার অর্থে অগোছালো হওয়ার আগেই আপনি সতর্ক হয়ে যান তা নিশ্চিত করার জন্য, আপনি অসঙ্গতি সনাক্তকরণ ব্যবহার করে নির্দিষ্ট হোস্টে CPU ব্যবহারের জন্য সহজেই সতর্কতা সেট আপ করতে পারেন৷
এখন, দেখা যাক Sidekiq স্তরে জিনিসগুলি ভাঙছে না কি না। আপনার পছন্দের APM সম্ভবত আপনাকে কিছু ম্যানুয়াল উপায়ে আপনার ব্যাকগ্রাউন্ড কাজের জন্য মনিটরিং এবং সতর্কতা সেট আপ করার অনুমতি দেবে। AppSignal-এ, এটি খুবই সহজ:আমরা এটি আপনার জন্য Sidekiq ম্যাজিক ড্যাশবোর্ডে ট্র্যাক করি (যা আপনার পক্ষ থেকে কোনো সেটআপ ছাড়াই তৈরি হয়, যখন আপনি আমাদের রত্নটির সাম্প্রতিক সংস্করণ চালান)।
এই সেটআপে, আপনি চাকরির স্থিতি নিরীক্ষণ করতে চাইবেন৷ প্রতি সারি এবং স্ল্যাক, পেজারডিউটি, ইমেল বা আপনি যা ব্যবহার করেন তাতে সতর্ক করার জন্য ব্যর্থতার হারের জন্য একটি ট্রিগার সেট করুন৷
কম, বড় চাকরি?
CPU বন্ধ করার সময় আমরা ক্রমবর্ধমান গতির দিকে দ্রুত নজর দিয়েছি। এখন, মেমরি বা আইও বা আরও জটিলতার উপর ট্রেড করার সময় ক্রমবর্ধমান গতির দিকে নজর দেওয়া যাক। আপনি মনে করবেন যে আপনি বড় চাকরি তৈরি করে এটি করতে পারেন। ধারণাটি হবে যে বড় কাজগুলি দ্রুত হতে পারে কারণ তাদের প্রতি অপারেশনে সিডেকিক ওভারহেড নেই। যদিও আমাদের অভিজ্ঞতায়, Sidekiq ওভারহেড খুব কমই আপনার পারফরম্যান্সকে হত্যা করবে। প্রায়শই, এটি ডাটাবেস কোয়েরি যা কাজটি করে যা কর্মক্ষমতা নষ্ট করতে পারে। আমরা দেখতে পাচ্ছি যে কম কোয়েরি সঞ্চালন করার জন্য আরও কাজ একত্রিত করা হয় ভাল কর্মক্ষমতা একটি গুরুত্বপূর্ণ উপায়. সরলীকৃত:1 রেকর্ডের 1000 আপডেটের পরিবর্তে 1000টি রেকর্ডের একটি আপডেট করা।
এটি কাজ করে বা ভেঙে যায় কিনা তা দেখার জন্য কী পর্যবেক্ষণ করবেন?
প্রথমে, আপনি চাকরির স্থিতি নিরীক্ষণ করতে চাইবেন৷ প্রতি সারি এখানেও এবং ব্যর্থতার হার এর জন্য একটি ট্রিগার সেট করুন . যেহেতু কাজগুলি বেশি সময় নেয় এবং আরও ক্রিয়াকলাপ থাকে, তাই আপনি Sidekiq-এর মেমরি ব্যবহারও নিরীক্ষণ করতে চাইবেন . এছাড়াও আপনার Sidekiq মেমরি ব্যবহার-এ একটি সতর্কতা সেট আপ করা উচিত , কিন্তু বিশেষভাবে, একটি মেমরি ফুরিয়ে যাওয়া হোস্টের জন্য AppSignal এর অসঙ্গতি সনাক্তকরণ ব্যবহার করে।
আপনার সারির দৈর্ঘ্যও পর্যবেক্ষণ করা উচিত প্রতি সারি এটি আপনাকে সতর্ক করবে যখন একটি ব্যাকলগ তৈরি হবে - যখন শ্রমিকরা তাদের প্রক্রিয়া করার চেয়ে বেশি সারিবদ্ধ থাকে। আমরা আপনাকে আপনার 'গুরুত্বপূর্ণ' কাজের সারির জন্য একটি অসঙ্গতি সনাক্তকরণ ট্রিগার সেট আপ করার পরামর্শ দিই৷
একটি ট্রেড-অফ যা আপনি আপনার APM-এ দেখতে পাবেন না
বৃহত্তর কাজের সাথে বড় সমস্যা হল যে তাদের কোড করা কঠিন। আপনাকে স্বতন্ত্র কাজগুলিকে স্পষ্টভাবে অদম্য করে তুলতে হবে এবং তাদের অবস্থার উপর নজর রাখতে হবে। একটি সাধারণ উদাহরণে:আপনার যখন এমন একটি কাজ থাকে যা একজন ব্যক্তিকে মেল করে এবং এটি ব্যর্থ হয়, আপনি খুব বেশি ক্ষতি না করে এটি পুনরায় চেষ্টা করতে পারেন। 1000 জনকে মেল করার সময়, যদি কাজটি ব্যর্থ হয়, তাহলে আপনি চাকরি ব্যর্থ হওয়ার আগে 240 জনকে মেল করতে আবার পাঠাতে চান না। এটি যাতে না ঘটে তা নিশ্চিত করা কোডটিকে আরও জটিল করে তোলে৷
৷বাস্তবতার আসল জটিলতা
অন্য বাস্তবতা যাচাই করার সময়। প্রায়শই, Sidekiq-এ চলমান কিছুর কারণে আপনার পটভূমি প্রক্রিয়াগুলি ধীর নাও হতে পারে। এটি হতে পারে যে আপনি যে ডাটাবেসটি অনুসন্ধান করছেন সেটি ধীর কারণ এটি যে হোস্টে চালায় সেটির মেমরি ফুরিয়ে যাচ্ছে। এই পোস্টে ব্যবহার করার জন্য একটি দুর্দান্ত উদাহরণ খুঁজতে গিয়ে, আমরা এমন একটি পরিস্থিতিতে পড়েছিলাম:এটি দেখা গেল যে সময়কাল শীর্ষে পৌঁছেছে কারণ বাহ্যিক API এর একটি দীর্ঘ প্রতিক্রিয়া সময় ছিল। Sidekiq এর কোন কিছুই এর সমাধান করবে না।
কারণ একটি সমস্যা এক জায়গায় দেখা যেতে পারে কিন্তু সম্পূর্ণ অন্য কোথাও ঘটতে পারে, AppSignal-এ, আমরা পণ্যটি তৈরি করেছি যাতে এতে ত্রুটি, কার্যকারিতা এবং হোস্ট মেট্রিক্স সব মিলিয়ে থাকে। এই ভিউয়ের সম্মিলিত মেট্রিক্স সমস্যার মূল কারণ খুঁজে পাওয়া সহজ করে তুলবে।
কোন সহজ উত্তর নেই, আছে কি?
যদিও আমরা এই নিবন্ধটি Sidekiq নিরীক্ষণ এবং অপ্টিমাইজ করার প্রাথমিক বিষয়গুলি দিয়ে শুরু করেছি, আমরা অবিলম্বে বাস্তবে ছুটে গিয়েছিলাম যে গতি CPU এবং IO খরচ করবে। অথবা মেমরি। অথবা আরো জটিলতা পরিচয় করিয়ে দিন। এবং যদিও আমরা আপনার আর্কিটেকচারে পারফরম্যান্সের কিছু জটিলতাকে স্পর্শ করেছি, বাস্তবতা হল যে আমরা এই পোস্টে প্রায় 99% কঠিন জিনিসগুলি স্কিড করেছি৷
সুতরাং, যদিও আমরা সহজ উত্তরের জন্য আপনার আশা কেড়ে নিয়েছি, আমরা আশা করি এই নিবন্ধটি আপনার Sidekiq সেটআপকে অপ্টিমাইজ এবং নিরীক্ষণ করার বিষয়ে কিছু আকর্ষণীয় চিন্তার উদ্রেক করেছে!