การอัพเดตเป็นส่วนหนึ่งของทุกซอฟต์แวร์ คุณต้องแก้ไขข้อบกพร่อง เพิ่มคุณสมบัติใหม่ และโดยทั่วไปทำซ้ำเพื่อทำให้สิ่งต่าง ๆ ปลอดภัย เชื่อถือได้ หรือเร็วขึ้น
แต่การรวมคุณสมบัติใหม่ๆ หรือการเปลี่ยนแปลงโดยทั่วไปเข้ากับการใช้งานก็ไม่ใช่ความคิดที่ดีเสมอไป บางครั้งคุณทำตามกำหนดการปรับใช้ที่เกิดซ้ำ แต่ทีมการตลาดยังไม่พร้อมที่จะประกาศฟีเจอร์ใหม่ หากการเปลี่ยนแปลงเป็นแบบฮาร์ดโค้ด ทีมการตลาดอาจต้องการให้นักพัฒนาเปิดใช้งานหรือปิดใช้งานการเปลี่ยนแปลงเหล่านั้น
แฟล็กคุณลักษณะหรือการสลับคุณลักษณะเป็นวิธีหนึ่งในการแยกการเปลี่ยนแปลงของคุณจากการปรับใช้ คุณดำเนินการเปลี่ยนแปลง แต่คุณซ่อนไว้หลังคำสั่ง if ตราบใดที่ตัวแปรเป็นเท็จ ซอฟต์แวร์จะใช้เวอร์ชันก่อนการเปลี่ยนแปลงของคุณ หากตัวแปรคือ 06 มันจะเป็นเวอร์ชั่นใหม่ หากค่าของตัวแปรมาจากฐานข้อมูลที่ทีมการตลาดสามารถเข้าถึงได้ พวกเขาสามารถสลับการเปลี่ยนแปลงเหล่านี้ได้โดยไม่จำเป็นต้องเปลี่ยนโค้ด
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® สำหรับสิ่งนี้ เราจำเป็นต้องติดตั้ง 18 บรรจุหีบห่อและสร้างกระดาษห่อเล็กๆ รอบๆ
$ npm i @upstash/redis
สร้างไฟล์ที่ 25 ด้วยรหัสนี้:
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 จากตัวแปรสภาพแวดล้อมเพื่อตั้งค่าในภายหลังในบทช่วยสอนนี้ 35รหัส> ฟังก์ชันจะสอบถาม Redis® และแปลงค่าที่ส่งคืนเป็น 42 . การแปลงนี้จำเป็นเนื่องจากเราจะบันทึกแฟล็กเป็นตัวเลขใน Redis
การสร้างเส้นทาง API
เราต้องสร้างเส้นทาง API ด้วยการใช้งานที่แตกต่างกันสองแบบ เราจะใช้แฟล็กคุณลักษณะเพื่อสลับไปมาระหว่างกัน
สำหรับสิ่งนี้ ให้สร้างไฟล์ที่ 50 .
ควรมีรหัสนี้:
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 นี้เป็นเครื่องคัดแยกตัวเลขอย่างง่าย ใช้อาร์เรย์ของตัวเลขที่ไม่ได้เรียงลำดับและจะใช้หนึ่งในสองอัลกอริธึมการเรียงลำดับเพื่อเรียงลำดับ
อัลกอริธึมการเรียงลำดับเหล่านี้หมายถึงการเปลี่ยนแปลงใดๆ ที่คุณต้องการ "สลับ" ในแอปพลิเคชันของคุณ ใส่ทั้งสองอย่างลงในโค้ดของคุณและสลับไปมาระหว่างกันโดยใช้ 65 ฟังก์ชั่นโดยการเปลี่ยนค่าใน Redis
เราเรียก 79 ฟังก์ชั่นและตั้งชื่อให้กับแฟล็กที่เราต้องการตรวจสอบ หากตั้งค่าสถานะเป็น 81 ใน Redis ฟังก์ชันนี้จะส่งคืน 94; มิฉะนั้นจะส่งกลับ 101 .
หลังจากการเรียงลำดับ เส้นทาง API จะตอบสนองด้วยอาร์เรย์ที่เรียงลำดับ
ผลักดันโครงการไปที่ GitHub
หลังจากปรับใช้ทุกอย่างแล้ว เราจำเป็นต้องผลักดันโปรเจ็กต์ไปยังพื้นที่เก็บข้อมูลบน GitHub เพื่อให้สามารถเข้าถึงได้สำหรับบริการการปรับใช้ของ Verce GitHub อธิบายวิธีสร้างพื้นที่เก็บข้อมูลในเอกสาร
การสร้างพื้นที่เก็บข้อมูลว่างจะแสดงให้คุณเห็นว่าคุณสามารถเชื่อมโยงกับโครงการที่เราสร้างขึ้นโดยอัตโนมัติได้อย่างไร
การสร้างฐานข้อมูล Upstash Redis®
คุณสามารถสร้างฐานข้อมูลใหม่ในคอนโซล Upstash รูปที่ 1 แสดงการกำหนดค่าที่ดีสำหรับบทช่วยสอนนี้

ตามที่รูปที่ 1 กล่าวไว้ ฐานข้อมูลหนึ่งฐานข้อมูลนั้นฟรี ดังนั้นคุณจะไม่ต้องจ่ายอะไรเลยสำหรับบทช่วยสอนนี้
เปิดแท็บเบราว์เซอร์โดยเปิดคอนโซล Upstash ไว้เพราะเราต้องการในภายหลังเพื่อรวบรวมข้อมูลประจำตัวฐานข้อมูล
การเชื่อมโยงพื้นที่เก็บข้อมูล GitHub กับ Vercel
หากคุณใช้บัญชี GitHub ของคุณเพื่อเข้าสู่ระบบ Vercel การเพิ่มพื้นที่เก็บข้อมูล GitHub ทำได้เพียงไม่กี่คลิก ในรูปที่ 2 คุณจะเห็นด้านซ้ายบนของแดชบอร์ด Vercel คลิกที่ “เพิ่มใหม่…” และเลือก “โครงการ”

เลือก "ดำเนินการต่อด้วย GitHub" และปุ่ม "นำเข้า" ปุ่มใดปุ่มหนึ่งที่เป็นของพื้นที่เก็บข้อมูลที่คุณสร้างในขั้นตอนก่อนหน้า

สุดท้าย ขั้นตอนการกำหนดค่าโปรเจ็กต์จะปรากฏขึ้น โดยคุณจะต้องเพิ่มตัวแปรสภาพแวดล้อมของคุณ สำหรับการกำหนดค่าที่เหลือ คุณสามารถคงค่าเริ่มต้นไว้ได้ รูปที่ 4 แสดงตำแหน่งที่คุณต้องป้อนตัวแปรเหล่านี้

เรียกว่า 114 และ 121รหัส> และคุณจะพบมันในคอนโซล Upstash ของคุณที่เราเคยสร้างฐานข้อมูลมาก่อน รูปที่ 5 แสดงปุ่มที่คุณต้องการคัดลอกค่าที่จำเป็นสำหรับตัวแปรของเรา

เมื่อคุณกดปุ่ม “ปรับใช้” ขนาดใหญ่ Vercel จะโคลนพื้นที่เก็บข้อมูล GitHub ของคุณและปรับใช้บนโครงสร้างพื้นฐาน
การสลับระหว่างการใช้งานด้วย Redis
ตอนนี้ เราควรจะเรียกตำแหน่งข้อมูล API ของเราได้แล้ว และเราสามารถสลับระหว่างการใช้งานต่างๆ ได้โดยการตั้งค่าใน Redis Redis CLI ในคอนโซล Upstash เป็นวิธีที่ง่ายที่สุดในการบรรลุเป้าหมายนี้
รูปที่ 6 แสดงให้เห็นตำแหน่งที่จะค้นหา CLI และคำสั่งที่เราจำเป็นต้องดำเนินการเพื่อตั้งค่า
ตั้งค่า newSortingAlgorithm 1

หากเราจะลบ 132 หรือตั้งค่าเป็น 147 มันจะเปลี่ยนแฟล็กกลับเป็น 155 และเส้นทาง API ของเราจะใช้อัลกอริทึมเก่า
การใช้เส้นทาง API
สิ่งสุดท้ายที่ขาดหายไปคือการใช้เส้นทาง API จริง เราต้องส่งวัตถุ JSON ผ่านคำขอ POST ไปยังเส้นทาง วิธีง่ายๆ ในการทำเช่นนี้คือใช้ cURL
คำสั่งต่อไปนี้ส่งวัตถุดังกล่าว:
$ curl --header "Content-Type: application/json" \
--request POST \
--data '{"numbers":[1, 100, 10, 1000, 100000, 10000]}' \
API_ROUTE_URL
คุณต้องค้นหา API_ROUTE_URL ที่ถูกต้องใน Vercel คุณควรเห็นหมวดหมู่ "โดเมน" ในโครงการของคุณบนแดชบอร์ด Vercel ดังในรูปที่ 7

การตอบสนองควรเป็นออบเจ็กต์ JSON ที่รวม 164 ที่เรียงลำดับแล้ว และ 173 ฟิลด์ที่ระบุว่าอัลกอริทึมใดที่ใช้สำหรับการเรียงลำดับนี้
สรุป
แฟล็กฟีเจอร์เป็นวิธีที่ยอดเยี่ยมในการแยกการปรับใช้ออกจากฟีเจอร์ที่เผยแพร่ พวกเขาเปลี่ยนการเปลี่ยนแปลงแบบฮาร์ดโค้ดให้เป็นการตั้งค่าง่ายๆ ในฐานข้อมูล ซึ่งให้ความยืดหยุ่นแก่ทีมของคุณมากขึ้น และให้อำนาจแก่ผู้ที่ไม่มีความรู้ด้านเทคนิคมากขึ้น
ด้วยฐานข้อมูลที่รวดเร็ว เช่น Upstash Redis คุณจึงปรับใช้รูปแบบแฟล็กฟีเจอร์สำหรับแอปพลิเคชันของคุณได้อย่างง่ายดายโดยไม่กระทบต่อประสิทธิภาพการทำงานมากนัก Upstash Redis มีเวลาการเข้าถึงเสี้ยววินาที และคุณสามารถปรับใช้ใกล้กับ FaaS ของคุณได้ หากจำเป็น ทั้งหมดนี้มีราคาตามความต้องการ คุณจึงไม่ต้องจ่ายค่าทรัพยากรที่คุณไม่ได้ใช้