<पी> अपडेट हर सॉफ़्टवेयर का हिस्सा हैं; आपको चीज़ों को अधिक सुरक्षित, विश्वसनीय या तेज़ बनाने के लिए बग्स को ठीक करने, नई सुविधाएँ जोड़ने और आम तौर पर पुनरावृत्त करने की आवश्यकता है। <पी> लेकिन नई सुविधाओं या बदलावों को तैनाती के साथ जोड़ना हमेशा एक अच्छा विचार नहीं होता है। कभी-कभी आप आवर्ती परिनियोजन शेड्यूल का पालन करते हैं, लेकिन मार्केटिंग टीम नई सुविधा की घोषणा करने के लिए तैयार नहीं होती है। यदि परिवर्तन हार्डकोड किए गए हैं, तो मार्केटिंग टीम को उन्हें सक्रिय या निष्क्रिय करने के लिए डेवलपर की आवश्यकता हो सकती है। <पी> फ़ीचर फ़्लैग, या फ़ीचर टॉगल, आपके परिवर्तनों को परिनियोजन से अलग करने का एक तरीका है। आप एक परिवर्तन लागू करते हैं, लेकिन आप इसे एक if-स्टेटमेंट के पीछे छिपा देते हैं; जब तक कोई वेरिएबल गलत है, सॉफ़्टवेयर आपके परिवर्तन से पहले संस्करण का उपयोग करेगा; यदि वेरिएबल true है , यह नया संस्करण होगा। यदि वेरिएबल का मान किसी डेटाबेस से आता है जिसे मार्केटिंग टीम एक्सेस कर सकती है, तो वे कोड परिवर्तन की आवश्यकता के बिना इन परिवर्तनों को टॉगल कर सकते हैं। <पी> अपस्टैश रेडिस® एक ऐसा डेटाबेस है। यह एक सरल कुंजी-मूल्य स्टोर है जिसका उपयोग आप अपने फीचर फ़्लैग को संग्रहीत करने के लिए कर सकते हैं। चूँकि यह अत्यधिक तेज़ है, इसलिए यह आपके एप्लिकेशन में कई अलग-अलग झंडों की जाँच करने में आपकी विलंबता में बहुत अधिक वृद्धि नहीं करता है। <पी> यह ट्यूटोरियल आपको सिखाएगा कि अपने Next.js ऐप के लिए एक सरल फ़ीचर फ़्लैग तंत्र कैसे बनाया जाए। हम वर्सेल पर तैनात करेंगे और स्टोरेज के रूप में अपस्टैश रेडिस® का उपयोग करेंगे।पी> आवश्यकताएँ
<पी> आपको एक GitHub खाता, एक Vercel खाता और एक Upstash खाता चाहिए। <पी> चूँकि हम NPM का उपयोग करते हैं, इसलिए आपको Node.js की वर्तमान स्थापना की भी आवश्यकता है। Next.js प्रोजेक्ट आरंभ करना
<पी> हमारा पहला कदम एक नया Next.js प्रोजेक्ट बनाना है। आप इसे निम्न आदेश के साथ करें: $ npx create-next-app upstash-next-feature-flags
अपस्टैश रेडिस® कनेक्शन बनाना
<पी> इसके बाद, हमें अपने नेक्स्ट.जेएस ऐप को अपस्टैश रेडिस® डेटाबेस से जोड़ना होगा। इसके लिए हमें @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);
}
<पी> हम इस ट्यूटोरियल में बाद में उन्हें सेट करने के लिए पर्यावरण चर से एपीआई क्रेडेंशियल प्राप्त करेंगे। flagIsActive फ़ंक्शन Redis® को क्वेरी करेगा और लौटाए गए मान को boolean में बदल देगा . यह रूपांतरण आवश्यक है क्योंकि हम ध्वज को रेडिस में एक संख्या के रूप में सहेजेंगे। एपीआई रूट बनाना
<पी> हमें दो अलग-अलग कार्यान्वयनों के साथ एपीआई रूट बनाना होगा। हम उनके बीच स्विच करने के लिए फीचर फ़्लैग का उपयोग करेंगे। <पी> इसके लिए 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;
};
<पी> यह एपीआई मार्ग एक सरल संख्या सॉर्टर है। यह अवर्गीकृत संख्याओं की एक श्रृंखला लेता है और उन्हें क्रमबद्ध करने के लिए दो सॉर्टिंग एल्गोरिदम में से एक का उपयोग करेगा। <पी> ये सॉर्टिंग एल्गोरिदम आपके एप्लिकेशन में किसी भी बदलाव के लिए "टॉगल" करना चाहते हैं। उन दोनों को अपने कोड में डालें और flagIsActive के माध्यम से उनके बीच स्विच करें Redis में मान बदलकर कार्य करें। <पी> हम flagIsActive को कॉल करते हैं फ़ंक्शन और इसे उस ध्वज का नाम दें जिसे हम जांचना चाहते हैं। यदि ध्वज 1 पर सेट है रेडिस में, यह फ़ंक्शन true लौटाता है; अन्यथा, यह false लौटाएगा . <पी> सॉर्ट करने के बाद, एपीआई रूट सॉर्ट किए गए ऐरे के साथ प्रतिक्रिया करता है। प्रोजेक्ट को GitHub पर धकेलना
<पी> सब कुछ लागू करने के बाद, हमें प्रोजेक्ट को GitHub पर एक रिपॉजिटरी में धकेलना होगा ताकि इसे Verce's परिनियोजन सेवा के लिए सुलभ बनाया जा सके। GitHub अपने डॉक्स में रिपॉजिटरी बनाने का तरीका बताता है। <पी> एक खाली रिपॉजिटरी बनाने से आपको स्वचालित रूप से पता चलेगा कि आप इसे हमारे द्वारा बनाए गए प्रोजेक्ट से कैसे लिंक कर सकते हैं। अपस्टैश Redis® डेटाबेस बनाना
<पी> आप अपस्टैश कंसोल में एक नया डेटाबेस बना सकते हैं। चित्र 1 इस ट्यूटोरियल के लिए एक अच्छा कॉन्फ़िगरेशन दिखाता है। <पी>
<पी> जैसा कि चित्र 1 कहता है, एक डेटाबेस मुफ़्त है, इसलिए आपको इस ट्यूटोरियल के लिए कुछ भी भुगतान नहीं करना होगा। <पी> अपस्टैश कंसोल के साथ ब्राउज़र टैब को खुला रखें क्योंकि हमें बाद में डेटाबेस क्रेडेंशियल इकट्ठा करने के लिए इसकी आवश्यकता होगी। GitHub रिपॉजिटरी को Vercel से लिंक करना
<पी> यदि आप वर्सेल में लॉग इन करने के लिए अपने GitHub खाते का उपयोग करते हैं, तो GitHub रिपॉजिटरी जोड़ने में केवल कुछ क्लिक लगते हैं। चित्र 2 में, आप वर्सेल डैशबोर्ड के ऊपर बाईं ओर देखते हैं; "नया जोड़ें..." पर क्लिक करें और "प्रोजेक्ट" चुनें। <पी>
<पी> "GitHub के साथ जारी रखें" और "आयात" बटनों में से एक चुनें जो आपके द्वारा पिछले चरण में बनाए गए रिपॉजिटरी से संबंधित है। <पी>
<पी> अंत में, प्रोजेक्ट कॉन्फ़िगरेशन चरण पॉप अप होगा, जहां आपको अपना पर्यावरण चर जोड़ना होगा। उस कॉन्फ़िगरेशन के बाकी हिस्सों के लिए, आप डिफ़ॉल्ट रख सकते हैं। चित्र 4 वह स्थान दिखाता है जहां आपको ये वेरिएबल दर्ज करना है। <पी>
<पी> उन्हें UPSTASH_TOKEN कहा जाता है और UPSTASH_URL , और आप उन्हें अपने अपस्टैश कंसोल में पाते हैं, जहां हमने पहले डेटाबेस बनाया था। चित्र 5 दिखाता है कि हमारे वेरिएबल्स के लिए आवश्यक मानों को कॉपी करने के लिए आपको किन बटनों की आवश्यकता है। <पी>
<पी> जब आप बड़ा "तैनाती" बटन दबाते हैं, तो वर्सेल आपके GitHub रिपॉजिटरी को क्लोन कर लेगा और इसे इसके बुनियादी ढांचे पर तैनात कर देगा। रेडिस के साथ कार्यान्वयन के बीच स्विच करना
<पी> अब, हमें अपने एपीआई एंडपॉइंट को कॉल करने में सक्षम होना चाहिए, और हम रेडिस में एक मान सेट करके कार्यान्वयन के बीच स्विच कर सकते हैं। अपस्टैश कंसोल में रेडिस सीएलआई इसे प्राप्त करने का सबसे सरल तरीका है। <पी> चित्र 6 दिखाता है कि सीएलआई कहां ढूंढें और मान सेट करने के लिए हमें जिस कमांड को निष्पादित करने की आवश्यकता है। <पी> newSortingAlgorithm 1 सेट करें <पी>
<पी> यदि हम newSortingAlgorithm को हटा देंगे या इसे 0 पर सेट करें , यह ध्वज को वापस false, पर स्विच कर देगा और हमारा एपीआई रूट पुराने एल्गोरिदम का उपयोग करेगा। एपीआई रूट का उपयोग करना
<पी> आखिरी चीज़ जो गायब है वह है एपीआई रूट का वास्तविक उपयोग। हमें रूट पर POST अनुरोध के माध्यम से एक JSON ऑब्जेक्ट भेजना होगा। ऐसा करने का एक आसान तरीका cURL है। <पी> निम्न आदेश ऐसी वस्तु भेजता है: $ curl --header "Content-Type: application/json" \
--request POST \
--data '{"numbers":[1, 100, 10, 1000, 100000, 10000]}' \
API_ROUTE_URL
<पी> आपको वर्सेल में सही API_ROUTE_URL ढूंढना होगा। आपको वर्सेल डैशबोर्ड पर अपने प्रोजेक्ट में चित्र 7 की तरह एक "डोमेन" श्रेणी देखनी चाहिए। <पी>
<पी> प्रतिक्रिया एक JSON ऑब्जेक्ट होनी चाहिए जिसमें क्रमबद्ध numbers शामिल हो और एक newSortingAlgorithm फ़ील्ड जो इंगित करती है कि इस सॉर्टिंग के लिए किस एल्गोरिदम का उपयोग किया गया था। सारांश
<पी> फ़ीचर फ़्लैग, फ़ीचर रिलीज़ से परिनियोजन को अलग करने का एक उत्कृष्ट तरीका है। वे हार्ड-कोडित परिवर्तन को डेटाबेस में एक साधारण मान सेट करने में बदल देते हैं, जो आपकी टीमों को अधिक लचीलापन देता है और गैर-तकनीकी लोगों को अधिक शक्ति देता है। <पी> अपस्टैश रेडिस जैसे तेज़ डेटाबेस के साथ, आपके प्रदर्शन का अधिक नुकसान किए बिना आपके एप्लिकेशन के लिए फ़ीचर फ़्लैग पैटर्न को लागू करना आसान है। अपस्टैश रेडिस के पास उप-सेकंड एक्सेस समय है, और यदि आवश्यक हो तो आप इसे अपने FaaS के पास तैनात कर सकते हैं। यह सब ऑन-डिमांड मूल्य निर्धारण के साथ, ताकि आप उन संसाधनों के लिए कभी भुगतान न करें जिनका आप उपयोग नहीं करते हैं।