Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

ทำความรู้จักกับ Blue-Green Deployment กันหน่อย

$
0
0

Blue Green_BB

f8268aec-8560-48b0-99e4-2bdbc80b03ba ช่วงหลังไปงาน meetup มักจะได้ยินคำแปลก ๆ ใหม่ ๆ เยอะมาก หนึ่งในนั้นก็คือ Blue-Green Deployment จาก Docker Meetup ดังนั้น มาทำความรู้จักกันหน่อยสิ ว่ามันคืออะไร ? ว่ามันมีขั้นตอนการทำงานอย่างไร ? ว่ามันมีประโยชน์อย่างไรบ้าง ?

มาดูรูปแบบการ deploy และ release ระบบงาน แบบเดิม ๆ กันก่อน

เมื่อต้องการ deploy ระบบงานใหม่ ๆ ขึ้นไปยัง production server มักจะมีขั้นตอนดังนี้
  1. ต้องหยุดให้บริการระบบงานเดิมก่อน นั่นคือต้องปิดระบบกันก่อน
  2. ทำการ deploy ระบบงานใหม่ขึ้นไป
  3. ต้องทำการทดสอบภายในกันก่อน ว่าทำงานถูกต้องหรือไม่ ถ้าระบบซับซ้อนก็ใช้เวลานานหน่อย
  4. เมื่อทุกอย่างพร้อม ก็เปิดใช้งานระบบกันเลย (Release)
สิ่งที่เราจะได้รับจากวิธีการนี้คือ เวลา Downtime นั่นเอง เราพยายามที่จะปรับปรุงขั้นตอนการ deploy ให้ใช้เวลาน้อยสุด ๆ แต่อย่างไรก็ตามในโลกของระบบงานที่เป็น Monolithic หรือทุกอย่างของระบบรวมกันอยู่ที่เดียวกันแบบใหญ่ ๆ ก็ต้องพบปัญหา Downtime เป็นปกติ แถมหนักขึ้นทุกวันไปอีก เนื่องจากระบบมีความซับซ้อนขึ้นในทุก ๆ วัน ดังนั้นจึงมีแนวคิดในการ deploy งานแบบใหม่ ๆ ขึ้นมา เพื่อลดเวลา Downtime ของการ deploy ลงไป นั่นก็คือ Blue-Green Deployment

มาดูแนวคิดของ Blue-Green Deployment

เป็นแนวคิดที่เรียบง่ายมากคือ เมื่อต้องการ deploy ระบบงานใหม่ ๆ ก็ไม่ต้องปิดระบบเดิม ก็ปล่อยให้ระบบเดิมทำงานไป และทำการ deploy ระบบใหม่ขึ้นไปแบบขนานเลย โดยที่
  • Blue คือ ระบบเดิม หรือ New Green
  • Green คือ ระบบใหม่
แสดงดังรูป immutable-microservices-only จะสังเกตุได้ว่า พวก service หรือระบบงานต่าง ๆ ต้องถูกกั้นด้วย proxy/router/load balance ซะ เพื่อง่ายต่อการปรับเปลี่ยนการใช้งาน service ต่าง ๆ โดยข้อดีของวิธีการนี้ประกอบไปด้วย
  • ลดเวลา Downtime
  • ลดความเสี่ยงในการ deploy
  • สามารถทดสอบได้นานเท่าที่ต้องการจนกว่าจะมั่นใจ
แต่สิ่งที่ตามมา และ สิ่งที่ต้องปรับปรุง ก็มีเยอะเช่นกัน ตัวอย่างเช่น
  • Environment ของระบบที่เพิ่มขึ้น
  • กระบวนการทดสอบระบบที่รวดเร็วขึ้น เช่น Automated testing
  • การออกแบบ service ในรูปแบบของ Microservice และ SOA เป็นต้น เพื่อให้แต่ละ service แยกออกจากกันอย่างชัดเจน เพื่อลดความซับซ้อนของระบบ และ ผลกระทบต่าง ๆ
ยิ่งในปัจจุบันมีทั้ง VM และ Docker ก็ยิ่งทำให้ การ deploy ระบบแบบ Blue-Green Deployment ทำได้ง่าย และ สะดวกมากยิ่งขึ้น สิ่งที่น่าสนใจ และ สำคัญมาก ๆ คือ Database บ่อยครั้งเราต้องการ update โครงสร้างของ database ทั้ง 2 version ปัญหามักจะเกิดจากการ deploy และ release แต่ละครั้งนานจนเกินไป ทำการทั้ง 2 version แตกต่างกันมากไป และนั่นก็คือ ปัญหาใหญ่ !! ดังนั้น การแก้ไขที่ง่าย และ ดีมาก ๆ คือ ให้ทำการ deploy และ release database บ่อย ๆ สิ จะทำให้เราสามารถดูแลและจัดการการเปลี่ยนแปลงของ database ได้ง่ายมากขึ้น
จำไว้เลยว่า ยิ่งเวลาแต่ละ deploy แต่ละ release บ่อย ๆ ก็ยิ่งดีครับ

ปิดท้ายด้วย ขั้นตอนการทำงานของ Blue-Green Deployment

โดยใช้ตัวอย่างของ Microservice ซึ่งถูกบรรจุไว้ใน container มีขั้นตอนการทำงานดังนี้ 1. เริ่มจากระบบการทำงานของระบบปัจจุบัน จะเรียกว่า Blue ซึ่ง traffic การใช้งานจะผ่าน Proxy เสมอ แสดงดังรูป immutable-microservices-01 2. เมื่อต้องการ deploy ระบบใหม่ หรือเรียกว่า Green จะทำการ deploy ระบบใหม่ขึ้นมาให้ทำงานแบบขนานกับของเดิมไปเลย ซึ่งต้องทดสอบด้วยว่า ต้องไม่มีการใช้งานจากที่อื่นนะ แน่นอนว่า ต้องไม่ส่งผลกระทบต่อระบบเดิมด้วย แสดงดังรูป immutable-microservices-02 3. เมื่อทดสอบระบบใหม่จนมั่นใจแล้ว ก็จะทำการ release ระบบงาน ด้วยการเปลี่ยน configuration ที่ Proxy เพื่อให้ traffic การใช้งานมายังระบบใหม่ แสดงดังรูป immutable-microservices-03 4. เมื่อทุกอย่างเรียบร้อยก็ทำการ stop การทำงานของระบบเก่า หรือ ลบไปซะ บางครั้งอาจจะยังไม่ลบออกไป เนื่องจากเผื่อเอาไว้ใช้ rollback เมื่อระบบใหม่ทำงานผิดพลาด แสดงดังรูป immutable-microservices-04

นี่คือความรู้พื้นฐานสำหรับการ deploy ระบบงานแบบ Blue-Green Deployment

น่าจะพอมีประโยชน์บ้างสำหรับการพัฒนา software ซึ่ง Deployment != Release นะครับ Reference Websites http://technologyconversations.com/2016/02/08/blue-green-deployment/ https://docs.pivotal.io/pivotalcf/devguide/deploy-apps/blue-green.html http://martinfowler.com/bliki/BlueGreenDeployment.html

Viewing all articles
Browse latest Browse all 1997

Trending Articles