IT General
น้องๆ เคยไหม? เวลา deploy code ใหม่ขึ้น production แล้วเจอปัญหา ลูกค้าบ่นอุบ อุตส่าห์นอนดึกเขียน code แทบตาย กลายเป็นว่าระบบล่มซะงั้น สมัยผมทำร้านเน็ต SiamCafe เนี่ย เวลามี patch เกมออนไลน์ใหม่ๆ มาทีไร ใจเต้นตุ้มๆ ต่อมๆ กลัวเกมมันรวน ลูกค้าหายหมด
Blue Green และ Canary deployment เนี่ย เป็นเทคนิคที่ช่วยลดความเสี่ยงตรงนี้แหละ มันเหมือนกับการที่เรามีสนามทดลองก่อนปล่อยของจริงออกไปให้ลูกค้าใช้กันเต็มๆ
Blue Green Deployment คือการที่เรามี environment production สองชุด ชุดนึงเป็นชุดเก่า (Blue) ที่ลูกค้าใช้อยู่ อีกชุดเป็นชุดใหม่ (Green) ที่เราจะ deploy code ใหม่เข้าไป พอเราทดสอบชุด Green จนมั่นใจแล้ว เราก็แค่สลับ traffic ให้ลูกค้ามาใช้ชุด Green แทน แค่นั้นเอง! ถ้ามีปัญหาก็สลับกลับไป Blue ได้เลย ง่ายไหมล่ะ
ส่วน Canary Deployment นี่จะ advanced ขึ้นมาหน่อย คือเราจะค่อยๆ ปล่อย code ใหม่ให้ลูกค้ากลุ่มเล็กๆ ก่อน (เหมือนปล่อยนกคีรีบูนไปดมแก๊สพิษในเหมือง) ถ้าไม่มีปัญหาอะไร เราค่อยๆ เพิ่มจำนวนลูกค้าที่ได้ใช้ code ใหม่ไปเรื่อยๆ จนทุกคนได้ใช้หมด
ทำไมมันถึงสำคัญน่ะเหรอ? ก็เพราะว่ามันช่วยลด downtime ลดความเสี่ยง และทำให้เรามั่นใจได้ว่า code ใหม่ของเรามันทำงานได้จริงๆ ก่อนที่จะปล่อยให้ลูกค้าทุกคนใช้ไงล่ะ สมัยผมทำร้านเน็ตนี่ ถ้ามีระบบแบบนี้คงนอนหลับสบายกว่าเยอะเลย
อันนี้สำคัญมาก! น้องๆ ต้องใช้ Git เป็นนะ เพราะมันคือพื้นฐานของการทำ deployment ทุกรูปแบบ Git ช่วยให้เราจัดการ code หลายๆ version ได้ง่ายๆ แถมยังช่วยให้เรา rollback กลับไป version เก่าได้ถ้าเกิดปัญหา
ลองนึกภาพว่า ถ้าเรา deploy code ใหม่แล้วระบบพัง เราก็แค่ใช้คำสั่ง git revert เพื่อย้อนกลับไป version ก่อนหน้า แค่นี้เอง! สมัยก่อนตอนที่ยังไม่มี Git นี่ลำบากมาก ต้อง copy ไฟล์ backup เก็บไว้เอง เสียเวลาสุดๆ
git commit -m "Fix: แก้ไขบัคสำคัญ"
git push origin main
Docker ก็สำคัญเหมือนกัน มันช่วยให้เรา package application ของเราพร้อมกับ dependencies ทั้งหมด แล้วเอาไปรันที่ไหนก็ได้ โดยที่ไม่ต้องกังวลว่า environment มันจะไม่เหมือนกัน
สมัยผมทำร้านเน็ตนี่ ปัญหาโลกแตกคือโปรแกรมมันรันบนเครื่อง server ได้ แต่พอย้ายไปเครื่อง client กลับรันไม่ได้ เพราะ dependencies มันไม่เหมือนกัน Docker ช่วยแก้ปัญหานี้ได้เลย
docker build -t my-app .
docker run -d -p 80:80 my-app
Load Balancer คือตัวกระจาย traffic ไปยัง server หลายๆ ตัว มันช่วยให้ระบบของเรา scale ได้ และยังช่วยให้เราทำ Blue Green deployment ได้ง่ายขึ้นด้วย เพราะเราสามารถสลับ traffic ระหว่าง environment Blue และ Green ได้ง่ายๆ
สมัยก่อนตอนที่ร้านเน็ตผมดังๆ นี่ Server ตัวเดียวรับไม่ไหว ต้องมี Load Balancer คอยช่วยกระจาย traffic ไม่งั้น Server น็อคแน่ๆ
เอาล่ะ มาถึงขั้นตอนการใช้งานจริงกันบ้าง ไม่ยากอย่างที่คิดหรอก น้องๆ ค่อยๆ ทำตามไปทีละขั้นตอนนะ
ดูวิดีโอเพิ่มเติมเกี่ยวกับBlue Green Canary Deployment Guide:
แน่นอนว่า Blue Green และ Canary Deployment ไม่ใช่ทางเลือกเดียวในการ deploy code ยังมีวิธีอื่นๆ อีกมากมาย แต่ละวิธีก็มีข้อดีข้อเสียแตกต่างกันไป ลองมาดูตารางเปรียบเทียบกันหน่อย
| Deployment Strategy | ข้อดี | ข้อเสีย | ความซับซ้อน |
|---|---|---|---|
| Rolling Deployment | ง่าย, ไม่ต้องใช้ resource เพิ่ม | อาจมี downtime, rollback ยาก | ต่ำ |
| Blue Green Deployment | rollback ง่าย, downtime น้อย | ต้องใช้ resource เพิ่ม | ปานกลาง |
| Canary Deployment | ลดความเสี่ยง, ทดสอบกับลูกค้าจริงได้ | ซับซ้อน, ต้อง monitor อย่างใกล้ชิด | สูง |
| Shadow Deployment | ไม่กระทบลูกค้า, ทดสอบประสิทธิภาพได้ | ซับซ้อน, ต้องใช้ resource เพิ่ม | สูง |
น้องๆ จะเห็นว่าไม่มีวิธีไหนที่ดีที่สุด มันขึ้นอยู่กับความต้องการและ resource ที่เรามี ถ้าเป็น project เล็กๆ Rolling Deployment ก็อาจจะเพียงพอ แต่ถ้าเป็น project ใหญ่ๆ ที่มีความสำคัญมากๆ Blue Green หรือ Canary Deployment อาจจะเป็นทางเลือกที่ดีกว่า
อย่าลืมแวะไปอ่านบทความอื่นๆ ที่ SiamCafe Blog นะ มีเรื่อง IT ดีๆ อีกเยอะเลย
สมัยผมทำร้านเน็ต SiamCafe Blog นี่ไม่มีใครสอนแบบนี้หรอก ต้องลองผิดลองถูกเองหมด น้องๆ โชคดีกว่าเยอะเลยที่มี guide ดีๆ แบบนี้ให้อ่าน
เอาล่ะน้องๆ มาถึงตรงนี้ ผมว่าเราพอจะเห็นภาพรวมของการทำ Blue Green Canary Deployment กันแล้วนะ ทีนี้มาดูเคล็ดลับที่ผมสั่งสมมาจากการทำจริง สมัยผมทำร้านเน็ตฯ นี่แหละ เอาไปปรับใช้กันได้เลย
จำไว้เลยว่าเรื่องพวกนี้มันไม่ใช่สูตรสำเร็จ ต้องลองผิดลองถูกกันไป แต่ถ้ามีแนวทางที่ดี มันก็จะช่วยประหยัดเวลาและลดความเสี่ยงได้เยอะเลย
สมัยก่อนตอนทำร้านเน็ตฯ เนี่ย ผมเคยเจอเคสที่อัพเดทเกมแล้วเกมมันค้าง! เด็กๆ โวยวายกันใหญ่ กว่าจะรู้ตัวก็เสียลูกค้าไปหลายคนแล้ว
Deployment ก็เหมือนกัน ถ้าเราไม่มี Monitoring ที่ Real-time เราจะไม่รู้เลยว่า Version ใหม่มันมีปัญหาอะไรหรือเปล่า ต้องมี Dashboard ที่เห็น CPU Usage, Memory Usage, Error Rate, Response Time แบบวินาทีต่อวินาทีเลยนะ
อันนี้สำคัญมาก! น้องๆ หลายคนมักจะโฟกัสกับการทำ Deployment ให้สำเร็จ แต่ลืมคิดถึงตอนที่มัน "พัง" สมัยผมทำร้านเน็ตฯ นี่ Backup Image เป็นเรื่องสำคัญมาก! พังปุ๊บ Restore ปั๊บ
Deployment ก็เหมือนกัน ต้องมี Rollback Plan ที่ชัดเจน ถ้า Version ใหม่มีปัญหา ต้อง Rollback กลับ Version เก่าได้ภายในไม่กี่นาที ไม่งั้นลูกค้าหนีหมด!
อย่าใจร้อน! ตอนทำ Canary Release เนี่ย ค่อยๆ ปล่อย Traffic ไปทีละนิดๆ เริ่มจาก 1%, 5%, 10% แล้วค่อยๆ เพิ่มขึ้น ถ้าเจอ Error ก็ Rollback ได้ทัน
เปรียบเหมือนตอนทำน้ำจิ้มซีฟู้ด ต้องค่อยๆ ชิม ค่อยๆ ปรุง อย่าใส่พริกเยอะเกินไป เดี๋ยวจะกินไม่ได้
ทุกอย่างควรจะเป็น Automation ให้มากที่สุด ไม่ว่าจะเป็นการ Build, Test, Deploy, Rollback ทุกอย่างควรจะอยู่ใน Pipeline เดียวกัน
สมัยก่อนผมต้องมานั่งลงเกมเองทีละเครื่อง โคตรเสียเวลา! เดี๋ยวนี้มีระบบจัดการเกม Remote ได้สบายๆ Deployment ก็เหมือนกัน ต้องมี CI/CD Pipeline ที่ Automate ทุกอย่าง
Blue Green Deployment ช่วยลด Downtime และลดความเสี่ยงในการ Deployment ได้เยอะมาก! สมัยผมทำร้านเน็ตฯ เนี่ย ถ้าต้องปิดร้านเพื่ออัพเดทเกม ลูกค้าก็หายหมด Blue Green ช่วยให้เราอัพเดทได้แบบ Seamless เลย
Canary Release เหมาะกับ Project ที่ต้องการทดสอบ Version ใหม่กับ Users จริงๆ ก่อนที่จะปล่อยให้ทุกคนใช้ เหมาะกับ Feature ที่ซับซ้อน หรือ Performance ที่ต้องทดสอบจริง
Rollback Plan ที่ดีควรจะมีการ Backup Version เก่า, มี Script ในการ Rollback, มีขั้นตอนที่ชัดเจน และมีการ Test Rollback ก่อนที่จะ Deploy จริง
IaC สำคัญมาก! ช่วยให้เราจัดการ Infrastructure ได้ง่ายขึ้น ลดความผิดพลาด และทำให้ Deployment เป็น Automated มากขึ้น สมัยก่อนผมต้องมานั่ง Config Server เองทีละเครื่อง เดี๋ยวนี้ IaC ช่วยให้ชีวิตง่ายขึ้นเยอะ
นอกจาก Blue Green และ Canary Release ก็ยังมี Rolling Deployment, A/B Testing, Shadow Deployment แต่ละแบบก็มีข้อดีข้อเสียต่างกัน ต้องเลือกให้เหมาะกับ Project ของเรา
Blue Green และ Canary Deployment เป็น Strategy ที่ช่วยให้เรา Deploy Application ได้อย่างปลอดภัยและมีประสิทธิภาพ แต่ต้องเข้าใจหลักการและมี Tools ที่เหมาะสม
อย่าลืมว่าทุกอย่างต้องเริ่มจากความเข้าใจใน Business Requirement และ Technology ที่เรามี ค่อยๆ ปรับ ค่อยๆ จูน แล้วน้องๆ จะ Deploy ได้อย่าง Pro แน่นอน! ลองไปดู SiamCafe Blog เพิ่มเติมได้นะ
สุดท้ายนี้ ขอฝาก iCafeForex ไว้ในอ้อมอกอ้อมใจด้วยนะครับ เผื่อใครสนใจเรื่อง Forex