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

การวัดผลกระทบของแฟล็กฟีเจอร์ใน Ruby on Rails ด้วย AppSignal – คู่มือปฏิบัติ

แฟล็กคุณลักษณะเป็นเครื่องมือที่มีประสิทธิภาพในการพัฒนาซอฟต์แวร์ ช่วยให้นักพัฒนาสามารถควบคุมพฤติกรรมของแอปพลิเคชันในขณะรันไทม์ได้โดยไม่ต้องปรับใช้โค้ดใหม่ ช่วยให้ทีมทดสอบฟีเจอร์ใหม่ ทำการทดสอบ 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 กันอย่างรวดเร็ว:

 

ตัวสร้างนี้จะแนะนำคุณตลอดกระบวนการและถามคำถามการตั้งค่าสองสามข้อ

  1. เลือก ตัวเริ่มต้น ส่วนหน้าเมื่อสอบถามประเภทส่วนหน้า
  2. ข้ามการตั้งค่าวิธีการชำระเงิน
  3. เลือกติดตั้งแอปพลิเคชัน Solidus ของคุณที่ / เนื่องจากเราใช้มันเป็นแอปแบบสแตนด์อโลน

หลังจากนั้นให้รัน bin/dev จากเทอร์มินัลของคุณและคุณควรจะดีไป เมื่อคุณไปที่ http://localhost:3000 คุณจะเห็นหน้าจอนี้:

การวัดผลกระทบของแฟล็กฟีเจอร์ใน Ruby on Rails ด้วย AppSignal – คู่มือปฏิบัติ

ใช้งานฟีเจอร์แฟล็กด้วย 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 เพื่อบรรลุเป้าหมายนี้ มาดูทีละขั้นตอนกัน:

  1. ในแถบด้านข้างซ้าย คลิก "เพิ่มแดชบอร์ด" และตั้งชื่อเป็น "การประเมินค่าสถานะคุณลักษณะ"

การวัดผลกระทบของแฟล็กฟีเจอร์ใน Ruby on Rails ด้วย AppSignal – คู่มือปฏิบัติ

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

การวัดผลกระทบของแฟล็กฟีเจอร์ใน Ruby on Rails ด้วย AppSignal – คู่มือปฏิบัติ

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

การวัดผลกระทบของแฟล็กฟีเจอร์ใน Ruby on Rails ด้วย AppSignal – คู่มือปฏิบัติ

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

การวัดผลกระทบของแฟล็กฟีเจอร์ใน Ruby on Rails ด้วย AppSignal – คู่มือปฏิบัติ

แค่นั้นแหละ!

สรุป

เราได้เห็นแล้วว่าฟีเจอร์แฟล็กเสนอวิธีที่ยืดหยุ่นและมีประสิทธิภาพในการจัดการและปรับใช้ฟีเจอร์ใหม่ในแอปพลิเคชัน Ruby on Rails ด้วยการใช้เครื่องมือ เช่น Flipper gem และตัวชี้วัดที่กำหนดเองของ AppSignal นักพัฒนาไม่เพียงสามารถควบคุมการเปิดตัวฟีเจอร์เท่านั้น แต่ยังวัดผลกระทบต่อประสิทธิภาพและพฤติกรรมผู้ใช้อีกด้วย

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

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

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! การวัดผลกระทบของแฟล็กฟีเจอร์ใน Ruby on Rails ด้วย AppSignal – คู่มือปฏิบัติ

จูเลียน รูบิสช์

Julian ผู้เขียนรับเชิญของเราเป็นที่ปรึกษา Ruby on Rails อิสระในกรุงเวียนนา ซึ่งเชี่ยวชาญด้าน Reactive Rails เขาเป็นส่วนหนึ่งของทีมหลัก StimulusReflex โดยอยู่ในแถวหน้าของการพัฒนาเทคโนโลยี HTML-over-the-wire ที่ล้ำสมัยมาตั้งแต่ปี 2020

บทความทั้งหมดโดย Julian Rubisch