กลยุทธ์การปล่อยนกขมิ้นเทียบกับสีน้ำเงิน / เขียว


126

ความเข้าใจของฉันเกี่ยวกับ Canary release คือการเผยแพร่บางส่วนไปยังชุดย่อยของโหนดการผลิตที่มีการเปิดใช้งาน Sticky Sessions ด้วยวิธีนี้คุณสามารถควบคุมและลดจำนวนผู้ใช้ / ลูกค้าที่ได้รับผลกระทบหากคุณปล่อยบั๊กที่ไม่ดี

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

ดังนั้นก่อนที่ฉันจะเริ่มหากสิ่งที่ฉันพูดไปแล้วไม่ถูกต้องโปรดเริ่มต้นด้วยการแก้ไขฉัน!

สมมติว่าฉันติดตามอยู่ไม่มากก็น้อยคำถามสองสามข้อเกี่ยวกับสองกลยุทธ์:

  • มีสถานการณ์ที่นกขมิ้นชอบมากกว่าสีน้ำเงิน / เขียวหรือไม่และในทางกลับกัน?
  • มีสถานการณ์ที่โมเดลการปรับใช้สามารถใช้ทั้งสองกลยุทธ์พร้อมกันได้หรือไม่

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

1
สรุปแนวคิดเหล่านี้ได้ดีมากฉันเห็นทุกที่โดยไม่มีคำจำกัดความที่ชัดเจนก่อน!
kheraud

คำตอบ:


95

การปล่อยสีเขียวอมฟ้าทำได้ง่ายและเร็วกว่า

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

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

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

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

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


คำสองสามคำเกี่ยวกับความหมายของสี: - สภาพแวดล้อมเก่าอาจเป็นสีฟ้าสีเขียวใหม่ - ในรุ่นถัดไปของเก่าจะเป็นสีเขียว Wiki:> หลายภาษาไม่แยกความแตกต่างระหว่างสิ่งที่เป็นภาษาอังกฤษอธิบายว่า "สีน้ำเงิน" และ "สีเขียว" และใช้คำที่ครอบคลุมทั้งสองคำแทน - "grue"
kinjelom

Canary ไม่ได้เร็วไปกว่าสีน้ำเงิน / เขียวเสมอไป ทุกอย่างขึ้นอยู่กับเวิร์กโฟลว์ CI และ CD!
Ligemer

83

ฉันได้เขียนเรียงความโดยละเอียดเกี่ยวกับหัวข้อนี้ที่นี่: http://blog.itaysk.com/2017/11/20/deployment-strategies-defined

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

ฟ้าเขียว: ใส่คำอธิบายภาพที่นี่

Canary: ใส่คำอธิบายภาพที่นี่


4
ภาพประกอบของคุณยอดเยี่ยมฉันอาจพิจารณารวมไว้ในคำตอบของคุณที่นี่ แต่เก็บลิงค์ไว้เพื่อการดำน้ำที่ลึกขึ้นพร้อมคำอธิบาย
quickshiftin

ขอบคุณ เพิ่มแล้ว
itaysk

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

อะไรคือความแตกต่างระหว่าง "ระหว่าง" และ "หลัง" ในแผนภาพรุ่น Canary ฉันคาดว่า "หลัง" จะดูเหมือนรุ่นสีน้ำเงิน / เขียว
Kes115

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

6

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

นกขมิ้น

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

  2. กำลังจะได้รับแนวคิดว่าเวอร์ชันใหม่จะทำงานอย่างไร (รวมกับแอปอื่น ๆ CPU หน่วยความจำการใช้งานดิสก์ ฯลฯ )

ฟ้าเขียว:

  1. เป็นข้อมูลเพิ่มเติมเกี่ยวกับรุ่นที่คาดเดาได้โดยไม่มีการปรับใช้เวลาหยุดทำงาน
  2. ย้อนกลับได้ง่ายในกรณีที่ล้มเหลว
  3. กระบวนการปรับใช้อัตโนมัติโดยสิ้นเชิง

4

นี่คือคำจำกัดความแบบอินไลน์ -

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

     

  • การทดสอบ A / B - แอปพลิเคชั่นสองเวอร์ชันกำลังทำงานในเวลาเดียวกัน คำขอส่วนหนึ่งจะส่งไปยังแต่ละรายการ จากนั้นนักพัฒนาสามารถเปรียบเทียบเวอร์ชันได้  
  • Canary Release - ไมโครเซอร์วิสเวอร์ชันใหม่จะเริ่มต้นพร้อมกับเวอร์ชันเก่า เวอร์ชันใหม่นั้นสามารถรับส่วนหนึ่งของคำขอและทีมงานสามารถทดสอบว่าเวอร์ชันใหม่นี้โต้ตอบกับระบบทั้งหมดอย่างไร

3

จุดเริ่มต้นที่ดีของคำจำกัดความ ฉันคิดว่ามันยังช่วยในการตัดสินใจสำหรับกลยุทธ์ของคุณหากคุณแยกคำจำกัดความ "release" ใน "deploy" และ "release (functions)"

ปรับใช้ (ไบนารี)

การดำเนินการของการปรับใช้ผลิตภัณฑ์ของคุณแบบไบนารีกับระบบ (การผลิต)

รุ่น (ฟังก์ชัน)

การดำเนินการจัดการความพร้อมใช้งานของฟังก์ชันสำหรับผู้ใช้ (กลุ่ม)

ทำไม? โดยทั่วไปคุณมีข้อกังวล (หลายข้อ) สองข้อเมื่อ "ปล่อย": 1) ข้อบกพร่อง / ความเข้ากันได้ย้อนกลับ / ฯลฯ 2) การตรวจสอบความถูกต้อง / การใช้งานของคุณสมบัติใหม่

จากนั้นถามตัวเองก่อนที่จะเลือกกลยุทธ์ Canary หรือ Blue / green หรืออะไรก็ตามที่เป็นสีเทา / โหมดผสม: เรามีข้อกังวลอะไรบ้างเมื่อปล่อย / ปรับใช้เวอร์ชันใหม่ และเฉพาะเมื่อคุณทราบข้อกังวลของคุณให้เลือกกลยุทธ์ของคุณ

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

การตั้งค่าสถานะคุณลักษณะ

การดำเนินการของ "การกำหนดค่า" (เย็นหรือร้อน) ซึ่งฟังก์ชัน (ไม่) มีให้สำหรับผู้ใช้ (กลุ่ม) ใด

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

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