Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ปรับใช้คุณสมบัติใหม่ใน Rails ได้อย่างปลอดภัยด้วยธงคุณสมบัติ Flipper

ลองนึกภาพสถานการณ์นี้:คุณเป็นนักพัฒนา Rails และใช้เวลาสองสามวันที่ผ่านมาในการพัฒนาฟีเจอร์ที่ยอดเยี่ยมที่ทุกคนรอคอย มีขนาดใหญ่และซับซ้อน แต่ผ่านการทดสอบอย่างเข้มงวด ดังนั้นคุณจึงมั่นใจว่าทุกอย่างทำงานได้ตามปกติ มีกำหนดเวลาที่ต้องปฏิบัติตาม ดังนั้นคุณจึงปรับใช้ นรกทั้งหมดก็สลายไปทันที

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

ปัญหาคือการปล่อยการเปลี่ยนแปลงที่ซับซ้อนนั้นมีความเสี่ยงโดยธรรมชาติ ไม่ว่าคุณจะทดสอบมากเพียงใด คงจะดีไม่น้อยหากคุณค่อยๆ เปิดตัวฟีเจอร์นี้ อาจมีผู้ใช้เพียงไม่กี่คนก่อน จะดีกว่านี้อีกหากคุณสามารถปิดคุณสมบัตินี้ได้ทันทีที่ปัญหาแรกปรากฏขึ้น

นี่คือที่มาของแฟล็กฟีเจอร์อย่างชัดเจน ในโพสต์นี้ เราจะเจาะลึกฟีเจอร์แฟล็กใน Rails รวมถึงวิธีตั้งค่าโดยใช้ Flipper gem แต่ก่อนอื่น:มันคืออะไร?

ฟีเจอร์แฟล็กใน Ruby on Rails คืออะไร

แฟล็กคุณลักษณะเป็นวิธีหนึ่งในการเปิดหรือปิดใช้งานคุณลักษณะในแอปพลิเคชันของคุณในขณะที่กำลังทำงานอยู่ หากเปิดใช้งานแฟล็ก คุณลักษณะดังกล่าวจะถูกใช้ ไม่เช่นนั้นก็ไม่ได้ ลองจินตนาการถึงสิ่งนี้ในรหัสเทียม

 

ชื่อ 'ธงคุณลักษณะ' ค่อนข้างทำให้เข้าใจผิด การควบคุมพฤติกรรมของแอปพลิเคชันขณะรันไทม์ไม่ได้จำกัดอยู่เพียงฟีเจอร์ แต่ใช้กับฟังก์ชันใดๆ ภายในโปรแกรมของคุณ คุณสามารถใช้แฟล็กฟีเจอร์เพื่อลองปรับแต่งประสิทธิภาพและเรียกใช้การทดสอบ A/B ได้ เป็นต้น ข้อแตกต่างที่สำคัญระหว่างแฟล็กฟีเจอร์และเงื่อนไขแบบเก่าอื่นๆ คือคุณสามารถแก้ไขแฟล็กฟีเจอร์ขณะรันไทม์ได้

เพื่อจุดประสงค์ในการอธิบาย ลองจินตนาการถึงกลไกการตั้งค่าสถานะคุณลักษณะง่ายๆ โดยใช้ตัวแปรสภาพแวดล้อม

 

ด้วยการปรับเปลี่ยนค่าของตัวแปรสภาพแวดล้อม เราสามารถเปิดหรือปิดส่วนของแอปพลิเคชันของเราได้ตามต้องการ ส่วนใดของการสมัคร? ทุกสิ่งที่คุณต้องการ!

คุณสามารถซ่อนบางส่วนของ UI ได้หากคุณสมบัติถูกปิดใช้งาน คุณสามารถสับเปลี่ยนโค้ดบางส่วนได้ ซึ่งมีประโยชน์มากหากคุณไม่มั่นใจในการปรับโครงสร้างครั้งล่าสุด หนึ่งในการใช้แฟล็กคุณลักษณะที่ฉันชื่นชอบคือการซ่อนเส้นทางทั้งหมดโดยใช้ข้อจำกัดการกำหนดเส้นทาง:

 
 

เราเห็นแล้วว่ามีแอปพลิเคชันมากมายสำหรับฟีเจอร์แฟล็ก อย่างไรก็ตาม การใช้งานที่ไร้เดียงสาของเรามีจุดอ่อนที่สำคัญประการหนึ่ง คุณลักษณะนี้เปิดหรือปิดสำหรับผู้ใช้ทุกคน

จะเป็นอย่างไรหากเราต้องการความสามารถในการเปิดใช้งานคุณสมบัติเฉพาะสำหรับผู้ใช้บางรายหรือกลุ่มผู้ใช้หรือเพียงบางเวลาเท่านั้น มาดู Flipper กันดีกว่า

การใช้ Flipper Gem สำหรับแฟล็กคุณลักษณะ

Flipper เป็นอัญมณีที่สร้างแฟล็กคุณลักษณะและวิธีการต่างๆ ในการสลับไปมาใน Rails มันเป็นโมดูลาร์สูง นอกเหนือจากอัญมณีหลักแล้ว คุณจะต้องเลือกอะแดปเตอร์จัดเก็บข้อมูลด้วย แต่จะต้องเลือกเพิ่มเติมในภายหลัง ลองใช้อะแดปเตอร์ ActiveRecord ในตอนนี้

เพิ่มบรรทัดต่อไปนี้ใน Gemfile ของคุณแล้วรัน bundle install :

 

เมื่อเราใช้อะแดปเตอร์ ActiveRecord Flipper จะจัดเก็บการตั้งค่าสถานะคุณลักษณะของคุณในฐานข้อมูลและจึงต้องตั้งค่าตารางฐานข้อมูลใหม่ Flipper มาพร้อมกับตัวสร้างที่มีประโยชน์ซึ่งจะสร้างการโยกย้ายที่จำเป็น

 

คุณสามารถใช้ Flipper ได้ในลักษณะเดียวกับการใช้งานแบบไร้เดียงสาที่เราใช้ก่อนหน้านี้

 

ความแตกต่างที่สำคัญคือ แทนที่จะแก้ไขตัวแปรสภาพแวดล้อม ตอนนี้คุณสามารถสลับคุณสมบัติต่างๆ โดยใช้อินเทอร์เฟซผู้ใช้ของ Flipper ได้ เพิ่มอัญมณี Flipper UI และติดตั้ง

 

แก้ไขไฟล์เส้นทางของคุณเพื่อเมานต์ Flipper UI

 

หากคุณเริ่มแอปพลิเคชันของคุณและไปที่ Flipper UI คุณจะเห็นภาพรวมของคุณสมบัติที่มีอยู่ทั้งหมดและสถานะของพวกเขา ไปข้างหน้าและสร้าง my_awesome_feature คุณสมบัติ

ปรับใช้คุณสมบัติใหม่ใน Rails ได้อย่างปลอดภัยด้วยธงคุณสมบัติ Flipper

การสลับคุณสมบัติใน Flipper

คุณอาจสังเกตเห็นว่าคุณสามารถทำอะไรได้มากกว่าเพียงแค่เปิดหรือปิดการใช้งานคุณสมบัติใน Flipper UI Flipper ช่วยให้เราสามารถเปิดใช้งานคุณสมบัติสำหรับผู้ใช้บางส่วนหรือแม้แต่เปอร์เซ็นต์ของเวลา คุณสามารถกำหนดค่าแฟล็กคุณลักษณะของคุณได้โดยใช้หนึ่งในห้ากลไกที่แตกต่างกัน

หนึ่งในนั้นคือสวิตช์บูลีน ซึ่งเป็นสวิตช์เปิด-ปิดส่วนกลาง อีกสี่คนที่เหลือน่าสนใจมากกว่านั้นมาก:กลุ่ม นักแสดง เปอร์เซ็นต์ของนักแสดง และเปอร์เซ็นต์ของเวลา

กลุ่ม

หากต้องการเปิดใช้งานคุณสมบัติเฉพาะสำหรับผู้ใช้กลุ่มใดกลุ่มหนึ่ง ให้ใช้การสลับกลุ่ม หากไม่มีอยู่ ให้สร้างไฟล์ config/initializers/flipper.rb และเพิ่มรหัสต่อไปนี้เพื่อลงทะเบียนกลุ่มใหม่ — ตัวอย่างเช่น ผู้ใช้ที่ชำระเงิน

 

หากต้องการใช้การสลับใหม่นี้ ให้แก้ไขการร้องขอ Flipper เพื่อส่งผ่านผู้ใช้ — หรือนักแสดง ตามที่เอกสารต้องการเรียกพวกเขา — และชื่อฟีเจอร์

 

Flipper จะใช้บล็อกที่คุณกำหนดไว้ในเครื่องมือเริ่มต้นเพื่อตัดสินใจว่าคุณลักษณะนี้เปิดใช้งานสำหรับผู้ใช้รายนี้หรือไม่ ในกรณีนี้ มันจะเรียกใช้ paid? วิธีการ ตอนนี้คุณสามารถใช้กลุ่มนี้ใน Flipper UI ได้แล้ว คลิกปุ่ม 'เพิ่มกลุ่ม' และเลือกกลุ่มของคุณ

ปรับใช้คุณสมบัติใหม่ใน Rails ได้อย่างปลอดภัยด้วยธงคุณสมบัติ Flipper

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

นักแสดง

บางครั้งคุณอาจต้องการเผยแพร่บางสิ่งบางอย่างให้กับบุคคลเพียงคนเดียว ในกรณีนี้ การสลับนักแสดงเป็นสิ่งที่ต้องพิจารณา

คุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรในเครื่องมือเริ่มต้นเพื่อใช้กลไกนี้ อย่างไรก็ตาม คุณจะต้องตรวจสอบให้แน่ใจว่าโมเดลแอคเตอร์ของคุณซึ่งจะเป็นโมเดลผู้ใช้ของคุณเกือบตลอดเวลานั้นใช้งาน flipper_id . รวมถึง Flipper::Identifier ดูแลเรื่องนั้น

 
 

จากนั้นคุณสามารถใช้ ID นี้เพื่อเปิดใช้งานคุณสมบัติสำหรับผู้ใช้แต่ละราย

ปรับใช้คุณสมบัติใหม่ใน Rails ได้อย่างปลอดภัยด้วยธงคุณสมบัติ Flipper

การสลับคุณสมบัตินี้มีประโยชน์หากคุณต้องการดูตัวอย่างฟังก์ชันการทำงานสำหรับบุคคลใดบุคคลหนึ่ง ลองนึกถึงการเปิดใช้งานบัญชีทดสอบเฉพาะสำหรับพันธมิตรที่ต้องการเข้าถึงคุณลักษณะก่อนที่จะเผยแพร่สู่ผู้ชมในวงกว้าง

เปอร์เซ็นต์ของนักแสดง

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

ปรับใช้คุณสมบัติใหม่ใน Rails ได้อย่างปลอดภัยด้วยธงคุณสมบัติ Flipper

หากสิ่งต่างๆ เคลื่อนไปด้านข้าง คุณสามารถรีเซ็ตเปอร์เซ็นต์ให้เป็นศูนย์ได้ตลอดเวลา

เปอร์เซ็นต์ของเวลา

สุดท้ายแต่ไม่ท้ายสุด คุณสามารถเปิดใช้งานคุณสมบัติตามเปอร์เซ็นต์ของคำขอได้ คุณไม่จำเป็นต้องระบุนักแสดงเมื่อใช้สลับนี้

 

ฉันชอบใช้สิ่งนี้เพื่อเปรียบเทียบประสิทธิภาพของการใช้งานสองแบบที่แตกต่างกัน โปรดทราบว่าการสลับคุณลักษณะนี้เป็นแบบสุ่ม ผู้ใช้คนเดียวกันจะพบกับพฤติกรรมที่แตกต่างกันในแต่ละคำขอ

การกำหนดค่าขั้นสูงใน Flipper

เราได้เห็นแล้วว่าเราสามารถใช้อะแดปเตอร์ ActiveRecord เพื่อจัดเก็บข้อมูลสถานะคุณลักษณะในฐานข้อมูลของเรา แต่คุณอาจต้องการใช้อะแดปเตอร์อื่น ทั้งนี้ขึ้นอยู่กับความต้องการเฉพาะของคุณ

โดยส่วนใหญ่ สิ่งที่คุณต้องทำเมื่อเปลี่ยนอะแดปเตอร์หน่วยเก็บข้อมูลคือการติดตั้ง Gem ที่เกี่ยวข้องและกำหนดค่า Flipper ตามนั้น ตัวอย่างเช่น หากคุณต้องการใช้อะแดปเตอร์ Redis ให้เพิ่ม flipper-redis gem ให้กับ yourGemfile และอัพเดต Flipper Initializer

 
 

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

การเพิ่มแฟล็กฟีเจอร์จะต้องเสียค่าประสิทธิภาพเล็กน้อย ดังนั้นคุณมักจะต้องการเพิ่มการบันทึกและแคช คุณอาจต้องการจำกัดการเข้าถึง Flipper UI ให้กับผู้ใช้ที่ได้รับอนุญาตเท่านั้น หัวข้อเหล่านี้อยู่นอกขอบเขตสำหรับโพสต์นี้ แต่ฉันขอแนะนำให้คุณตรวจสอบเอกสาร Flipper หากคุณต้องการเจาะลึกยิ่งขึ้น

ข้อควรระวังในการใช้ธงใน Rails

แฟล็กฟีเจอร์นั้นยอดเยี่ยมมาก แต่เช่นเดียวกับหลายสิ่งหลายอย่าง มีข้อดีที่ต้องพิจารณา

การเพิ่มแฟล็กคุณลักษณะและการบำรุงรักษาจะเพิ่มโอเวอร์เฮดขององค์กร การเปิดตัวและการเปิดตัวฟีเจอร์ที่ซ่อนอยู่โดยใช้แฟล็กนั้นไม่ง่ายเหมือนกับการใช้โค้ด 'ปกติ' คุณจะต้องจำไว้ว่าต้องเปิดใช้งานแน่นอน! โดยปกติแล้วจะไม่ยากเกินไป แต่การล้างแฟล็กฟีเจอร์ที่คุณไม่ต้องการอีกต่อไปอาจทำได้

ทุกครั้งที่คุณเพิ่มฟีเจอร์แฟล็กลงในโค้ด คุณจะเพิ่มเงื่อนไข และหากคุณไม่ระวัง โค้ดของคุณก็จะเกลื่อนไปด้วยอย่างรวดเร็ว การติดตามเวลาและเหตุผลที่คุณสร้างแฟล็กฟีเจอร์บางอย่างอาจเป็นเรื่องที่ท้าทาย น่าเศร้าที่ Flipper UI เองก็ไม่ได้ช่วยจัดการแฟล็กฟีเจอร์มากนัก

คุณควรทราบด้วยว่าการใช้แฟล็กฟีเจอร์จะต้องเสียค่าปรับประสิทธิภาพเล็กน้อย มีหลายวิธีในการบรรเทาปัญหานี้ แต่อาจมีผลกระทบที่เห็นได้ชัดเจนหากคุณกำหนดค่าผิดหรือใช้ Flipper ในทางที่ผิด

สรุป:เริ่มต้นใช้งานฟีเจอร์แฟล็กใน Ruby on Rails

เราได้ดูว่าฟีเจอร์แฟล็กจะช่วยให้คุณเผยแพร่ได้อย่างมั่นใจมากขึ้นได้อย่างไร เรียนรู้ว่าแฟล็กเหล่านี้ทำงานอย่างไรโดยหลักการ และดูว่าคุณจะเริ่มต้นใช้งานแฟล็กฟีเจอร์โดยใช้ Flipper gem ได้อย่างไร

มีหลายสถานการณ์ที่แฟล็กคุณลักษณะมีประโยชน์ ขึ้นอยู่กับกรณีการใช้งานของคุณ คุณอาจเข้าถึงหนึ่งในห้าการสลับที่แตกต่างกัน — บูลีน กลุ่ม นักแสดง เปอร์เซ็นต์ของผู้แสดง หรือเปอร์เซ็นต์ของคำขอ

แม้ว่าการทำงานกับฟีเจอร์แฟล็กจะมีคำเตือนและอาจต้องใช้เวลาทำความคุ้นเคย แต่ก็ยังเป็นเครื่องมือที่ยอดเยี่ยมที่คุณมี

ไว้คราวหน้า ขอให้สนุกกับการเขียนโค้ด!

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว!