Vibie ออกแบบ live streaming server ยังไงให้ไม่ต้องปิด service เลยเมื่อแก้ไข

Siwakorn Petchuchuay
Donuts Bangkok Family
1 min readJun 18, 2019

Live streaming server เป็น server ที่เป็น persistent connection คือ connect ครั้งนึง จะต่อค้างไว้เป็นเวลานานๆ ซึ่งไม่เหมือนเว็บไซต์ ที่จะ connect แล้วตอบกลับทันที ในเวลาสั้นๆ

Assume ว่าทั้งสองระบบมี load balancing เหมือนกัน เมื่อเรา deploy สำหรับเว็บไซต์ก็คือจะไปอัพเดทระบบใน server ที่อยู่ข้างหลัง load balancer อีกทีทุกตัว และเว็บไซต์ก็จะเป็นเวอร์ชั่นอัพเดพในกระพริบตา

แต่นั่นไม่ใช่สำหรับ live streaming server เพราะ user จะ connect ค้างไว้ หากเราไป reload จะทำให้ user disconnect ทันที

เราได้ออกแบบระบบที่คล้ายๆ load balancer ที่ทำใน layer ของ application อีกที โดยควบคุมว่า server ตัวไหนเปิดใช้หรือไม่เปิดใช้ผ่าน panel

โดยการทำงานคือ เราจะมีลิสของ live streaming server ไว้ในฐานข้อมูล จากนั้น dev จะเป็นคนควบคุมสถานะว่า active หรือ inactive

Scenario #1 สมมติว่า Dev ต้องการแก้ไขระบบของ live server ตัวที่ 2 จากทั้งหมด 4 ตัว

Dev จะต้องไปตั้งสถานะ server 2 ว่า inactive(inactive ไม่ได้หมายความว่า server ถูกปิด server จริงๆ ยังคงรันอยู่) จากนั้น server ตัวนี้จะไม่ถูกเอาไปใช้ใน load balancer (ที่ควบคุมโดย API อีกที) และจำเป็นต้องรอให้ user ใช้งานจนเสร็จ จนไม่มีใครใช้อยู่เลย (ซึ่งก็คือ graceful นั่นแหละ) จึงทำการ deploy server 2 แล้วก็ทดสอบ จากนั้นตั้งสถานะ active อีกครั้ง

ซึ่งหากเราจะทำการอัพเดทระบบ ก็ทำแบบนี้วนไปเรื่อยไปๆ จนครบทุกตัว

Scenario #2 Server บางตัวเกิดมีปัญหา

สิ่งที่ต้องทำคือ inactive server ตัวนั้น เพื่อจะได้ไม่เอาไปใช้ใน load balancer แล้วแก้ไข แล้ว active อีกครั้ง แต่ตอนนี้ระบบได้ถูกแก้ให้ deactivate อัตโนมัติเมื่อมีปัญหา

จริงๆ สรุปง่ายๆคือการทำ graceful reload นั่นแหละ ไม่มีอะไรมากครับ

--

--