Netflix เป็นผู้นำด้านการให้บริการ Streaming มีลูกค้ามากกว่า 200 ล้านคน กว่า 190 ประเทศทั่วโลก
ความสำเร็จของ Netflix ส่วนหนึ่งมาจากความเชี่ยวชาญด้านเทคโนโลยี ซึ่งรวมไปถึงการนำ Microservices Architecture เข้ามาปรับใช้ เราจะมาเล่าให้ฟังว่าทำไม Netflix ถึงตัดสินใจเปลี่ยนจาก Monolithic เป็น Microservices พร้อมทั้งยกตัวอย่างการประยุกต์ใช้ Microservice จากบริษัท Netflix ให้ฟังกัน
Table of Contents
ทำไม Netflix ถึงมองว่า Monolithic ไม่เวิร์ก?
ในปี 2009 Netflix ประสบปัญหาจากการทำงานบน Monolithic Architecture เนื่องจาก Monolithic นั้นคือการออกแบบและพัฒนาซอฟแวร์ ที่รวมทุกส่วนเอาไว้ใน Environmant เดียวกัน เหมาะสำหรับระบบที่ไม่มีความซับซ้อนและไม่ต้องเปลี่ยนแปลงโครงสร้างหลักบ่อยๆ แต่เมื่อฐานผู้ใช้ของ Netflix ขยายตัวอย่างรวดเร็ว ระบบแบบ Monolithic ก็เริ่มแสดงข้อจำกัด อย่างเช่น
- Scalability Constraints: ระบบแบบ Monolithic ประสบปัญหาในการจัดการกับจำนวนผู้ใช้ที่เพิ่มขึ้นและความต้องการในการสตรีมวิดีโอคุณภาพสูงที่มากขึ้น
- Development Bottlenecks: การเปลี่ยนแปลงหรือการอัปเดตใด ๆ จำเป็นต้องมีการปรับแอปพลิเคชันใหม่ทั้งหมด ซึ่งใช้เวลานานและมีความเสี่ยง
- Limited Agility: การนำเสนอบริการใหม่ๆ เป็นเรื่องยากเนื่องจากระบบแบบ Monolithic การเปลี่ยนแปลงใดๆ จะมีผลกระทบต่อระบบอื่นๆ
- Resilience Concerns: ถ้าส่วนใดส่วนหนึ่งของแอปพลิเคชันเกิดล้มเหลว จะทำให้ระบบทั้งหมดล่มไปด้วย
อยาก Scale Up ไว Microservice คือคำตอบ!
เพื่อแก้ปัญหาจากระบบ Monolithic Netflix ตัดสินใจที่จะนำ Microservices Architecture มาปรับใช้ โดย Microservices คือการพัฒนาระบบที่แยกเป็นหลายๆ Service เพื่อเพิ่มประสิทธิภาพในการพัฒนาและปรับปรุง ซึ่งแต่ละ Service จะทำงานอิสระต่อกัน โดยมีการเชื่อมต่อกันผ่านระบบ API หรือ Protocol ต่างๆ วิธีการนี้แยกแอปพลิเคชันแบบ Monolithic ออกเป็นหลายร้อย Microservice แต่สามารถทำงานได้อย่างอิสระตามฟังก์ชันของตนได้ และนี่คือประโยชน์ที่ได้จากการใช้ Microservice
- Selective Scaling: Netflix สามารถขยาย Service แต่ละตัวตามความต้องการได้ เช่น ในช่วงที่มีการใช้งานสูง สามารถขยาย Service ได้อย่างอิสระโดยไม่ส่งผลกระทบต่อ Service อื่นๆ ทำให้มีความพร้อมในการใช้งานและมีประสิทธิภาพสำหรับผู้ใช้ทั่วโลก
- Independent Components: แต่ละ Service ทำงานแยกกันทำให้เมื่อมีข้อผิดพลาดขึ้นไม่ส่งผลกระทบต่อระบบโดยรวม ทำให้มั่นใจได้ว่าเราสามารถควบคุมและแก้ปัญหาได้
- Faster Time to Market: การแยกเป็นแต่ละ Service ทำให้ทีมพัฒนาของ Netflix สามารถทำงานพร้อมกันในฟีเจอร์ที่ต่างกันได้ ทำให้การอัพเดทและปล่อยฟีเจอร์ใหม่ทำได้เร็วมากขึ้น จึงทำให้ Netflix สามารถตอบสนองความต้องการของตลาดและผู้ใช้งานได้อย่างรวดเร็ว
- Technological Flexibility: Microservices ทำให้มีความยืดหยุ่นในการทดลองกับ Technology และ Frameworkใหม่ๆใน Service ที่ต่างกัน ความคล่องตัวนี้ทำให้เกิด Innovation ใหม่ๆที่ Netflix และช่วยให้ Netflix ปรับปรุงบริการของตนได้อย่างต่อเนื่อง
- Operational Efficiency: Automation และ CI/CD ทำให้การ Deploy ของ Netflix เป็นไปอย่างเป็นระบบ ลดความเสี่ยงจาก Human Error
5 Use Case ใช้ Microservice เพื่อรองรับ 200 ล้าน User
จากประโยชน์ที่ได้จาก Microservice ทำให้บริษัทระดับโลกหันมาใช้ Microservice กันมากขึ้น เช่น Amazon ที่มีมากถึง 1,000 Microservice ส่วน Netflix มี 700 Microservice และ Uber มี 500 Microservice เพื่อให้เห็นภาพชัดเจนยิ่งขึ้นเกี่ยวกับประโยชน์ของการที่ Netflix นำ Microservice มาใช้ เราจะนำเสนอตัวอย่างการประยุกต์ใช้ Microservice Architecture ของ Netflix ดังนี้
- Decoupling Services: แบ่งระบบ Monolithic ออกเป็น Microservice ย่อยๆ เพื่อให้สามารถจัดการได้ง่ายขึ้น โดยแต่ละ Microservice จะถูกออกแบบมาให้จัดการกับ Specific Function นั้นๆ เช่น User Authentication, Content Recommendation, Streaming และ Billing ซึ่งทำให้แต่ละ Service สามารถทำงานได้อย่างอิสระมากขึ้น
- API Gateway: ใช้ API gateway เช่น Zuul เพื่อจัดการการสื่อสารระหว่าง Client และ Microservice โดย API Gateway จะทำหน้าที่เป็น Single Entry Point ส่งคำขอไปยัง Microservice วิธีการนี้ทำให้สามารถโต้ตอบกับ Client ได้ง่ายและความปลอดภัย
- Service Discovery: Netflix ได้ประยุกต์ใช้เครื่องมือ Service Discovery ที่ชื่อว่า Eureka ซึ่งเป็น Client-Server Model โดยจะมี Eureka Servers และ Eureka Clients หลายตัว ในระบบนี้ Clients จะทำการ Registry กับ Servers และ Servers จะทำหน้าที่หา Endpoint ในการเชื่อมต่อของ Clients ทำให้การสื่อสารระหว่าง Services เป็นไปอย่างไร้รอยต่อ (Seamless Inter-Service Communication) Eureka จึงมีบทบาทสำคัญในการทำให้ระบบสามารถทำงานได้อย่างมีประสิทธิภาพ
- Fault Tolerance and Resilience: Netflix ใช้ Tool ที่ชื่อ Hystix สำหรับ Circuit Breaking ซึ่งจะช่วยเราในด้านการจัดการตรวจสอบ Service ว่ายังคงสามารถพร้อมให้บริการอยู่ไหม หรือ หาก Service นั้นยังไม่พร้อมให้บริการจะทำการป้องกันไม่ให้ Request นั้นๆเข้ามา จนกว่าบริการนั้นๆ จะกลับมาเป็นปกติ
- Event-Driven Communication: Netflix ใช้ Apache Kafka ทำหน้าที่ในการรับ Message จากต้นทาง เก็บรักษาไว้ตามลำดับที่รับ Message เข้ามา และเปิดให้ปลายทาง มาหยิบ Message ออกไปตามลำดับที่กำหนดไว้
การเปลี่ยนแปลงของ Netflix ไปสู่ Microservice เป็นตัวอย่างที่แสดงให้เห็นถึงความสำคัญของ Microservice Architecture โดยการแบ่ง Monolithic Architecture ออกเป็น Microservice ย่อยๆ ทำให้บริษัทมีความสามารถในการขยายตัว มีความยืดหยุ่น และ มีความคล่องตัวมากขึ้น การเปลี่ยนไปสู่ Microservice ทำให้ Netflix มอบประสบการณ์การสตรีมมิ่งคุณภาพสูงและไร้รอยต่อให้กับผู้ใช้หลายล้านคนทั่วโลกได้ จนกลายมาเป็นผู้นำในอุตสาหกรรมบันเทิง และนี่เป็นอีกหนึ่งกรณีศึกษาของ Netflix ที่นำเสนอแนวทางสำหรับการนำ Microservice มาใช้จนสำเร็จ
ในการเปลี่ยนระบบจาก Monolithic ไป Microservices นั้น จะต้องคำนึงถึงสิ่งต่าง ๆ มากมาย เช่น การเตรียม Environment, ขั้นตอนการ Deploy ฯลฯ ซึ่งการที่จะเปลี่ยนเป็น Microservices นั้นไม่ใช่เรื่องง่ายเลย ทีมที่จะเปลี่ยนจะต้องมีความรู้ความเข้าใจ Microservices เป็นอย่างดี ซึ่งวิธีที่จะเริ่มเปลี่ยนระบบนั้นก็มีมากมาย ไม่ว่าจะเป็นการว่าจ้างผู้ที่มีความรู้อยู่แล้ว การปรึกษาผู้ที่ทำ Microservices มาก่อน หรือศึกษาจากประสบการณ์ของผู้ที่ทำ Microservices มาอย่างเชี่ยวชาญก็ตาม
ขอแนะนำ เวิร์คชอปที่จะให้คุณเข้าใจอย่างถ่องแท้ว่า Microservices คืออะไร? จะเหมาะกับองค์กรของเราไหม? เอามาปรับใช้แล้วจะเวิร์กจริงหรือเปล่า? ส่วนไหนของ Microservices ที่เหมาะกับเรา หรือไม่เหมาะกับเราบ้าง? ได้ลงมือทำจริงตั้งแต่ขั้นของ Design Development ไปจนถึง Deployment