“ ธงคุณลักษณะ” คืออะไร?


115

แฟล็กคุณลักษณะความสามารถในการปรับขยายได้สูงที่นี่

5 สิ่งที่เป็นพิษต่อ scalability , "5. ขาดคุณสมบัติธง"

แฟล็กฟีเจอร์คืออะไร?


1
ดังที่ Maxim Vexler ชี้ให้เห็นโพสต์ Flickr นี้เป็นหนึ่งในบทความที่เป็นที่ยอมรับซึ่งเป็นบทความแรก ๆ เกี่ยวกับแฟล็กคุณลักษณะและอธิบายการใช้งานและการนำไปใช้ในcode.flickr.com/blog/2009/12/02/flipping-out
Noah Sussman

คำตอบ:


104

'feature flag' (หรือFeature Toggle ) คือความสามารถในการเปิด / ปิดคุณสมบัติ (ส่วนย่อย) ของแอปพลิเคชันของคุณได้อย่างง่ายดาย:

  • อาจผ่านการปรับใช้ใหม่หรือ
  • เพจภายในบางเพจที่สามารถเปิดใช้งานเพจ / ฟีเจอร์ได้

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

มีเหตุผลอื่น ๆ อีกมากมายที่คุณต้องการใช้สิ่งนี้ - หนึ่งในสาเหตุหลักในการเปิดใช้งานการจัดส่งแบบต่อเนื่อง : การผลักดันสิ่งต่าง ๆ เข้าสู่การผลิต / ใช้งานจริง แต่มีการปิดใช้งาน / สลับคุณลักษณะจนกว่าจะเสร็จสิ้น เรามักใช้สิ่งที่เราเรียกว่า 'คุกกี้นักพัฒนา' เพื่อแสดงคุณสมบัติที่ยังไม่สมบูรณ์ให้กับทีมนักพัฒนาเท่านั้น ด้วยวิธีนี้เราสามารถทดสอบงานที่เสร็จสมบูรณ์แล้วบางส่วนในการผลิต (โอ้ใช่! มีการผสานรวมที่ดีกว่านี้หรือไม่) ในการเผยแพร่ / การปรับใช้หลายรายการก่อนที่เราจะ 'ยกเลิกการสลับ' (เสร็จสมบูรณ์) และจะปรากฏต่อสาธารณะ

นี่คือแพ็คเกจง่ายๆที่ช่วยให้คุณทำสิ่งนี้ใน ASP.NET MVC land: https://github.com/cottsak/DevCookie (การเปิดเผยข้อมูลทั้งหมด: ฉันเป็นผู้เขียน)

Fowler ยังมีบทความที่ยาวกว่าบทความที่เชื่อมโยงด้านบนพร้อมรายละเอียดเพิ่มเติมมากมาย

โพสต์นี้ (สถานที่เดียวกันฟาวเลอร์ยัง) อธิบายประเภทต่างๆของกลยุทธ์การสลับ DevCookieสนับสนุนกลยุทธ์แบบ mainline / trunk-based และเรียกว่า " Release Toggle " ในบทความ

คำตอบของ Adilเน้นว่ามีคำศัพท์และเหตุผลมากมายที่คุณอาจต้องการโครงสร้างพื้นฐานนี้ โปรดทราบว่าคุณอาจต้องการเพียงบางสิ่งเหล่านี้ ตัวอย่างเช่นฉันอาจต้องการเปิดใช้งานขั้นตอนการปรับใช้ / การจัดส่งที่เรียบง่ายและคล่องตัวเท่านั้นดังนั้นโครงสร้างพื้นฐานที่เรียบง่ายก็เพียงพอแล้ว หากคุณเลือกที่จะย้ายไปสู่การทดลอง#leanstartupเต็มรูปแบบด้วย A / B การทดสอบตามกลุ่มและสิ่งต่างๆเช่นการเปิดตัวที่มีการควบคุมคุณควรพิจารณาเครื่องมือวิเคราะห์ (เช่นฮีป ) ซึ่งอำนวยความสะดวกให้กับวิธีการพัฒนาที่ขับเคลื่อนด้วยข้อมูลเหล่านั้นเป็นโซลูชันที่แตกต่างกัน . โครงสร้างพื้นฐานแบบสลับที่ทำทั้งหมดข้างต้นจะนำไปสู่การขยายตัวและความซับซ้อนที่ไม่จำเป็น

ถ้าคุณทำให้มันไกลขนาดนี้แล้วคุณอาจต้องการตรวจสอบบางส่วนของฉันคิดอื่น ๆ เกี่ยวกับการพ้นจากการพัฒนาคุณลักษณะที่สามารถเลือกและความคิดโง่อื่น ๆ เช่นการทดสอบ, QA, SIT ยืนหมอบ


1
น่าสนุกพอสมควรฉันมักจะจินตนาการถึงสิ่งเดียวกันในทุกสิ่งที่ฉันสร้าง นั่นอาจเป็นคุณสมบัติที่มีประสิทธิภาพ
GurdeepS

7
บ่อยครั้งคุณจะพบสิ่งต่างๆเช่นนี้ซึ่งดูเหมือนชัดเจน ปรากฎว่ามีคนตั้งชื่อให้อยู่เสมอ
Matt Kocaj

27

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

แฟล็กคุณลักษณะมีส่วนสำคัญในโครงร่าง CI ซึ่งคุณลักษณะต่างๆจะถูกปรับใช้อย่างต่อเนื่อง แต่ไม่จำเป็นต้อง "นำออกใช้" ในการใช้งานจริง

ข้อมูลเพิ่มเติมที่นี่:

- แก้ไข:

คุณลักษณะการใช้งานจาวาแฟล็


3
สิ่งนี้อธิบายไว้อย่างดีใน 'การทำให้ใช้งานได้อย่างต่อเนื่อง' และเป็นข้อกำหนดสำหรับการพัฒนา 'เมนไลน์' แทนที่จะแยกสาขาใน SCM สำหรับฟีเจอร์ฟีเจอร์ต่างๆจะถูกเปิดหรือปิดทำให้คุณปล่อยโค้ดที่มีฟีเจอร์ที่ยังไม่ควรเปิดใช้งาน
Chip McCormick

หมายเหตุเกี่ยวกับ "ผ่านการกำหนดค่าโดยไม่ต้องปรับใช้โค้ดใหม่": ดูเหมือนว่าข้อความดังกล่าวหมายถึงการเปลี่ยนการกำหนดค่าจากนั้นจึงทำให้แอปใช้งานได้อีกครั้ง (แม้ว่าอาจจะไม่มีการเปลี่ยนแปลงโค้ด) การดำเนินการนี้ยังคงใช้เวลาตั้งแต่วินาทีถึงนาทีขึ้นอยู่กับขั้นตอนการปรับใช้ของคุณ การตั้งค่าสถานะคุณลักษณะหรือการสลับคุณลักษณะอาจไม่คงอยู่ในการกำหนดค่า อาจอยู่ใน store / db ที่ไหนสักแห่งและทำงานในรูปแบบ "สด" นั่นคือการนำทางไปยังหน้าผู้ดูแลระบบที่คุณกดปุ่มเพื่อเปิดใช้งานพฤติกรรมบางอย่างทั่วทั้งไซต์ทันที (ไม่มีการปรับใช้ไม่มีการเปลี่ยนแปลงการกำหนดค่า)
Matt Kocaj

1
ฉันทำงานให้กับConfigCat.comและวิธีที่ฉันเห็น "การเปลี่ยนการกำหนดค่าโดยไม่ต้องปรับใช้โค้ดใหม่" หมายความว่าการกำหนดค่านั้นให้บริการโดยบริการแฟล็กคุณลักษณะและแอปพลิเคชันของคุณเข้าถึงค่าโดยการดึงไฟล์กำหนดค่านั้น ด้วยวิธีนี้คุณจะมั่นใจได้ว่าการเปลี่ยนค่าไม่จำเป็นต้องมีการปรับใช้แอปซ้ำ ยิ่งไปกว่านั้นยังช่วยให้คุณสามารถสร้างกฎเพื่อให้คุณส่งมอบคุณค่าให้กับผู้ใช้คนหนึ่งและอีกคนหนึ่ง เจ๋งคือการประเมินค่าสถานะคุณลักษณะทั้งหมดอยู่ในฝั่งไคลเอ็นต์และตรรกะทั้งหมดนี้ทำงานได้โดยไม่จำเป็นต้องส่งข้อมูลใด ๆ กลับไปที่บริการแฟล็กคุณลักษณะ
sige

techblog.outbrain.com/tag/feature-flags - URL ไม่ทำงาน
Sathish

19

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

พวกเขาได้รับความนิยมในส่วนของ Facebook ยาม LiX ของ LinkedIn เป็นอีกหนึ่งตัวอย่างที่ดี

การยอมรับแนวคิดง่ายๆนี้เป็นการวางรากฐานสำหรับแนวทางปฏิบัติที่ดีที่สุดหลายประการ ได้แก่ :

การปรับใช้ / การจัดส่งอย่างต่อเนื่อง - รหัสหลายตัวจะผลักดันไปสู่การผลิตในหนึ่งวัน

การพัฒนา Trunk / Mainline - สาขาคุณลักษณะควรถูกสร้างขึ้นสำหรับคำขอดึงเท่านั้นไม่ใช่สำหรับการพัฒนาคุณลักษณะที่มีอายุยาวนาน

ไม่มีการปล่อยรถไฟอีกต่อไปเพื่อขัดขวางสิ่งต่างๆ

การทดสอบ QA / Perf ในการผลิต - การทดสอบคุณภาพจริงและการทดสอบประสิทธิภาพอยู่บนโครงสร้างพื้นฐานการผลิตที่มีปริมาณการใช้งานในการผลิต อย่าเสียเวลาในการสร้างห้องปฏิบัติการประสิทธิภาพและสภาพแวดล้อมการจัดเตรียมที่กว้างขวาง

การทดลอง - รู้ว่าคุณลักษณะใหม่ทำให้ KPI ของคุณเป็นอย่างไร

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

คนอื่น ๆ ได้กล่าวถึงไลบรารีโอเพนซอร์ส เป็นตัวอย่างที่ดีของการแก้ปัญหาอย่างเต็มรูปแบบ - เหมือนยามและ LIX - เป็นสปลิต ฉันทำงานให้กับ Split


ฉันคิดว่าสิ่งสำคัญคือต้องไม่รวมแฟล็กฟีเจอร์เพียงเพื่อสนับสนุนข้อ CI ข้อ AB / การทดลองตามรุ่น / การทดลองแบบลีน - เป้าหมายแตกต่างกัน ตัวอย่างเช่นการใช้การสลับคุณลักษณะเพื่อรับบางสิ่งบางอย่างเข้าสู่ Prod สำหรับ QA / การยอมรับอาจเป็นเครื่องมือง่ายๆในการช่วยเหลือ CI / CD และในกรณีเช่นนี้ Split อาจใช้งานมากเกินไป จากนั้นอีกครั้งหากคุณต้องการทำการทดลองแบบลีนหรือการทดสอบ A / B คุณอาจต้องมีเครื่องมือวิเคราะห์ที่ดีเช่นHeap ที่มีเครื่องมือเพิ่มเติมและการรายงานทางไกลในตัวฉันไม่ชอบแนวคิดในการรวมวัตถุประสงค์ทั้งสองนี้ - ดูเหมือนว่าคุณ สามารถขยายตัวได้ง่ายมาก
Matt Kocaj

14

มีคำตอบที่ยอดเยี่ยมมากมายที่นี่ทั้งหมดนี้เป็นคำจำกัดความที่สำคัญและเป็นที่นิยมในโพสต์ของMartin Fowler :

เป็นโค้ดส่วนหนึ่งที่ "[อนุญาต] ให้ทีมแก้ไขพฤติกรรมของระบบโดยไม่ต้องเปลี่ยนโค้ด"

ดังนั้นในอดีตเราจึงคิดว่าสิ่งเหล่านี้แสดงโดยรหัสหลอก:

if(app_settings["beta-mode"] == "true")
  showAwesomeNewGui();
else
  sameOldSnoozeFeset();

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

แต่ฉันต้องการเสนอคำจำกัดความที่ได้รับการแก้ไขซึ่งสะท้อนให้เห็นว่าความเป็นจริงมีวิวัฒนาการมาอย่างไรในช่วงหกปีที่ผ่านมาและการเปลี่ยนแปลงตั้งแต่ dotnetdev ถามคำถามเดิม ฉันทำงานให้กับRollout.ioซึ่งเป็นแพลตฟอร์มแฟล็กฟีเจอร์ดังนั้นฉันจึงมีที่นั่งแถวหน้าสำหรับวิวัฒนาการนี้

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

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

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

  • ใครควรเห็นหน้าจอผู้ดูแลระบบใหม่ที่เรากำลังเปิดตัวและเมื่อใด
  • ต้องมีสมาชิกระดับใดเพื่อปลดล็อกไข่อีสเตอร์นี้
  • เราควรตัดฐานข้อมูลใหม่เมื่อใด
  • เราควรใส่ภาพเสือชีตาห์หรือนกอินทรีบนปุ่มชำระเงินเพื่อเพิ่มประสิทธิภาพการแปลงหรือไม่?

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

  • จุดสลับใช้เพื่อเปลี่ยนพฤติกรรมสำหรับคุณสมบัติใหม่
  • จุดสลับหลายมาร่วมกันในรูปแบบที่เราเตอร์สลับ เราเตอร์แบบสลับจะกำหนดสถานะของคุณสมบัติ
  • บริบทการสลับให้ข้อมูลบริบทที่จำเป็นแก่เราเตอร์สลับ (เช่นผู้ใช้เฉพาะ)
  • Toggle configurationให้ข้อมูลสลับเราเตอร์เกี่ยวกับสภาพแวดล้อม

ในท้ายที่สุดแฟล็กคุณลักษณะคืออะไร?

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


9

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

นี่คือตัวอย่างจากเอกสาร SWIG


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

6

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

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

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


4

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

ที่ บริษัท ของเราที่เราเคยใช้LaunchDarklyและข้อเสนอแนะอื่น ๆ จากFeatureFlags.io เรายังได้ลองใช้การกำหนดค่าระยะไกลของ Firebaseเพื่อลองใช้งาน แต่เราพบว่ามันไม่เหมาะกับจุดประสงค์นี้จริงๆ

เราได้พัฒนาเวอร์ชันของเราเองที่ชื่อว่าBullet Trainซึ่งเราได้เปิดแหล่ง มันรวมทั้ง Feature Flags / Toggles และ Remote Config


4

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

เมื่อมีการตั้งค่าสถานะคุณลักษณะในโค้ดแล้วคุณสามารถใช้วิธีการต่างๆเพื่อกำหนดว่าผู้ใช้รายใดจะเห็นคุณลักษณะนี้ในแอปพลิเคชันของคุณ: 1. เปิด / ปิด - แสดงคุณลักษณะนี้ต่อผู้ใช้ของคุณทั้งหมดหรือไม่มีเลย 2. การเผยแพร่แบบค่อยเป็นค่อยไป - แสดงคุณลักษณะนี้ต่อผู้ใช้เพียงเปอร์เซ็นต์เดียวจากนั้นค่อยๆแสดงให้ผู้ใช้ทุกคนเห็น 3. การกำหนดเป้าหมาย - แสดงคุณลักษณะแก่ผู้ใช้เฉพาะตามคุณสมบัติหรือลักษณะของผู้ใช้รายนั้น

เครื่องมือที่ช่วยในการควบคุมฟีเจอร์แฟล็ก (บูลีน) และการกำหนดค่าคุณลักษณะ (สตริงตัวเลข ฯลฯ ) มักเรียกว่าแพลตฟอร์มการจัดการคุณลักษณะ มีบริการที่ยอดเยี่ยมสำหรับการจัดการคุณลักษณะที่เรียกว่าConfigz.io


3

จากมุมมองของการเข้ารหัสแฟล็กคุณลักษณะอาจเป็นเรื่องง่ายเหมือนกับifคำสั่งที่ล้อมรอบโค้ดใหม่ที่คุณกำลังเขียน เมื่อifคำสั่งประเมินเป็นจริง (แฟล็กคุณลักษณะเปิดอยู่) รหัสใหม่จะถูกเรียกใช้

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

จากประสบการณ์ส่วนตัวของฉันในช่วงอาชีพของฉันฉันได้ใช้แฟล็กคุณลักษณะด้วยวิธีต่อไปนี้:

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

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

  3. การเปิด / ปิดคุณลักษณะต่อสภาพแวดล้อมในวงจรชีวิตของการพัฒนา เราใช้สิ่งนี้อย่างกว้างขวางในการพัฒนาเพื่อให้กระบวนการปรับใช้งานราบรื่นขึ้นมาก - เรามีไปป์ไลน์ CI / CD ซึ่งการใช้แฟล็กคุณลักษณะมีความสำคัญ

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับแฟล็กฟีเจอร์ได้ที่นี่

คุณสามารถเพิ่มแฟล็กฟีเจอร์ให้กับโค้ดของคุณได้หลายวิธี

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

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

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

นี่คือตัวอย่างของวิธีการเพิ่มค่าสถานะคุณลักษณะ Floodgate ให้กับแอปพลิเคชันโดยใช้. NET SDK

using FloodGate.SDK;

var floodgateClient = new FloodGateClient("API-KEY");

var flag = floodgateClient.GetValue("a-new-feature", false);

if (flag)
{
  // Execute the code for my new feature here...
}

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

Martin Fowler ให้ข้อมูลเชิงลึกเกี่ยวกับแฟล็กคุณลักษณะที่ฉันแนะนำให้คุณอ่าน


2

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

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

LDUser user = new LDUser("user@test.com");

boolean showFeature = ldClient.toggle("your.feature.key", user, false);

if (showFeature) {
     // application code to show the feature 
 }
else {
     // the code to run if the feature is off
 }

ฉันกำลังทดสอบแฟล็กคุณลักษณะของ LaunchDarkly สำหรับการทดสอบJS A / B ส่วนหน้า - ดูเหมือนว่าจะทำงานได้ดี นอกจากนี้คุณยังสามารถตรวจสอบเว็บไซต์นี้สำหรับสลับคุณลักษณะและห้องสมุดคุณลักษณะธง


1

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

มีหลาย บริษัท ที่ให้บริการนี้สำหรับนักพัฒนาแอปพลิเคชันมือถือ


ระวังสิ่งเหล่านี้ คุณไม่จำเป็นต้องรวมหนึ่งในบริการเหล่านี้เพื่อสร้างสวิตช์ธรรมดาที่สามารถใช้เพื่อซ่อนคุณสมบัติหลายอย่างจากการมองเห็น / การรวม PROD นอกจากนี้คุณไม่จำเป็นต้องดำเนินการแบบสดเนื่องจากการรอการปรับใช้ไม่ใช่เรื่องใหญ่เมื่อการปรับใช้ PROD ใช้เวลาเพียงไม่กี่นาที (ซึ่งคุณควรปรับให้เหมาะสมด้วยเหตุผลอื่น ๆ อีกมากมาย)
Matt Kocaj

2
นอกจากนี้ยังเป็นการเปรียบเทียบบริการแฟล็กฟีเจอร์
sige

1

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

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.