แฟล็กคุณลักษณะเป็นเครื่องมือที่มีประสิทธิภาพในการพัฒนาซอฟต์แวร์ ช่วยให้นักพัฒนาสามารถควบคุมพฤติกรรมของแอปพลิเคชันในขณะรันไทม์ได้โดยไม่ต้องปรับใช้โค้ดใหม่ ช่วยให้ทีมทดสอบฟีเจอร์ใหม่ ทำการทดสอบ A/B และค่อยๆ เปิดตัวการเปลี่ยนแปลงได้
ใน Ruby on Rails แฟล็กฟีเจอร์สามารถจัดการได้โดยใช้เครื่องมือที่หลากหลาย โดยที่ได้รับความนิยมมากที่สุดคือ Flipper gem บทความนี้จะสำรวจการใช้งานและการวัดผลกระทบของแฟล็กฟีเจอร์ในหน้าร้าน Solidus โดยใช้ตัววัดแบบกำหนดเองของ Flipper และ AppSignal
ฟีเจอร์แฟล็กใน Rails คืออะไรอีกครั้ง
หากคุณกำลังมองหาข้อมูลเบื้องต้นเกี่ยวกับเรื่องนี้ โปรดดูโพสต์ เพิ่มฟีเจอร์แฟล็กใน Ruby on Rails พร้อม Flipper
โดยสรุป แฟล็กคุณลักษณะเป็นวิธีหนึ่งที่มีอิทธิพลต่อลักษณะการทำงานของแอปพลิเคชันของคุณ ในขณะรันไทม์ โดยไม่ต้องปรับใช้โค้ดใหม่ ประเภทของแฟล็กคุณลักษณะที่ง่ายที่สุดคือตัวแปรสภาพแวดล้อม แอปพลิเคชัน Ruby on Rails ทุกตัวใช้งานนอกกรอบ ตัวอย่างหนึ่งคือการกำหนดค่าการทำงานพร้อมกันของแอปพลิเคชันเซิร์ฟเวอร์โดยใช้ ENV['WEB_CONCURRENCY'] .
อย่างไรก็ตาม มีวิธีอื่นๆ ในการจัดการแฟล็กคุณลักษณะ เช่น การใช้เลเยอร์การคงอยู่ เช่น ActiveRecord หรือ Redis Flipper gem นำเสนอวิธีการที่ครอบคลุมในการดำเนินการนี้
ตัวอย่างต่อไปนี้เป็นตัวอย่างวิธีการ performance_improvement ธงคุณสมบัติได้รับการประเมินสำหรับผู้ใช้ที่กำหนด:
ต่อไป เราจะตั้งค่าหน้าร้าน Solidus เพื่อเริ่มทดลองใช้แฟล็กคุณลักษณะ
แอปตัวอย่างของเรา:หน้าร้าน Solidus
ในการวัดผลกระทบของฟีเจอร์แฟล็กในสถานการณ์ที่ค่อนข้างสมจริง เรามาเริ่มระบบร้านค้า Solidus กันอย่างรวดเร็ว:
ตัวสร้างนี้จะแนะนำคุณตลอดกระบวนการและถามคำถามการตั้งค่าสองสามข้อ
- เลือก ตัวเริ่มต้น ส่วนหน้าเมื่อสอบถามประเภทส่วนหน้า
- ข้ามการตั้งค่าวิธีการชำระเงิน
- เลือกติดตั้งแอปพลิเคชัน Solidus ของคุณที่
/เนื่องจากเราใช้มันเป็นแอปแบบสแตนด์อโลน
หลังจากนั้นให้รัน bin/dev จากเทอร์มินัลของคุณและคุณควรจะดีไป เมื่อคุณไปที่ http://localhost:3000 คุณจะเห็นหน้าจอนี้:

ใช้งานฟีเจอร์แฟล็กด้วย Flipper
ตอนนี้ เรามาใช้งานกรณีการใช้งานที่เป็นแบบอย่างสองกรณีสำหรับแฟล็กคุณลักษณะ:
- การปรับปรุงประสิทธิภาพ
- ความพยายามในการเพิ่มประสิทธิภาพอัตรา Conversion
ก่อนอื่น เราต้องเพิ่ม flipper อัญมณีพร้อมกับ active_record อะแดปเตอร์จัดเก็บข้อมูล:
สิ่งนี้จะตั้งค่าตารางฐานข้อมูลที่จำเป็นเพื่อค้นหา "เกตส์" ของ Flipper เช่น เงื่อนไขที่เป็นรูปธรรมเพื่อประเมินเมื่อตรวจสอบแฟล็กคุณลักษณะ
การทดสอบการปรับปรุงประสิทธิภาพ
เพื่อประเมินสถานการณ์นี้ เราจะจำลองคำขอที่ช้าในหน้าร้านโดยการเพิ่ม sleep 1 เรียกกรณีที่ไม่ได้รับการปรับให้เหมาะสม:
ตอนนี้ เราจะใช้กลยุทธ์ "เปอร์เซ็นต์ของเวลา" เพื่อเผยแพร่การเพิ่มประสิทธิภาพให้กับชุดคำขอแบบสุ่ม เปิดคอนโซล Rails และป้อนสิ่งต่อไปนี้:
การใช้เครื่องมือทดสอบโหลด Oha ช่วยให้เราสามารถยืนยันได้ว่าคำขอครึ่งหนึ่งใช้เวลานานกว่าคำขออื่นๆ หนึ่งวินาที:
การทดสอบการเพิ่มประสิทธิภาพอัตรา Conversion
เมื่อต้องจัดการกับคุณลักษณะที่ผู้ใช้เผชิญหน้ากัน เช่น การเปลี่ยนแปลงใน UI มักแนะนำให้ใช้กลยุทธ์ "เปอร์เซ็นต์ของผู้แสดง" เพื่อเผยแพร่แฟล็ก ด้วยวิธีนี้ ผู้ใช้ทุกคนจะได้รับประสบการณ์เดียวกันอย่างสม่ำเสมอ
ในการเริ่มต้น เราจะสร้างผู้ใช้สองคนสำหรับแอปพลิเคชันอีคอมเมิร์ซของเรา เปิดคอนโซล Rails และออกคำสั่งต่อไปนี้:
ซึ่งจะสร้างผู้ใช้ตัวอย่าง 2 รายและทำให้แน่ใจว่าแฟล็กคุณลักษณะ สม่ำเสมอ เปิดใช้งานสำหรับหนึ่งในนั้น
เพื่อจำลองคุณลักษณะที่พยายามเพิ่มอัตรา Conversion เราจะทำให้ปุ่มชำระเงินกะพริบ:
หากเราเข้าสู่ระบบด้วยผู้ใช้ทั้งสองคนและจัดเรียงหน้าต่างเบราว์เซอร์เคียงข้างกัน เราจะสังเกตได้ว่าเอฟเฟกต์นี้มีผลกับผู้ใช้หนึ่งคน (ซ้าย):
ใช้ตัววัดที่กำหนดเองของ AppSignal เพื่อวัดผลกระทบของแฟล็กคุณลักษณะ
ระบบแฟล็กคุณลักษณะที่ดีที่สุดจะไม่มีประโยชน์หากไม่มีวิธีประเมินผลกระทบ ในสถานการณ์ตัวอย่างของเรา เราเพียงต้องการทราบ:
- การปรับปรุงประสิทธิภาพทำให้เวลาแฝงลดลงอย่างเห็นได้ชัดหรือไม่
- ปุ่มชำระเงินที่เต้นรัวของเราทำให้อัตรา Conversion สูงขึ้นอย่างเห็นได้ชัดหรือไม่
เราจะใช้ตัววัดที่กำหนดเองของ AppSignal เพื่อวัดผลตอบแทนจากการเพิ่มประสิทธิภาพเหล่านี้
ก่อนอื่น สร้างแอปพลิเคชันใหม่ในองค์กร AppSignal ของคุณและเชื่อมต่อกับแอปของคุณโดยทำตามคำแนะนำ:
การวัดเวลาแฝงด้วยเมตริกการวัด
เราได้ตรวจสอบแล้วว่าการปรับปรุงของเรามีประสิทธิภาพเพียงใดด้วย oha CLI ข้างต้น แต่เพื่อให้การตัดสินที่ถูกต้อง เราจะติดตั้งการวัดและส่งข้อมูลทางไกลฝั่งเซิร์ฟเวอร์ที่รายงานเวลาแฝงไปยัง AppSignal ตัวชี้วัดการวัดช่วยให้เป็นเช่นนั้น:เราจะส่งเวลาตอบสนองเป็นมิลลิวินาที และเพิ่มแท็กตัวชี้วัดที่ระบุว่าการเพิ่มประสิทธิภาพของเราทำงานอยู่สำหรับคำขอเฉพาะหรือไม่
มีประเด็นเล็กๆ น้อยๆ อยู่ที่นี่ เนื่องจากเราใช้ตัวชี้วัด "เปอร์เซ็นต์ของเวลา" เราจึงต้องบันทึกสถานะของแฟล็กในตัวแปรอินสแตนซ์ เพื่อให้มีการใช้ค่าเดียวกันสำหรับการดำเนินการและการรายงาน:
ตอนนี้เรามาทำการทดสอบโหลดในเครื่องซ้ำจากด้านบน:
เราจะมาดูการสร้างแผนภูมิและประเมินเมตริกนี้กันสักหน่อย ก่อนหน้านั้น มาดูแฟล็กคุณลักษณะที่สองของเรากันก่อน
การนับ Conversion ด้วยเมตริกการนับ
เราจะใช้เมตริกตัวนับเพื่อนับ Conversion นี่เป็นตัวเลือกที่ดีหากคุณต้องการเพียงแค่บันทึกกิจกรรมเท่านั้น
ในการดำเนินการนี้ เราจะต้องเปิด CartsController และเพื่อการสาธิต ให้เพิ่ม increment_counter โทรหากมีการคลิกปุ่มชำระเงิน:
ตอนนี้เรามาทดสอบสิ่งนี้ด้วยการเปิดหน้าต่างเบราว์เซอร์ที่เกี่ยวข้องด้วยตนเองแล้วคลิกปุ่ม "ชำระเงิน" 3 ครั้ง และในกรณีอื่นเพียงครั้งเดียวเท่านั้น ด้วยวิธีนี้ เราจะสามารถดูได้ว่าแฟล็กการเพิ่มประสิทธิภาพทำงานอยู่หรือไม่
ตั้งค่าแดชบอร์ดแบบกำหนดเองใน AppSignal
ขั้นตอนสุดท้ายของเราคือการสร้างกราฟิกข้อมูลเพื่อการตัดสินใจทางธุรกิจโดยอาศัยข้อมูล เราจะใช้แดชบอร์ดของ AppSignal เพื่อบรรลุเป้าหมายนี้ มาดูทีละขั้นตอนกัน:
- ในแถบด้านข้างซ้าย คลิก "เพิ่มแดชบอร์ด" และตั้งชื่อเป็น "การประเมินค่าสถานะคุณลักษณะ"

- คลิก "เพิ่มกราฟ" และ
products_response_timeเมตริก เลือก "mean" เพื่อแสดงเฉพาะค่าเฉลี่ยและใช้performance_improvement_enabledแท็ก.

- คลิก "เพิ่มกราฟใหม่" เพื่อเพิ่มแผนภูมิสำหรับจำนวนการชำระเงิน อีกครั้ง ใช้
optimization_activeแท็ก.

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

แค่นั้นแหละ!
สรุป
เราได้เห็นแล้วว่าฟีเจอร์แฟล็กเสนอวิธีที่ยืดหยุ่นและมีประสิทธิภาพในการจัดการและปรับใช้ฟีเจอร์ใหม่ในแอปพลิเคชัน Ruby on Rails ด้วยการใช้เครื่องมือ เช่น Flipper gem และตัวชี้วัดที่กำหนดเองของ AppSignal นักพัฒนาไม่เพียงสามารถควบคุมการเปิดตัวฟีเจอร์เท่านั้น แต่ยังวัดผลกระทบต่อประสิทธิภาพและพฤติกรรมผู้ใช้อีกด้วย
แนวทางนี้ทำให้แน่ใจได้ว่าคุณสมบัติใหม่ๆ ได้รับการทดสอบและปรับให้เหมาะสมอย่างละเอียดถี่ถ้วนก่อนที่จะนำไปใช้งานอย่างเต็มรูปแบบ ซึ่งท้ายที่สุดจะนำไปสู่แอปพลิเคชันที่มีเสถียรภาพและเป็นมิตรกับผู้ใช้มากขึ้น สุดท้ายนี้ สามารถนำไปสู่การตัดสินใจทางธุรกิจที่มีข้อมูลมากขึ้นเมื่อประเมินประสิทธิผลของแนวทางอื่น
ขอให้สนุกกับการเขียนโค้ด!
ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ป>
จูเลียน รูบิสช์
Julian ผู้เขียนรับเชิญของเราเป็นที่ปรึกษา Ruby on Rails อิสระในกรุงเวียนนา ซึ่งเชี่ยวชาญด้าน Reactive Rails เขาเป็นส่วนหนึ่งของทีมหลัก StimulusReflex โดยอยู่ในแถวหน้าของการพัฒนาเทคโนโลยี HTML-over-the-wire ที่ล้ำสมัยมาตั้งแต่ปี 2020
บทความทั้งหมดโดย Julian Rubisch