Zero Downtime ด้วย Blue/Green Deployment
A Deployment Technique That Can Give You Zero Downtime, Faster Rollback, and Disaster-Recovery Testing.
ความยากของการทำ Deployment (ต่อให้เป็น Automated Deployment) คือการ Cut-Over หรือจังหวะเปลี่ยนผ่านจาก Version เก่ามา Version ใหม่ จากของที่อยู่ใน Testing Environment มาเป็น Production Environment นี่คือจังหวะที่เราเรียกว่า “Downtime” ซึ่งเป็นจังหวะเวลาที่ซอฟต์แวร์หรือเซอร์วิสไม่สามารถใช้งานได้และเกิดผลเสียทางธุรกิจตามมา เป็นสาเหตุให้ผู้ที่มีส่วนเกี่ยวข้องทุกฝ่ายพยายามจะลดระยะเวลา Downtime ลงมาให้ได้มากที่สุด เป้าหมายคือ Zero
ในหนังสือชื่อ Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation โดย Jez Humble และ David Farley แนะนำเทคนิคหนึ่งที่ช่วยทำให้เป้าหมายคำว่า Zero Downtime มีโอกาสเป็นจริงได้ เทคนิคนี้เรียกว่า “Blue/Green Deployment”
Blue/Green Deployment แนะนำว่าคุณต้องมี Production Environment สองชุดที่เหมือนกันให้มากที่สุดเท่าที่จะทำได้ ณ เวลาใดๆก็ตามจะมี Environment หนึ่งชุด (เรียกว่า Blue) ที่กำลังทำงานอยู่ ระหว่างนั้นเราก็เตรียมการ Deploy ของใหม่อยู่บนอีก Environment หนึ่ง (Green) เมื่อเราทำการทดสอบครั้งสุดท้ายบน Green เสร็จแล้ว เราจะสวิชท์เร้าเตอร์ให้ส่ง Request ทั้งหมดไปที่ Green ณ ตอนนี้ Blue ก็จะถูกลดระดับมาเป็น Standby Environment
Blue/Green Deployment เป็นเทคนิคที่ช่วยให้การทำ Rollback ง่ายและรวดเร็วขึ้นเพราะถ้ามีอะไรผิดพลาดที่ Green เราก็สามารถสวิชท์เร้าเตอร์ให้ส่ง Request กลับมาที่ Blue ได้ มันไม่ใช่แค่การ Rollback ที่ระดับ Application หรือ Service แต่เป็นระดับ Environment เลยทีเดียว
เมื่อเราปล่อย Green ให้ทำงานอยู่สักระยะจนเรามั่นใจแล้วว่าจะไม่มีปัญหาเกิด เราก็สามารถใช้ Blue เป็น Staging หรือ Pre-Production Environment สำหรับการเตรียม Deploy ของ Version ถัดไปได้ ประโยชน์ที่เห็นได้อีกข้อหนึ่งจากเทคนิคนี้คือเราสามารถทดสอบกระบวนการ Disaster-Recovery ได้ในทุกครั้งที่เราทำ Deployment เลยทีเดียว … เจ๋ง
ป.ล. เรื่องราวนี้ถูกถ่ายทอดอีกต่อหนึ่งโดย Martin Fowler (หนึ่งในผู้ริเริ่มแนวคิด Agile Software Development)
ผมเขียนบทความนี้เพราะอยากเปลี่ยนแปลงสิ่งที่เป็นอยู่ในอุตสาหกรรมการผลิตซอฟท์แวร์ให้ดีขึ้นตามความเชื่อและประสบการณ์ของผม ถ้าเพื่อนๆเชื่อในแนวทางเดียวกัน เรามาช่วยกันคนละไม้คนละมือทำให้สังคมของเราดีขึ้นครับ จะแชร์บทความนี้ผ่าน Social Network หรือจะแบ่งปันเรื่องราวนี้ให้คนที่นั่งข้างๆฟังบ้างก็ได้
The Future Has Arrived — It’s Just Not Evenly Distributed Yet, William Gibson
อนาคตอยู่ตรงนี้แล้ว เรามีหน้าที่ต้องถ่ายทอดมันออกไปให้คนอื่นได้สัมผัสสิ่งดีๆร่วมกันครับ