অ্যাপ্লিকেশন টিমগুলোকে বুঝতে হয় তাদের কাস্টমার এক্সপেরিয়েন্স কেমন। এটি শুধু জেনারেল পারস্পেক্টিভে (юзаবিলিটি এবং রেসপনসিভনেসের মাধ্যমে) নয়, বরং দিন-প্রতিদিন, মিনিট-প্রতি-মিনিট বেসিসেও।
বিশেষ করে, যখন আপনি ডিস্ট্রিবিউটেড সিস্টেমের সাথে কাজ করেন, এরর হওয়া স্বাভাবিক। সাইট ট্রাফিক দিন भर ফ্লাকচুয়েট করে, এবং সিস্টেমের যেকোনো একটি ডিপেন্ডেন্সি যেকোনো সময় সমস্যায় পড়তে পারে।
এই আর্টিকেলে, আমরা Ruby on Rails অ্যাপ্লিকেশনের ভিতরে পারফরম্যান্স ইস্যু মনিটর ও সমাধান করতে Magic Dashboards ব্যবহার করব।
কিন্তু Magic Dashboards-এ ডুবার আগে, আমাদের অ্যাপ বিল্ড করার সময় কী কী বিষয়ে লুকিয়ে থাকতে হবে সেটি দেখে নিই।
একটি Ruby অ্যাপ বিল্ড করার সময় বিবেচনা করা বিষয়গুলো
একটি অ্যাপ্লিকেশন ওয়নার বা টিম মেম্বার হিসেবে, আপনি চাইবেন কাস্টমার জানার আগে আপনার অ্যাপ্লিকেশনে কোনো সমস্যা আছে কিনা। এটি আপনাকে অবিলম্বে করেক্টিভ অ্যাকশন নিতে সক্ষম করবে এবং আশা করি আপনার ইউজারদের কোনো ডিসরাপশন এড়াতে পারবেন।
কয়েকটি কী অ্যাপ্লিকেশন প্রশ্ন আছে যেগুলো আপনাকে যেকোনো সময় উত্তর দিতে পারতে হবে:
- পেজ রেসপন্স টাইম এক্সেপ্টেবল কি? গুগল অনুযায়ী, আজকাল দুই সেকেন্ডের চেয়ে স্লো কিছু হলে কাস্টমার আপনার সাইট ছেড়ে অন્યোয় চলে যাবে।
- আপনার ইউজাররা কোনো এরর এক্সপেরিয়েন্স করছেন কি? যদি হয়, তাহলে কোন টাইপের এরর? এরর রেট কত?
- চলমান অপারেশনাল ইস্যু আপনার অ্যাপ্লিকেশনকে প্রভাবিত করছে কি? এটি নেটওয়ার্ক, স্টোরেজ, বা সিকিউরিটি সার্ভিসের সাথে হতে পারে। যেনে পড়েছি, ক্লাউড প্রোভাইডারদের আউটেজ হয় যা আমাদের অ্যাপ্লিকেশনের হেলথও প্রভাবিত করে।
অবজারভেবিলিটি চাবিকাঠি, फिरও এটি প্রায়শই ইঞ্জিনিয়াররা শেষে চিন্তা করে। বেশি, অপারেশনাল রেডিনেসের জন্য শিডিউলে ইতিমধ্যে টাইম বিল্ট-ইন আছে। সেটি বলা হয় প্রোডাক্ট লঞ্চের আগের ويкен্ড! 😄
মজাক পাশাপাশি, আপনাকে প্রথমে অ্যাপ বিল্ড করতে হয় তারপর কিছু থাকবে অবজার্ব করার জন্য। এটি পারফরম্যান্স টেস্টিং ডেভেলপমেন্ট লাইফসাইকলের শেষে ফেলায়। আপনি পারফরম্যান্স টেস্টিং-এ অনেক সময় ব্যয় করতে চান না যখন প্রোডাক্ট কোড-কমপ্লিট নয়, কারণ পরে আবার সব কিছুই করা লাগবে।
একই কথা সিকিউরিটি টেস্টিং-র জন্যও সত্য। আপনি যদি খুব আধিক্য আগে করলে, টেস্টিং-এর পর কিন্তু প্রোডাকশনে যাওয়ার আগে ভালনারেবিলিটি আসতে পারে।
তাই, আমরা জানি মনিটরিং ক্রিটিক্যাল, কিন্তু এই সব চিন্তায় যাযায়। মনিটরিং সঠিক অটেনশন পায় না প্রসেসের শেষে। তাই AppSignal Magic Dashboards তৈরি করেছে।
AppSignal-এ Magic Dashboards
AppSignal মেট্রিক্স, ড্যাশবোর্ড, এবং আপনার অ্যাপের পারফরম্যান্সর গুরুত্ব বুঝে — কিন্তু ইঞ্জিনিয়ারদের লঞ্চের আগে এইগুলোর ওপর কাজ করার জন্য মিনিমাল টাইম থাকে সেটিও বুঝে।
আমাদের Magic Dashboards কে "Magic" বলা হয় কারণ মেট্রিক্স কালেকশন এবং asosciated ড্যাশবোর্ডগুলো আপনার জন্য অটোমেটিক্যালি তৈরি হয়, শুধু আপনার অ্যাপ এবং ইন্টিগ্রেটেড কম্পোনেন্ট কানেক্ট করলে।
Magic Dashboards: একটি উদাহরণ Ruby on Rails অ্যাপ
আমরা কীভাবে Magic Dashboards ব্যবহার করে একটি Ruby on Rails অ্যাপের মধ্যে পারফরম্যান্স ইস্যু মনিটর ও সমাধান করতে পারি সেটি খুঁজে বের করি।
আমাদের অ্যাপ্লিকেশন একটি সিম্পল মেশিন লার্নিং (ML) মডেল ব্যবহার করে ক্রিপ্টোকারেন্সি প্রাইস প্রেডিকশনের জন্য। একটি অ্যাসিনক্রোনাস জব প্রতিদিন লেটেস্ট প্রাইস ডেটা দিয়ে মডেল আপডেট করে এবং সময়ের সাথে সাথে এক্যুরেসি বাড়ায়। এই Rails অ্যাপে ওয়েব পেজ এবং REST API উভয়ই আছে, নিচের আর্কিটেকচার ডায়াগ্রামে দেখানো হয়েছে।

আমাদের Rails অ্যাপ ডিপ্লয় করার পর, Rails Puma ওয়েব সার্ভার এবং Sidekiq অ্যাসিনক্রোনাস জবের জন্য Magic Dashboards অটোমেটিক্যালি তৈরি হয়ে যায়। Magic Dashboards-এর জন্য অন্যান্য সাপোর্টেড ইন্টিগ্রেশন inclou MongoDB এবং Erlang VM।
আপনি Puma Magic Dashboard ব্যবহার করে থ্রেড, পুল ক্যাপাসিটি, এবং Puma ওয়ার্কার বেসড পারফরম্যান্স ইভ্যালুয়েট করতে পারেন। Sidekiq Magic Dashboard কিউ লেন্থ, কিউ লেটেন্সি, জব ডিউরেশন, জব স্ট্যাটাস, এবং মেমরি ইউজ মনিটর করে।
Magic Dashboards ডিটেক্ট হয় এবং তৈরি হয় ইভেন্ট-বেজড মেট্রিক্স যেন Sidekiq জব রান, সেইসাথে মিনিটলি প্রোবের ব্যবহারে। মিনিটলি প্রোব ফিচার আপনাকে একটি Ruby ব্লক বা ক্লাস রেজিস্টার করতে দেয় কাস্টম মেট্রিক্স AppSignal-এ পাঠাতে। Magic Dashboards সাপোর্টেড কম্পোনেন্টের জন্য আউট-অফ-দ-বক্স ইন্টিগ্রেশন দেয়, কিন্তু আপনি এই মেকানিজম ব্যবহার করে আপনার কাস্টম মেট্রিক্স AppSignal-এ পাঠাতে পারেন।
কাস্টম মিনিটলি প্রোবের একটি উদাহরণ
Sidekiq ইন্টিগ্রেশন ইতিমধ্যে বিল্ট-ইন, কিন্তু কল্পনা করুন আপনি একটি প্রپرাইটারি ব্যাকগ্রাউন্ড জব মেকানিজম মনিটর করতে চান। আপনি নিচের ক্লাস উদাহরণ ব্যবহার করতে পারেন। প্রোব ক্লাস একটি কানেকশন পায় যা প্রতিটি কলে ডিজায়ারড মেট্রিক্স পেতে ব্যবহার হয়।
Appsignal::Minutely.probes.register কল দুটি প্যারামিটার নেয় — প্রোবের জন্য একটি নাম এবং এর ইমপ্লিমেন্টেশন, যা যেতে পারে একটি ল্যাম্বডা অথবা একটি ক্লাস যেটি call মেথড ইমপ্লিমেন্ট করে।
AppSignal-র জন্য কনফিগারেশন এবং সিস্টেম রিকোয়ারমেন্টস
সহজে আপনার Rails অ্যাপ্লিকেশনের সাথে AppSignal ব্যবহার করুন Magic Dashboards পেতে। আপনি যদি ইতিমধ্যে AppSignal ইনস্টল না করে থাকেন, আপনার Gemfile-এ appsignal gem যোগ করুন এবং bundle install রান করুন।
তারপর appsignal install কমান্ড রান করুন আপনার এনভাॅयरনমেন্ট কনফিগার করতে। এই কনফিগারেশন একটি কনফিগ ফাইলে বা এনভাॅयरনমেন্ট ভেরিয়েবলে স্টোর করা যেতে পারে, এবং আপনার অ্যাপ্লিকেশনকে আপনার AppSignal একাউন্ট এবং ড্যাশবোর্ডের সাথে কানেক্ট করে।
আপনি ইনস্টল করে সার্ভার রান করলে আপনি নিচের মতো কিছু ইমেইল পাবেন।

এই উদাহরণের জন্য সিস্টেম রিকোয়ারমেন্টস:
- AppSignal gem 2.9.0 বা উচ্চতর, যেটি মিনিটলি প্রোবের সাপোর্ট ইনক্লুড করে।
- Puma ইন্টিগ্রেশন - 3.11.4 বা উচ্চতর ভার্সন দরকার।
- Sidekiq ইন্টিগ্রেশন - Redis gem 3.3.5 বা উচ্চতর দরকার। এই ইন্টিগ্রেশনের জন্য AppSignal gem 2.9.5 বা উচ্চতর রিকমেন্ডেড।
আমাদের প্রাইস প্রেডিকশন API-এর পারফরম্যান্স টেস্টিং
উপরোক্ত উদাহরণ অ্যাপ্লিকেশন একটি সিম্পল নিউরাল নেটওয়ার্ক ব্যবহার করে যেটি Ruby FANN gem দিয়ে ইমপ্লিমেন্ট করা, আগামী দিনের বিটকয়েন প্রাইস প্রেডিক্ট করতে। লাস্ট টেন ডের পার্সেন্টেজ প্রাইস চেঞ্জ ব্যবহার করা হয় মডেলের ইনপুট হিসেবে।
REST API কোনো প্যারামিটার নেয় না, কারণ এখনো শুধু আগামী কালের প্রাইস প্রেডিক্ট করে। আউটপুট একটি সিম্পল JSON ডকুমেন্ট, নিচে দেখানো হয়েছে।
একটি Sidekiq জব প্রতিদিন শুরুতে মার্কেট প্রাইস নেয় এবং ML মডেল আপডেট করে। এই জব প্রতিটি পাঁচ মিনিটে রান করার জন্য শিডিউল করা হয়েছে, যাতে কোনো আউটেজ বা এরর হলে দ্রুত ক্যাচ আপ করতে পারে।
এই আর্টিকেলের সকল কোড GitHub-এ পাবেন। দয়া করে নোট করুন যে এই আর্টিকেল বা সফ্টওয়্যারে কিছুই ইনভেস্টমেন্ট أدভাইস নয়। ক্রিপ্টোকারেন্সি নিয়ে যেকোনো ইনভেস্টমেন্ট ডিসিশন लेने আগে আর্থিক উপদেষ্টা পরামর্শ लিন।
আমরা JMeter ব্যবহার করব REST API-র ওপর লোড সিমুলেট করতে পারফরম্যান্স টেস্টিং-এর জন্য। এটি আমাদের ট্রাফিক জেনারেট করতে এবং Magic Dashboards ব্যবহার করে পারফরম্যান্স ইভ্যালুয়েট করতে দেয়। আমাদের প্রথম টেস্ট ৫ কনকারেন্ট ক্লায়েন্ট ব্যবহার করে, প্রতিটি ১০০ রিকোয়েস্ট করে।
স্ট্যাটিস্টিক্স দেখাচ্ছে রেসপন্স টাইমে ফেরি হাই রেঞ্জ, এভারেজ ৩৪২ms, কিন্তু P99 ৮৫২ms। লাগছে আমরা আরও ভালো করতে পারি।

Puma Magic Dashboard দিয়ে Rails অ্যাপের পারফরম্যান্স উন্নতি
আমাদের Puma Magic Dashboard-এ থ্রেড পুল ক্যাপাসিটির একটি গ্রাফ আছে, এবং আমরা দেখি টেস্ট রান এর সময় এটি শূন্যে চলে যায়। এটি ব্যাখ্যা করে কেন কিছু রিকোয়েস্ট বেশি সময় নিচ্ছে, তাই আমরা Puma থ্রেডের সংখ্যা ১০ করব।
মনে রাখবেন, ড্যাশবোর্ড বা এই গ্রাফ তৈরি করতে আমরা কিছু করিনি। AppSignal অটোমেটিক্যালি এটি তৈরি করেছে।

বৃদ্ধি করা Puma থ্রেড কাউন্টের সাথে টেস্ট রান করলে, রেসপন্স টাইমগুলো অনেক বেশি কনসিস্টেন্ট, এবং ড্যাশবোর্ড কনফার্ম করে পুল ক্যাপাসিটি এক্সেপ্টেবল লেভেলে আছে।

এখন ডায়াল বাড়াতে হয়। JMeter কনকারেন্ট ক্লায়েন্টের সংখ্যা ৫০ করা হয়, ৫ সেকেন্ড র্যাম্প-আপ টাইমসহ। এই টেস্ট খারাপ রেসপন্স টাইম এবং কিছু API এরর দেখাচ্ছে। Puma Magic Dashboard আবার দেখাচ্ছে উপলব্ধ Puma থ্রেড শূন্যে পৌঁছাচ্ছে।
API কোড দেখলে পাওয়া যায়, মডেল ডাটাবেস থেকে প্রতিবার লোড হচ্ছে। এটি ফফিশিয়েন্ট নয়, তাই আমরা Sidekiq জবকে পরিবর্তন করি যাতে এটি শুধু নতুন ডেইলি প্রাইস নয়, বরং ML মডেল রান করে প্রেডিকশন ডাটাবেসে সেভ করে।
আমরা এই পরিবর্তন ডিপ্লয় করি।
Sidekiq Magic Dashboard দিয়ে ভালো API পারফরম্যান্স
এখন আমাদের Sidekiq Magic Dashboard চেক করি। দুর্ভাগ্য, কোডে একটি বাগ আছে, কিন্তু কমপক্ষে আমরা দ্রুত সেটি চিনতে এবং ফিক্স করে রি-ডিপ্লয় করতে পারলাম।

Sidekiq PriceUpdateJob কাজ করার সাথে সাথে, API মডিফাই করা হয় যাতে শুধু ডাটাবেস থেকে প্রেডিক্টেড প্রাইস রিট্রিভ করতে হয়। এটি API পারফরম্যান্স উন্নত করে, কিন্তু এখনও কিছু API এরর এবং লেনথি রেসপন্স টাইম দেখাচ্ছে।
ফিরে Puma Magic Dashboard-এ
ড্যাশবোর্ডে এক নজর डालলে হাইলাইট হয় যে আমরা এখনও Puma কনফিগার করিনি অডিশনাল ওয়ার্কার ব্যবহার করার জন্য। একটি Puma ওয়ার্কার হল একটি OS-লেভেল প্রসেস যা কয়েকটি থ্রেড রান করতে পারে। টোটাল থ্রেড কাউন্ট = ওয়ার্কার সংখ্যা × ম্যাক্স থ্রেড। প্রথমে আমরা ২ ওয়ার্কার ব্যবহার করি, কিন্তু উপলব্ধ থ্রেড এখনও এক্সহাস্ট হয়ে যায়। তাই আমরা ৪ ওয়ার্কার করব।

আমাদের API পারফরম্যান্স এখন খুব ভালো। এভারেজ রেসপন্স টাইম ৪১৯ms, এবং কোনো API এরর নেই।

Magic Dashboard কনফার্ম করে যে এখনও উপলব্ধ থ্রেড ক্যাপাসিটি আছে।

AppSignal-এর Magic Dashboards আমাদের Puma ওয়েব সার্ভারের ক্যাপাসিটিতে তাৎক্ষণিক অন্তর্দৃষ্টি দেয়। Sidekiq এবং Active Worker ড্যাশবোর্ডগুলো আমাদের অ্যাপ্লিকেশনের অ্যাসিনক্রোনাস জবের জন্য সিমিলার অন্তর্দৃষ্টি দেয়।
Magic Dashboards থেকে আমরা যা শিখলাম
আমাদের Rails অ্যাপ্লিকেশন পারফরম্যান্স টেস্টিং এর সময়, Puma Magic Dashboard আমাদের সহজে চিনতে সাহায্য করল যে থ্রেডের সংখ্যা আমাদের ডিজায়ারড থ্রুপুট লেভেলের জন্য অপর্যাপ্ত। এটি থ্রেড পুল ক্যাপাসিটি, সময়ের সাথে ওয়ার্কারের সংখ্যা, এবং টোটাল থ্রেড সংখ্যা দেখায়।
যদিও Sidekiq জবের কোনো পারফরম্যান্স ইস্যু নেই, Magic Dashboard আমাদের ডিপ্লয়মেন্টের পর একটি এরর দ্রুত চিনতে সাহায্য করল, যা আমরা ফিক্স করে দ্রুত রি-ডিপ্লয় করলাম। এই সব মনিটরিং ক্যাপাবিলিটি AppSignal অটোমেটিক্যালি সেট আপ করে দিয়েছিল।
Ruby এবং Rails অ্যাপের জন্য AppSignal-এর ড্যাশবোর্ড ফিচার
AppSignal-এ ড্যাশবোর্ডের نیمস্পেস থাকে, যেন "web" অ্যাপ্লিকেশন বা "background" জব, যাতে আপনি আপনার অ্যাপ্লিকেশনের অনেকগুলো মনিটরিং ভিউ তৈরি করতে পারেন। বিল্ট-ইন সামারি ড্যাশবোর্ড আপনার অ্যাপ্লিকেশনের হেলثের ওভারভিউ দেখায়, যার মধ্যে থ্রুপুট, রেসপন্স টাইম, এবং লেটেস্ট এরর।
নোট করুন যে, যেকোনো ড্যাশবোর্ডের মত, আপনি কী গ্রাফ এবং মেট্রিক্স দেখানো হবে সেটি এডিট করতে পারেন, সেইসাথে লেআউট এবং সিলেক্টেড গ্রাফের কনফিগারেশন পরিবর্তন করতে পারেন।
অ্যানোমালি ডিটেকশন একটি পাওয়ারফুল ফিচার। এটি আপনাকে থ্রেশহোল্ড ডিফাইন করতে দেয় যাতে একটি মেট্রিক ভ্যালু দেওয়া ভ্যালুর ওপর বা নিচে যাওয়ায় নোটিফিকেশন পাঠায়, যেন ফ্রি মেমরি বা এরর রেট।
উপসংহার: আজই AppSignal দিয়ে আপনার Ruby অ্যাপ মনিটর করুন
অবজারভেবিলিটি এবং পারফরম্যান্স আমাদের অ্যাপ্লিকেশনের সাফল্যের জন্য ক্রিটিক্যাল। কিন্তু আমরা প্রায়শই লাস্ট মিনিটে এই টপিকগুলো হ্যান্ডেল করি।
AppSignal-এর Magic Dashboards ব্যাপক আউট-অফ-দ-বক্স মেট্রিক্স, ড্যাশবোর্ড, এবং অন্তর্দৃষ্টি প্রদান করে যা অটোমেটিক্যালি সেট আপ হয়। এটি আপনাকে দ্রুত আপনার অ্যাপ্লিকেশনের পারফরম্যান্স টিউন করতে এবং অপারেশনাল রেডিনেসের স্টেটে পৌঁছাতে দেয়।
Ruby-র জন্য AppSignal সম্পর্কে আরও পড়ুন।
পরের بار না দেখা পর্যন্ত, শুভ কোডিং!