আপডেট প্রতিটি সফ্টওয়্যার অংশ; আপনাকে বাগগুলি ঠিক করতে হবে, নতুন বৈশিষ্ট্য যোগ করতে হবে এবং জিনিসগুলিকে আরও নিরাপদ, নির্ভরযোগ্য বা দ্রুততর করতে সাধারণত পুনরাবৃত্তি করতে হবে৷
কিন্তু স্থাপনার সাথে নতুন বৈশিষ্ট্য বা পরিবর্তনগুলিকে সংযুক্ত করা সর্বদা একটি ভাল ধারণা নয়। কখনও কখনও আপনি পুনরাবৃত্ত স্থাপনার সময়সূচী অনুসরণ করেন, কিন্তু বিপণন দল নতুন বৈশিষ্ট্য ঘোষণা করতে প্রস্তুত নয়। পরিবর্তনগুলি হার্ডকোড করা হলে, বিপণন দলের একটি বিকাশকারীর প্রয়োজন হতে পারে সেগুলি সক্রিয় বা নিষ্ক্রিয় করার জন্য৷
বৈশিষ্ট্য পতাকা, বা বৈশিষ্ট্য টগল, একটি স্থাপনার থেকে আপনার পরিবর্তনগুলি ডিকপল করার একটি উপায়৷ আপনি একটি পরিবর্তন বাস্তবায়ন করেন, কিন্তু আপনি এটি একটি যদি-বিবৃতির পিছনে লুকিয়ে রাখেন; যতক্ষণ একটি ভেরিয়েবল মিথ্যা হয়, সফ্টওয়্যার আপনার পরিবর্তনের আগে সংস্করণটি ব্যবহার করবে; যদি ভেরিয়েবলটি true হয় , এটা নতুন সংস্করণ হবে. যদি ভেরিয়েবলের মান একটি ডাটাবেস থেকে আসে যা মার্কেটিং টিম অ্যাক্সেস করতে পারে, তারা কোড পরিবর্তনের প্রয়োজন ছাড়াই এই পরিবর্তনগুলি টগল করতে পারে৷
Upstash Redis® যেমন একটি ডাটাবেস. এটি একটি সাধারণ কী-মানের দোকান যা আপনি আপনার বৈশিষ্ট্য পতাকাগুলি সংরক্ষণ করতে ব্যবহার করতে পারেন। যেহেতু এটি অত্যন্ত দ্রুত, তাই এটি আপনার অ্যাপ্লিকেশনে একাধিক ভিন্ন পতাকা পরীক্ষা করার জন্য আপনার বিলম্বে বেশি কিছু যোগ করে না।
এই টিউটোরিয়ালটি আপনাকে শেখাবে কিভাবে আপনার Next.js অ্যাপের জন্য একটি সাধারণ ফিচার ফ্ল্যাগ মেকানিজম তৈরি করতে হয়। আমরা Vercel-এ স্থাপন করব এবং Upstash Redis® স্টোরেজ হিসেবে ব্যবহার করব।
পূর্বশর্ত
আপনার একটি GitHub অ্যাকাউন্ট, একটি Vercel অ্যাকাউন্ট এবং একটি Upstash অ্যাকাউন্ট প্রয়োজন৷
৷যেহেতু আমরা NPM ব্যবহার করি, তাই আপনার Node.js-এর বর্তমান ইনস্টলেশনও প্রয়োজন।
একটি Next.js প্রকল্প শুরু করা হচ্ছে
আমাদের প্রথম ধাপ হল একটি নতুন Next.js প্রকল্প তৈরি করা। আপনি নিম্নলিখিত কমান্ড দিয়ে এটি করবেন:
$ npx create-next-app upstash-next-feature-flags Upstash Redis® সংযোগ তৈরি করা হচ্ছে
এর পরে, আমাদের অবশ্যই আমাদের Next.js অ্যাপটিকে একটি Upstash Redis® ডাটাবেসের সাথে সংযুক্ত করতে হবে। এর জন্য, আমাদের @upstash/redis ইনস্টল করতে হবে প্যাকেজ করুন এবং এর চারপাশে একটি ছোট মোড়ক তৈরি করুন৷
$ npm i @upstash/redis
upstash-next-feature-flags/lib/featureFlags.js এ একটি ফাইল তৈরি করুন এই কোড সহ:
import { Redis } from "@upstash/redis";
const { UPSTASH_TOKEN, UPSTASH_URL } = process.env;
const redis = new Redis({
token: UPSTASH_TOKEN,
url: UPSTASH_URL,
});
export async function flagIsActive(flagName) {
const flag = await redis.get(flagName);
return Boolean(flag);
}
আমরা এই টিউটোরিয়ালে পরে সেট আপ করার জন্য পরিবেশ ভেরিয়েবল থেকে API শংসাপত্রগুলি পাব। flagIsActive ফাংশন Redis® কে জিজ্ঞাসা করবে এবং প্রত্যাবর্তিত মানটিকে একটি boolean এ রূপান্তর করবে . এই রূপান্তরটি প্রয়োজনীয় কারণ আমরা পতাকাটিকে Redis-এ একটি সংখ্যা হিসাবে সংরক্ষণ করব।
এপিআই রুট তৈরি করা হচ্ছে
আমাদের অবশ্যই দুটি ভিন্ন বাস্তবায়নের সাথে API রুট তৈরি করতে হবে। আমরা তাদের মধ্যে স্যুইচ করতে বৈশিষ্ট্য পতাকা ব্যবহার করব।
এর জন্য, upstash-next-feature-flags/pages/api/sort-numbers.js এ একটি ফাইল তৈরি করুন .
এটিতে এই কোড থাকা উচিত:
import { flagIsActive } from "../../lib/featureFlags";
export default async function handler(request, response) {
let sort = bucketSort;
const newSortingAlgorithm = await flagIsActive("newSortingAlgorithm");
if (newSortingAlgorithm) sort = selectionSort;
const { numbers } = request.body;
const sorted = sort(numbers);
response.status(200).json({
numbers: sorted,
newSortingAlgorithm,
});
}
// old sorting algorithm
const bucketSort = (arr, size = 5) => {
const min = Math.min(...arr);
const max = Math.max(...arr);
const buckets = Array.from(
{ length: Math.floor((max - min) / size) + 1 },
() => [],
);
arr.forEach((val) => {
buckets[Math.floor((val - min) / size)].push(val);
});
return buckets.reduce((acc, b) => [...acc, ...b.sort((a, b) => a - b)], []);
};
// new sorting algorithm
const selectionSort = (arr) => {
const a = [...arr];
for (let i = 0; i < a.length; i++) {
const min = a
.slice(i + 1)
.reduce((acc, val, j) => (val < a[acc] ? j + i + 1 : acc), i);
if (min !== i) [a[i], a[min]] = [a[min], a[i]];
}
return a;
}; এই API রুট একটি সাধারণ সংখ্যা বাছাইকারী। এটি সাজানো সংখ্যার একটি বিন্যাস নেয় এবং তাদের সাজানোর জন্য দুটি সাজানোর অ্যালগরিদমের মধ্যে একটি ব্যবহার করবে৷
এই বাছাই অ্যালগরিদমগুলি আপনার অ্যাপ্লিকেশনে "টগল" করতে চান এমন যেকোনো পরিবর্তনের জন্য দাঁড়ায়। এগুলিকে আপনার কোডে রাখুন এবং flagIsActive এর মাধ্যমে তাদের মধ্যে স্যুইচ করুন৷ Redis-এ মান পরিবর্তন করে ফাংশন।
আমরা flagIsActive কল করি ফাংশন এবং এটি পতাকার নাম দিন যা আমরা পরীক্ষা করতে চাই। যদি পতাকা 1 সেট করা থাকে Redis-এ, এই ফাংশনটি true প্রদান করে; অন্যথায়, এটি false ফিরে আসবে .
সাজানোর পরে, API রুট সাজানো অ্যারের সাথে প্রতিক্রিয়া জানায়।
প্রজেক্টটিকে GitHub-এ ঠেলে দেওয়া হচ্ছে
সবকিছু বাস্তবায়ন করার পরে, আমাদের প্রকল্পটিকে GitHub-এর একটি সংগ্রহস্থলে ঠেলে দিতে হবে যাতে এটি Verce’ls ডিপ্লয়মেন্ট পরিষেবার জন্য অ্যাক্সেসযোগ্য হয়। GitHub ব্যাখ্যা করে কিভাবে তাদের ডক্সে একটি সংগ্রহস্থল তৈরি করতে হয়।
একটি খালি সংগ্রহস্থল তৈরি করা স্বয়ংক্রিয়ভাবে আপনাকে দেখাবে কিভাবে আপনি এটিকে আমাদের তৈরি করা প্রকল্পের সাথে লিঙ্ক করতে পারেন৷
একটি Upstash Redis® ডেটাবেস তৈরি করা
আপনি Upstash কনসোলে একটি নতুন ডাটাবেস তৈরি করতে পারেন। চিত্র 1 এই টিউটোরিয়ালের জন্য একটি ভাল কনফিগারেশন দেখায়।

যেমন চিত্র 1 বলছে, একটি ডাটাবেস বিনামূল্যে, তাই আপনাকে এই টিউটোরিয়ালের জন্য কিছু দিতে হবে না।
Upstash কনসোল দিয়ে ব্রাউজার ট্যাবটি খোলা রাখুন কারণ ডাটাবেস শংসাপত্রগুলি সংগ্রহ করার জন্য আমাদের পরে এটি প্রয়োজন৷
ভার্সেলের সাথে GitHub সংগ্রহস্থল লিঙ্ক করা
আপনি যদি ভার্সেলে লগ ইন করতে আপনার GitHub অ্যাকাউন্ট ব্যবহার করেন, একটি GitHub সংগ্রহস্থল যোগ করতে শুধুমাত্র কয়েকটি ক্লিক লাগে। চিত্র 2-এ, আপনি Vercel ড্যাশবোর্ডের উপরের বাম দিকে দেখতে পাচ্ছেন; "নতুন যোগ করুন..." এ ক্লিক করুন এবং "প্রকল্প" নির্বাচন করুন৷
৷

"গিটহাবের সাথে চালিয়ে যান" এবং "আমদানি" বোতামগুলির মধ্যে একটি বেছে নিন যা আপনার আগের ধাপে তৈরি করা সংগ্রহস্থলের অন্তর্গত৷

অবশেষে, প্রকল্প কনফিগারেশন ধাপ পপ আপ হবে, যেখানে আপনাকে আপনার পরিবেশের ভেরিয়েবল যোগ করতে হবে। সেই কনফিগারেশনের বাকি অংশের জন্য, আপনি ডিফল্ট রাখতে পারেন। চিত্র 4 সেই স্থানটি দেখায় যেখানে আপনাকে এই ভেরিয়েবলগুলি প্রবেশ করতে হবে৷

তাদের বলা হয় UPSTASH_TOKEN এবং UPSTASH_URL , এবং আপনি সেগুলিকে আপনার Upstash কনসোলে খুঁজে পাবেন, যেখানে আমরা আগে ডাটাবেস তৈরি করেছি। চিত্র 5 দেখায় যে আমাদের ভেরিয়েবলের জন্য প্রয়োজনীয় মানগুলি কপি করতে আপনার কোন বোতামগুলি প্রয়োজন৷

আপনি যখন বড় "ডিপ্লয়" বোতাম টিপুন, তখন Vercel আপনার GitHub সংগ্রহস্থল ক্লোন করবে এবং এটিকে এর পরিকাঠামোতে স্থাপন করবে।
Redis এর মাধ্যমে বাস্তবায়নের মধ্যে পরিবর্তন করা
এখন, আমরা আমাদের API এন্ডপয়েন্ট কল করতে সক্ষম হওয়া উচিত, এবং আমরা Redis এ একটি মান সেট করে বাস্তবায়নের মধ্যে স্যুইচ করতে পারি। Upstash কনসোলে Redis CLI হল এটি অর্জন করার সবচেয়ে সহজ উপায়।
চিত্র 6 ব্যাখ্যা করে যে CLI কোথায় পাওয়া যাবে এবং মান সেট করার জন্য আমাদের যে কমান্ড চালাতে হবে।
সেট newSortingAlgorithm 1

যদি আমরা newSortingAlgorithm মুছতাম অথবা এটি 0 এ সেট করুন , এটি পতাকাটিকে false,-এ ফিরিয়ে দেবে এবং আমাদের API রুট পুরানো অ্যালগরিদম ব্যবহার করবে।
এপিআই রুট ব্যবহার করা
শেষ জিনিসটি অনুপস্থিত হল API রুটের প্রকৃত ব্যবহার। আমাদের অবশ্যই রুটে একটি POST অনুরোধের মাধ্যমে একটি JSON অবজেক্ট পাঠাতে হবে। এটি করার একটি সহজ উপায় হল cURL।
নিম্নলিখিত কমান্ডটি এমন একটি বস্তু পাঠায়:
$ curl --header "Content-Type: application/json" \
--request POST \
--data '{"numbers":[1, 100, 10, 1000, 100000, 10000]}' \
API_ROUTE_URL
আপনাকে Vercel এ সঠিক API_ROUTE_URL খুঁজে বের করতে হবে। আপনি Vercel ড্যাশবোর্ডে আপনার প্রকল্পে একটি "ডোমেন" বিভাগ দেখতে পাবেন, যেমন চিত্র 7।

প্রতিক্রিয়াটি একটি JSON অবজেক্ট হওয়া উচিত যাতে সাজানো numbers অন্তর্ভুক্ত থাকে এবং একটি newSortingAlgorithm ক্ষেত্র যা নির্দেশ করে যে এই সাজানোর জন্য কোন অ্যালগরিদম ব্যবহার করা হয়েছে।
সারাংশ
ফিচার ফ্ল্যাগ হল ফিচার রিলিজ থেকে ডিপ্লোয়মেন্ট ডিকপল করার একটি চমৎকার উপায়। তারা একটি ডাটাবেসে একটি সাধারণ মান সেট করার জন্য একটি হার্ড-কোডেড পরিবর্তনকে পরিণত করে, যা আপনার দলগুলিকে আরও নমনীয়তা দেয় এবং অ-প্রযুক্তিগত লোকেদের আরও শক্তি দেয়৷
আপস্ট্যাশ রেডিসের মতো একটি দ্রুত ডাটাবেসের সাহায্যে, আপনার কর্মক্ষমতার অনেকটাই ত্যাগ না করে আপনার অ্যাপ্লিকেশনের জন্য বৈশিষ্ট্য ফ্ল্যাগ প্যাটার্ন বাস্তবায়ন করা সহজ। Upstash Redis-এর সাব-সেকেন্ড অ্যাক্সেসের সময় রয়েছে এবং প্রয়োজনে আপনি এটিকে আপনার FaaS-এর কাছে স্থাপন করতে পারেন। সবই চাহিদা অনুযায়ী মূল্যের সাথে, তাই আপনি যে সম্পদগুলি ব্যবহার করেন না তার জন্য আপনি কখনই অর্থ প্রদান করবেন না।