WeOmni

รู้จักกับ Blue/Green Deployment หลักการ Deploy แบบไร้ Downtime

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

อะไรคือ Blue/Green Deployment

Blue/Green Deployment คือกระบวนการ Deploy ซอฟต์แวร์ระบบ สู่ Prodution ที่มั่นใจว่ากระบวนการนั้นจะราบรื่นทั้งในขณะ Deploying หรือ Update และการ Rollback ที่มีผลกระทบน้อยที่สุด โดยมีการสร้าง Production Environment ที่มีสภาพแวดล้อมเหมือนกันเป็นสองก้อนอิสระกัน แยกกำกับเป็นสี “น้ำเงิน” (Blue) และสี “เขียว” (Green) โดยส่วนของสีเขียวจะใช้เป็นการทดสอบ Deploy ซอฟต์แวร์ชุดใหม่ว่ามีปัญหาหรือไม่ ราบรื่นดีมั้ย โดยอีกสภาพแวดล้อมหนึ่งซึ่งเป็นของเดิมจะถูกกำกับเป็นสีน้ำเงิน ซึ่งเป็นเวอร์ชั่นซอฟต์แวร์ที่จะใช้งานจริงอยู่ ทั้งสองสภาวะนี้จะคุมผ่าน Router ในการพาผู้ใช้ไปในสภาพแวดล้อมใดหนึ่ง โดยไม่ต้องมีการปิดปรับปรุงเลย เพื่อประสบการณ์ของผู้งานที่ราบรื่นที่สุด

จุดประสงค์ของการทำ Blue/Green Deployment

Blue/Green Deployment มีจุดประสงค์เพื่อช่วยการ Deploy ซอฟต์แวร์ล่าสุดในหลายด้าน ดังนี้

  1. ไม่ต้องปิดระบบ (Zero Downtime): ถือเป็นธงหลักของหลักการนี้เลย นั่นคือทำอย่างไรให้ User ใช้งานต่อเนื่องตลอดการ Depoly ไม่รู้สึกถึงการเปลี่ยนแปลงในทางลบ เช่น งดให้บริการชั่วคราว ปิดปรับปรุงชั่วคราว 
  2. กู้คืนระบบเดิมได้เร็ว: หากกรณีที่เวอร์ชั่นใหม่ที่ Deploy ไปพบปัญหา ก็สามารถย้อนกลับไปใช้ระบบเวอร์ชั่นก่อนหน้าได้ทันทีเพียง Route ผู้ใช้กลับสู่เวอร์ชั่นก่อนหน้า ลดความเสี่ยงระบบล่ม มีปัญหาได้อย่างทันท้วงที
    มั่นใจในคุณภาพของ
  3. ซอฟต์แวร์มากขึ้น: เมื่อมี Production Environment เหมือนกันอีกก้อน ที่ไม่ถูก Live จึงสามารถใช้พื้นที่นั้นทดสอบฟีเจอร์ ทดสอบระบบ หรือตรวจสอบการอัปเดตในสภาพแวดล้อมคล้ายการใช้งานจริงยิ่งขึ้น ก่อนจะ Launch 
  4. รีดทรัพยากรได้ดียิ่งขึ้น: เพราะโจทย์ที่ต้องมี Production Environment คู่ แม้ดูเหมือนจะใช้ทรัพยากรมากกว่า แต่ก็หลักการนี้ช่วยท้าทายให้รีดทรัพยากรสูงสุดโดยการจัดแบ่งการใช้งาน เช่น staging, testing, หรืองาน pre-production บางอย่าง ปล่อยให้เกิดสถานะ idle น้อยที่สุด
  5. ลดความซับซ้อนในการพัฒนา: การมี Production Environment คู่ อาจฟังดูซับซ้อน แต่เพราะการทำซ้ำๆ กันนี้ ช่วยลดความซ้ำซ้อมในการพัฒนา คุมลักษณะที่คาดเดาได้ง่าย

กระบวนการคร่าวๆ ของ Blue/Green Deployment

  1. ทำการ Deploy: Deploy ตัวแอปพลิเคชันใหม่ลงใน “Green” 
  2. ตรวจสอบ (Validation): ทำการทดสอบระบบอย่างเข้มงวดใน “Green” เพื่อให้มั่นใจว่าไม่เจอข้อผิดพลาดใดๆ และใช้งานได้อย่างมีประสิทธิภาพสูง พร้อมสำหรับการนำไปใช้งานจริง
  3. สลับ (Switch): เมื่อผ่านการตรวจสอบเรียนร้อยสมบูรณ User traffic จะถูกโยกจาก “Blue” ไปยัง “Green” 
  4. ย้อนกลับ (Rollback): ถ้ากรณีพอใช้งานจริงแล้วพบปัญหาเข้า User traffic สามารถสลับฝั่งจาก “Green”  ไปยัง “Blue” ได้ทันที

จุดแข็ง

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

จุดอ่อน

  • ใช้ทรัพยากรสูง (Resource Intensive): เพราะต้องวางระบบที่เป็น Production จริงถึง 2 ส่วน ส่งผลให้มีค่าใช้จ่ายเพิ่มเติมและการใช้ทรัพยากรเป็นสองเท่า
  • ความซับซ้อนสูง: เพราะต้องจัดการระบบเพิ่ม ทำให้การจัดการซับซ้อนยิ่งขึ้น
  • Data Synchronization: การทำระบบฐานข้อมูลให้สามารถ Synchronization ระหว่างสองสภาพแวดล้อมอาจเป็นเรื่องที่ท้าทาย

สรุป

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