কম্পিউটার টিউটোরিয়াল

Ruby on Rails-এ AppSignal-র সাথে ফিচার ফ্ল্যাগ ইমপ্যাক্ট মাপুন: একটি প্র্যাক্টিক্যাল গাইড

ফিচার ফ্ল্যাগ সফটওয়্যার ডেভেলপমেন্টে একটি শক্তিশালী টুল, যা ডেভেলপারদের নতুন কোড ডিপ্লয় ছাড়া রানটাইমে একটি অ্যাপ্লিকেশনের বিহেভিয়র কন্ট্রোল করতে দেয়। এগুলো নতুন ফিচার টেস্ট করতে, A/B টেস্টিং করতে, এবং পরিবর্তন ক্রমাগত রোল আউট করতে সক্ষম করে।

Ruby on Rails-এ, ফিচার ফ্ল্যাগ বিভিন্ন টুল ব্যবহার করে ম্যানেজ করা যেতে পারে, সবচেয়ে জনপ্রিয় হলো Flipper জেম। এই আর্টিকেলটি Flipper এবং AppSignal-এর কাস্টম মেট্রিক্স ব্যবহার করে একটি Solidus স্টোরফ্রন্টে ফিচার ফ্ল্যাগ ইমপ্লিমেন্ট এবং তার ইমপ্যাক্ট মাপার ওপর এক্সপ্লোর করবে।

Rails-এ ফিচার ফ্ল্যাগ কী, আবার?

আপনি যদি বিষয়টির একটি পরিচিতি খুঁজছেন, Add Feature Flags in Ruby on Rails with Flipper পোস্টটি চেক আউট করুন।

সংক্ষেপে, ফিচার ফ্ল্যাগ হলো আপনার অ্যাপ্লিকেশন কীভাবে বিহেভ করবে সেটি রানটাইমে ইনফ্লুয়েন্স করার একটি উপায়, নতুন কোড ডিপ্লয় ছাড়া। সিম্পলেস্ট টাইপের ফিচার ফ্ল্যাগ হচ্ছে এনভায়রনমেন্ট ভেরিয়েবল। প্রতিটি Ruby on Rails অ্যাপ্লিকেশন বক্সের বাইরে সেগুলো ব্যবহার করে। একটি উদাহরণ হলো ENV['WEB_CONCURRENCY'] ব্যবহার করে অ্যাপ্লিকেশন সার্ভার কনকারেন্সি কনফিগার করা।

তবে, ফিচার ফ্ল্যাগ ম্যানেজ করার অন্যান্য উপায়ও আছে, যেমন ActiveRecord বা Redis-এর মতো একটি পারসিস্টেন্স লেয়ার ব্যবহার করে। একটি ব্যাপক উপায় Flipper জেম অফার করে।

নিচের স্নিপেট উদাহরণ দেখায় কীভাবে performance_improvement ফিচার ফ্ল্যাগটি একটি নির্দিষ্ট ইউজারের জন্য ইভ্যালুয়েট করা হয়:


পরবর্তী, আমরা একটি Solidus স্টোরফ্রন্ট সেট আপ করব ফিচার ফ্ল্যাগের সাথে পরীক্ষা-নিরীক্ষা শুরু করার জন্য।

আমাদের উদাহরণ অ্যাপ: একটি Solidus স্টোরফ্রন্ট

একটি কিছুটা রিয়েলিস্টিক সিনেরিওতে ফিচার ফ্ল্যাগের ইমপ্যাক্ট মাপার জন্য, চলুন দ্রুত একটি Solidus স্টোর বুটস্ট্র্যাপ করি:


এই জেনারেটর আপনাকে প্রসেসের মাধ্যমে গাইড করবে এবং সেটআপ সংক্রান্ত কিছু প্রশ্ন করবে।

  1. ফ্রন্টএন্ড টাইপ জিজ্ঞেস করা হলে starter ফ্রন্টএন্ড বেছে নিন।
  2. পেমেন্ট মেথড সেটআপ স্কিপ করুন।
  3. /-এ আপনার Solidus অ্যাপ্লিকেশন মাউন্ট করতে বেছে নিন, যেহেতু আমরা এটিকে স্ট্যান্ডঅ্যালোন অ্যাপ হিসেবে ব্যবহার করছি।

পরে, আপনার টার্মিনাল থেকে bin/dev রান করুন এবং আপনি প্রস্তুত থাকবেন। যখন আপনি https://localhost:3000-এ যাবেন, আপনি এই স্ক্রিনটি দেখবেন:

Ruby on Rails-এ AppSignal-র সাথে ফিচার ফ্ল্যাগ ইমপ্যাক্ট মাপুন: একটি প্র্যাক্টিক্যাল গাইড

Flipper-র সাথে ফিচার ফ্ল্যাগ ইমপ্লিমেন্ট করুন

এখন চলুন ফিচার ফ্ল্যাগের জন্য দুটি উদাহরণ ইউজ কেস ইমপ্লিমেন্ট করি:

  • একটি পারফরম্যান্স ইমপ্রুভমেন্ট।
  • কনভার্সন রেট অপ্টিমাইজেশনের একটি প্রচেষ্টা।

সবার আগে, আমাদের flipper জেম পাশাপাশি এর active_record স্টোরেজ অ্যাডাপ্টার যোগ করতে হবে:


এটি ফ্লিপার "গেটস" লুকআপ করার জন্য প্রয়োজনীয় ডাটাবেস টেবিল সেট আপ করবে, অর্থাৎ একটি ফিচার ফ্ল্যাগ চেক করার সময় ইভ্যালুয়েট করার কনক্রিট কন্ডিশনাল।

একটি পারফরম্যান্স ইমপ্রুভমেন্ট টেস্ট করা

এই সিনেরিও আsier করতে, আমরা স্টোরফ্রন্টে একটি স্লো রিকোয়েস্ট সিমুলেট করব অনঅপ্টিমাইজড কেসের জন্য sleep 1 কল যোগ করে:


এখন, আমরা একটি "পারসেন্টেজ অফ টাইম" স্ট্র্যাটেজি ব্যবহার করব অপ্টিমাইজেশনটি র‍্যাঞ্ডম সেট অফ রিকোয়েস্ট জুড়ে রোল আউট করার জন্য। একটি Rails কনসোল খুলুন এবং নিচের কমান্ডটি টাইপ করুন:


oha লোড টেস্টিং টুল ব্যবহার করে, আমরা নিশ্চিত করতে পারি যে আধা রিকোয়েস্ট এক সেকেন্ড বেশি সময় নিচ্ছে অন্যদের চেয়ে:



কনভার্সন রেট অপ্টিমাইজেশন টেস্ট করা

ইউজার-ফেসিং ফিচারের সাথে কাজ করার সময়, উদাহরণস্বরূপ UI-এ পরিবর্তন, প্রায়শই "পারসেন্টেজ অফ এক্টরস" স্ট্র্যাটেজি ব্যবহার করা পরামর্শদাতা ফ্ল্যাগ রোল আউট করার জন্য। এই পথে, প্রতিটি ইউজার কনসিস্টেন্টলি একই অভিজ্ঞতা পায়।

তো শুরু করতে, আমরা আমাদের ই-কমার্স অ্যাপ্লিকেশনের জন্য দুটি ইউজার তৈরি করব। একটি Rails কনসোল ফায়ার আপ করুন এবং নিচের কমান্ডগুলো ইস্যু করুন:


এটি দুটি স্যাম্পল ইউজার তৈরি করে এবং নিশ্চিত করে যে ফিচার ফ্ল্যাগ কনসিস্টেন্টলি একটিকে জন্য ইनेবলড আছে।

কনভার্সন রেট বাড়ানোর চেষ্টা করে একটি ফিচার সিমুলেট করতে, আমরা চেকআউট বাটনকে পালসেট করব:


যদি আমরা উভয় ইউজারের সাথে লগইন করি এবং ব্রাউজার উইন্ডো সাইড বাই সাইড সাজাই, আমরা দেখতে পাই যে প্রভাবে একটিকে (বাম পাশের) জন্য এক্টিভ আছে:

AppSignal কাস্টম মেট্রিক্স ব্যবহার করে ফিচার ফ্ল্যাগের ইমপ্যাক্ট মাপুন

সেরা ফিচার ফ্ল্যাগ সিস্টেমও নিষ্ফল যদি এর ইমপ্যাক্ট ইভ্যালুয়েট করার কোনো উপায় না থাকে। আমাদের উদাহরণ সিনেরিওতে, আমরা সহজে জানতে চাই:

  • পারফরম্যান্স ইমপ্রুভমেন্টটি কি উল্লেখযোগ্য ল্যাটেন্সি রিডাকশনে 이르েছে?
  • আমাদের পালসেটিং চেকআউট বাটনটি কি উল্লেখযোগ্যভাবে উচ্চতর কনভার্সন রেটে 이르েছে?

আমরা এই অপ্টিমাইজেশনের ফলাফল মাপার জন্য AppSignal-এর কাস্টম মেট্রিক্স ব্যবহার করব।

প্রথমে, আপনার AppSignal অর্গানাইজেশনে একটি নতুন অ্যাপ্লিকেশন তৈরি করুন এবং ইনস্ট্রাকশন ফলো করে আপনার অ্যাপের সাথে কানেক্ট করুন:



এক মেজারমেন্ট মেট্রিক দিয়ে ল্যাটেন্সি মাপা

আমরা oha CLI-র মাধ্যমে আমাদের ইমপ্রুভমেন্ট কতটা ইফেক্টিভ সেটি ভেরিফাই করেছি, কিন্তু বৈধ বিচার দেওয়ার জন্য আমরা সার্ভার-সাইড টেলিমেট্রি ইনস্টল করব যা AppSignal-এ ল্যাটেন্সি রিপোর্ট করবে। একটি মেজারমেন্ট মেট্রিক ঠিক সেটি করার অনুমতি দেয়: আমরা রেসপন্স টাইম মিলিসেকেন্ডে পাঠাব, এবং একটি মেট্রিক ট্যাগ যোগ করব নির্দেশ করে আমাদের পারফরম্যান্স অপ্টিমাইজেশন একটি নির্দিষ্ট রিকোয়েস্টের জন্য এক্টিভ ছিল কিনা।

এখানে একটি ছোট গোচ্ছা: যেহেতু আমরা "Percentage of Time" মেট্রিক ব্যবহার করছি, আমাদের ফ্ল্যাগের স্টেট একটি ইনস্ট্যান্স ভেরিয়েবলে ক্যাপচার করতে হবে যাতে একই মান এক্সিকিউশন এবং রিপোর্টিং দুটোর জন্যও ব্যবহার হয়:


এখন 위에서 했던 লোকাল লোড টেস্টিং রিপিট করি:


এই মেট্রিক চার্টিং এবং ইভ্যালুয়েট করার দিকে একটু দেখি। তার আগে, আমাদের দ্বিতীয় ফিচার ফ্ল্যাগের দিকে ঘুরে যাই।

এক কাউন্টার মেট্রিক দিয়ে কনভার্সন ট্যালি করা

আমরা একটি কাউন্টার মেট্রিক ব্যবহার করব কনভার্সন কাউন্ট করতে। এটা একটি চমৎকার পছন্দ যদি আপনি শুধু একটি ইভেন্টের ট্যালি রাখতে চান।

এটি করতে, আমাদের CartsController খোলতে হবে, এবং, ডেমонস্ট্রেশন প্রপোজের জন্য, একটি increment_counter কল যোগ করতে হবে যদি চেকআউট বাটন ক্লিক করা হয়:


এখন এটিকে টেস্ট করি ম্যানুয়ালি রেসপেক্টিভ ব্রাউজার উইন্ডো খুলে এবং "Checkout" বাটন ৩ বার ক্লিক করে, এবং অন্য কেসে শুধু একবার। এইভাবে, আমরা দেখতে পারি অপ্টিমাইজেশন ফ্ল্যাগটি এক্টিভ কিনা।

AppSignal-এ কাস্টম ড্যাশবোর্ড সেট আপ করুন

আমাদের চূড়ান্ত ধাপ হলো ইনফরমেটিভ গ্রাফিক্স তৈরি করা ডেটা-ইনফর্মড বিজনেস ডিসিশন নেওয়ার জন্য। আমরা AppSignal-এর ড্যাশবোর্ড ব্যবহার করব এটি অর্জন করতে। ধাপে ধাপে চলে যাই:

  1. বাম সাইডবারে, "Add dashboard" ক্লিক করুন এবং নাম দিন "Feature Flag Evaluation"।

Ruby on Rails-এ AppSignal-র সাথে ফিচার ফ্ল্যাগ ইমপ্যাক্ট মাপুন: একটি প্র্যাক্টিক্যাল গাইড

  1. "Add Graph" ক্লিক করুন এবং products_response_time মেট্রিক। "mean" সিলেক্ট করুন শুধু গড় মান দেখাতে এবং performance_improvement_enabled ট্যাগ অ্যাপ্লাই করুন।

Ruby on Rails-এ AppSignal-র সাথে ফিচার ফ্ল্যাগ ইমপ্যাক্ট মাপুন: একটি প্র্যাক্টিক্যাল গাইড

  1. "Add new Graph" ক্লিক করুন চেকআউট কাউন্টের জন্য একটি চার্ট যোগ করতে। আবার, optimization_active ট্যাগ অ্যাপ্লাই করুন।

Ruby on Rails-এ AppSignal-র সাথে ফিচার ফ্ল্যাগ ইমপ্যাক্ট মাপুন: একটি প্র্যাক্টিক্যাল গাইড

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

Ruby on Rails-এ AppSignal-র সাথে ফিচার ফ্ল্যাগ ইমপ্যাক্ট মাপুন: একটি প্র্যাক্টিক্যাল গাইড

এবং এটিই!

উপসংহার

আমরা দেখেছি কীভাবে ফিচার ফ্ল্যাগ একটি নমনীয় এবং দক্ষ উপায় অফার করে নতুন ফিচার ম্যানেজ এবং ডিপ্লয় করার জন্য একটি Ruby on Rails অ্যাপ্লিকেশনে। Flipper জেম এবং AppSignal-এর কাস্টম মেট্রিক্স ব্যবহার করে, ডেভেলপাররা শুধু ফিচার রোলআউট কন্ট্রোল করতে পারেন না, বরং পারফরম্যান্স এবং ইউজার বিহেভিয়রের ওপর তাদের ইমপ্যাক্টও মাপতে পারেন।

এই পদ্ধতিটি নিশ্চিত করে যে নতুন ফিচারগুলো ভালোভাবে টেস্ট করা এবং অপ্টিমাইজ করা হয় ফুল्ली ডিপ্লয় করার আগে, চূড়ান্তভাবে একটি আরও স্থিতিশীল এবং ব্যবহারকারী-বান্ধব অ্যাপ্লিকেশন নিয়ে আসে। চূড়ান্তভাবে, এটি আরও ইনফর্মড বিজনেস ডিসিশন নিয়ে আসতে পারে বিকল্প পদ্ধতিগুলোর ইফেক্টিভনেস যাচাই করার সময়।

হ্যাপি কোডিং!

P.S. আপনি যদি Ruby Magic পোস্টগুলো প্রেস থেকে বের होते হই পড়তে চান, আমাদের Ruby Magic নিউজলেটার সাবস্ক্রাইব করুন এবং কখনো একটি পোস্ট মিস করবেন না!

Ruby on Rails-এ AppSignal-র সাথে ফিচার ফ্ল্যাগ ইমপ্যাক্ট মাপুন: একটি প্র্যাক্টিক্যাল গাইড

Julian Rubisch

আমাদের অতিথি লেখক Julian ভিয়েনা-ভিত্তিক একটি ফ্রিল্যান্স Ruby on Rails কনসাল্টেন্ট, Reactive Rails-এ স্পেশালাইজড। StimulusReflex কোর টিমের অংশ, তিনি ২০২০ থেকে কাটিং-এজ HTML-ওভার-দ্য-ওয়ার টেকনোলজি ডেভেলপ করার অগ্রগণ্যে আছেন।

Julian Rubisch-এর সকল আর্টিকেল


  1. CSS-এ বক্স মডেল কী?

  2. Tkinter-এ ফ্রেমের সব চাইল্ড এলিমেন্ট মুছে ফেলা

  3. HTML DOM Input Email maxLength প্রোপার্টি

  4. Android অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে চলছে কিনা তা যাচাই করার পদ্ধতি