site-logo

Netflix กระจาย Content ยังไง ?

by arnondora on March 29, 2018

ตกเย็นหลังเลิกงาน กลับบ้านมา Netflix ก็น่าจะเป็นกิจกรรมหนึ่งที่ใครหลาย ๆ คนทำกันหลังเลิกเรียน เลิกงานกันเลยละ (รวมถึงผมด้วย) อย่างที่เรารู้กันว่า Netflix เนี่ยให้บริการในหลากหลายประเทศทั่วโลก จากสถิติ Traffic ของ Netflix คิดเป็น 1 ใน 3 ของ Traffic ใน US แถม Headquarter ใหญ่ของ Netflix ก็ไม่ได้อยู่ใกล้ไทยเลยสักนิด แต่เราก็ยังสามารถดู Netflix ได้อย่างไม่สะดุด ถึงแม้เราจะดูในความละเอียดในระดับ 4K HDR เลยก็ตาม

Traditional Content Delivery

HTTP

ถ้าเรานึกถึงการ Steaming เราก็คงปฏิเสธไม่ได้เลยว่า ส่วนประกอบหลัก ๆ มันก็คือ Server ที่ถือวีดีโออยู่ใน Server เป็นจำนวนมาก กับ เครื่อง Client ที่เข้ามาเชื่อมต่อเพื่อส่ง Request เข้ามาขอวีดีโอจาก Server ไป

แต่วิธีนี้มันก็มีข้อเสียเหมือนกัน อย่างแรกคือ ถ้าเราบอกว่า ผู้ใช้เรามีไม่เท่าไหร่ Server ตัวนึงของเราก็คงป้อนข้อมูลให้กับ Client ได้สบาย ๆ อยู่แล้ว แต่ถ้าเราดันมี Client ที่เยอะมาก ๆ แล้วละก็ การขยาย Server Farm ไปเรื่อย ๆ ก็คงไม่ใช่เรื่องที่คุ้มค่าเท่าไหร่

ข้อถัดมา คนที่เล่นเกมออนไลน์น่าจะเคยสัมผัสกัน ลองสังเกตดูว่า ถ้าเราเล่นเกมออนไลน์ที่เราต้องเชื่อมต่อไป Server ในประเทศที่ไกลจากเรา Ping หรือ Latency มันจะสูงมาก ๆ จนบางทีเล่นไม่ได้เลยก็มี ทำให้เราต้องเลือกเล่นเกมออนไลน์ที่มี Server ใกล้ ๆ กับประเทศเราอย่าง สิงคโปร์ หรือในประเทศเราเองก็เช่นกัน

Latency คืออะไร ?

โดยปกติแล้ว เวลาเราจะส่งข้อมูลกันไปมา เราอาจจะคิดว่า ก็เอาความเร็วคูณด้วยขนาดแล้วตอบเลยสิ คำตอบคือ ไม่ได้ เพราะในการเชื่อมต่อจริง ๆ มันมีค่าอะไรหลายอย่างมาก ๆ

TCP Connection Scheme TCP Connection Scheme

เช่นเราจะบอกว่า เราจะเปิด TCP/IP Connection เราก็ต้องมีกระบวนการ การเปิดและปิดการเชื่อมต่อมากมาย แต่ค่านึงที่อยากให้สนใจคือ RTT หรือ Round-Trip Time คือเวลาที่ข้อมูลถูกส่งออกไปจนได้รับการยืนยันจากปลายทางแล้วว่าได้รับแล้ว ถามว่ามัน สำคัญยังไง ?

via GIPHY

ลองนึกภาพเหมือนเราเล่นเกมออนไลน์ดู ว่าเราต้องการความ Real-time มากแค่ไหน เผลอ ๆ ถ้าเล่นเกมอย่าง CS:GO ที่เป็น FPS สัก ms นึงนี่ตัดสินแพ้ชนะได้เลยนะ (ใน Pro Player อะนะ ถ้าเป็นเราคือ จะน้อยจะมากก็แพ้เหมือนเดิม 😭) ในการ Steaming ก็เช่นกันที่มันต่างจากการโหลดทั้งไฟล์เข้ามาตรงที่ ถ้าเราโหลดทั้งไฟล์เข้ามา เราก็จะดูเมื่อมันโหลดเสร็จ เพราะฉะนั้น Real-time ก็ไม่ใช่ปัจจัยที่ส่งผลในการดูเลย แต่กลับกันถ้าเรา Steaming มันก็ต้องการความ Real-time มากกว่าแน่นอน เพราะเราต้องโหลดส่วนที่อยู่ข้างหน้าที่เราดูอยู่ เพื่อให้เราดูแล้วมันสะดุดตลอดเวลา กล่าวคือ Latency นั้นมีผลต่อการ Steaming มากอยู่พอสมควรเลย

และเหตุผลสุดท้ายที่ทำให้การใช้ Server เครื่องเดียวส่งข้อมูลให้เครื่องเป็นจำนวนมากคือ Single Point of Failure หรือถ้าให้พูดง่าย ๆ คือ ถ้าล่ม ก็คือ ใช้ไม่ได้เลยนั่นเอง นึกภาพว่า เรามีเครื่อง Server เครื่องเดียว แล้วถ้าเครื่องนั้นมันเกิดล่มขึ้นมา ก็ชิบหายกันเลย ไม่มีใคร Steam อะไรได้เลยนะ เพราะ Server ตัวเดียวที่คอยป้อนไฟล์มันล่มไปแล้วนั่นเอง

Content Delivery Network (CDN)

Netflix CDN Location Netflix CDN Locations source: How Netflix Works With ISPs Around the Globe to Deliver a Great Viewing Experience

Content Delivery Network หรือ CDN จะเข้ามาเป็นพระเอกขี่ม้าขาว เข้ามาช่วยในเรื่องนี้ โดยหลักการของ CDN คือ มันจะ Cache ข้อมูลไว้บน Server ตัวอื่น ๆ หลาย ๆ ตัว เพื่อให้เวลา Client เรียกมันก็สามารถวิ่งไปหา Server ที่ใกล้ที่สุดเพื่อลด Latency ได้ และเพราะว่า CDN คือการเอา Data ไป Cache อยู่ใน Server เครื่องอื่น ๆ ทำให้ Load ของ Server หลักก็จะน้อยลง และเวลาล่ม Client ก็ยังเข้าใช้ผ่าน CDN ที่ใกล้ที่สุดได้อยู่ ทำให้ปัญหา Single Point of Failure หายไปทันควัน

ซึ่งจริง ๆ แล้ว CDN ไม่ได้ถูกนำมาใช้ใน Netflix อย่างเดียวนะ แต่ Service หลาย ๆ อย่างในปัจจุบันก็มีการใช้ CDN กันไปหมดแล้ว รวมถึงเว็บนี้ด้วยที่ทำงานอยู่บน Google CDN และ Cloudflare ที่ทำให้ถึงแม้ว่า Host ที่ผมใช้อยู่จะล่ม แต่ทุกคนก็ยังเข้าเว็บผ่าน CDN ได้อยู่ดี

กับอีกเรื่องที่สำคัญคือการ Scale ที่ Content มันถูกกระจายไปตาม Server ตลอดเวลา ทำให้ Load มันไม่กระจุกอยู่กับ Server หลักมากเกินไป ทีนี้ถ้าเราจะขยาย เราก็ไปใช้ CDN Server ที่ใหม่ซะเลย มันก็ช่วยประหยัด Cost ได้ เพราะ Cost ในการขยาย Server มันก็มีข้อจำกัดเหมือนกันทั้งในเรื่องของสถานที่ และพลังงานต่าง ๆ

แต่ Netflix อลังกว่านั้น !!

ด้วยความที่ Netflix เป็นบริการ Steaming ที่ใหญ่มาก ๆ ทั้งในเรื่องของจำนวนวีดีโอ และผู้ใช้ ทำให้ CDN ทั่ว ๆ ไปโยน Content ให้กับ Client ไม่พอแน่นอน Netflix เลยมีอะไรที่เด็ดกว่านั้นนั่นคือ Netflix Open Connect

Netflix Open Connect Netflix Open Connect

นั่นคือมันเป็น Hardware ตัวนึงที่ตั้งอยู่บน ISP หรือ Internet Service Provider เพื่อใช้สำหรับโยน Content ของ Netflix โดยเฉพาะเลย โดยที่ Hardware ตัวนี้เหมือนสมองของ Netflix เลยที่มันจะทำตัวเป็น CDN Server ที่เก็บหนังและซีรีส์ของ Netflix ทั้งหมดลงไป และพอคนต้องการจะดู มันก็จะไปดึงจาก Open Connect ตัวที่ใกล้ที่สุดมาให้

จาก Hardware ทำให้ Bandwidth ไม่ต้องปนกับ Bandwidth ของ Content อื่น ๆ อีกอย่างคือ ทำให้ Uplink Bandwidth ของ ISP ไม่เยอะมากด้วย เพราะ Content ของ Netflix มันไม่ต้องวิ่งออกจาก ISP เพราะมันโยนจากใน ISP โดยตรงเลย ก็ทำให้เร็วขึ้นอีก

ปัญหาที่น่าจะเกิดขึ้นคือ เมื่อ Client เยอะเกินจนทำให้ตัว Netflix Open Connect มันรับมือไม่ไหว วิธีง่าย ๆ คือ ก็แค่เพิ่มตัว Open Connect เข้าไปใน ISP เข้าไป ก็ทำให้รับ Bandwidth ได้มากขึ้นละ

AmazonWebservices Logo Amazon Web Services

แต่เรื่องของระบบอื่น ๆ อย่างพวก Member หรือ Recommendation ต่าง ๆ ที่ไม่ได้ใช้ Bandwidth สูงอะไรมาก ก็จะรันอยู่บน AWS หรือ Amazon Web Services ที่เป็น Cloud จากทาง Amazon ที่ทำให้ Netflix พร้อมจะทำ Scaling เมื่อ Server ตรงส่วนนี้คนใช้เยอะขึ้น

สรุป

Netflix เป็นบริการ Steaming ที่ใหญ่เป็นอันดับต้น ๆ ของโลกที่ได้รับความนิยมโคตรสูงมากในปัจจุบัน น่าจะทุก ๆ เย็นหลาย ๆ คนก็คงกลับบ้านมานอนตีพุงดู Netflix กัน แต่ถามว่า Netflix ทำยังไง ถึงสามารถทำให้คนสามารถ Steam พร้อม ๆ กันได้พร้อมกันเป็นจำนวนมากขนาดนี้ นั่นเพราะ Netflix ใช้หลักการของ CDN ในการกระจาย Content ไปตาม CDN Server ในหลาย ๆ ประเทศทั่วโลก เพื่อให้เพียงพอกับความต้องการของผู้ใช้ Netflix ทั่วโลกนั่นเอง

Share this article to social network?
Building Blazing-fast static site with Gatsby : Styling a Component EP.2Building Blazing-fast static site with Gatsby : Introduction EP.1How to Hide Your Porn and Sensitive Dataแค่จัด Inbox ให้เรียบร้อย ความสบายที่เราเลือกได้ ✉️

Leave a comment?

Name :
Comment :
Post a comment
Loading Comment(s)
FacebookTwitterGoogle+Email
© 2014-2018 Arnon Puitrakul all right reserved.Code with by @arnondora