Zuul là gì
Netflix là một trong số các dịch vụ streaming dựa trên lượt đăng ký tốt nhất trên thế giới, chiếm hơn 15% dung lượng băng thông Internet toàn cầu. Vào năm 2019, Netflix đã có hơn 167 triệu người đăng ký, trong đó có hơn 5 triệu người đăng ký mới mỗi quý và hoạt động tại hơn 200 quốc gia. Cụ thể, người dùng Netflix dành hơn 165 triệu giờ để xem hơn 4.000 bộ phim và 47.000 tập mỗi ngày. Những số liệu thống kê ấn tượng này cho ta thấy, từ góc độ kỹ thuật, các nhóm kỹ thuật của Netflix đã thiết kế một hệ thống phát video trực tuyến tuyệt vời với tính khả dụng và khả năng mở rộng rất cao để phục vụ khách hàng của họ dù ở bất cứ đâu trên thế giới.
Show Đội ngũ kỹ thuật Netflix đã mất hơn 8 năm để xây dựng hệ thống CNTT như bây giờ. Trên thực tế, quá trình chuyển đổi cơ sở hạ tầng tại Netflix bắt đầu từ tháng 8 năm 2008, sau khi họ ngừng dịch vụ tại các trung tâm dữ liệu của chính hãng, đóng toàn bộ dịch vụ cho thuê DVD trong ba ngày. Netflix nhận ra rằng họ cần một cơ sở hạ tầng đáng tin cậy hơn và hạn chế tối đa điểm lỗi. Do đó, họ đã đưa ra hai quyết định quan trọng: Chuyển cơ sở hạ tầng từ các trung tâm dữ liệu của mình sang 1 public cloud, thay thế các chương trình monolithic (nguyên khối) bằng kiến trúc microservices. Cả hai quyết định này đã trực tiếp định hình thành công ngày nay của Netflix. Netflix đã chọn cloud AWS để dịch chuyển hạ tầng. AWS có thể cung cấp cơ sở dữ liệu (CSDL) có độ tin cậy cao, lưu trữ cloud quy mô lớn và có nhiều trung tâm dữ liệu trên toàn cầu. Bằng cách sử dụng hạ tầng đám mây do AWS xây dựng và duy trì, Netflix không cần thực hiện công việc đơn lẻ, tốn kém như xây dựng trung tâm dữ liệu vật lý. Họ tập trung nhiều hơn vào hoạt động kinh doanh cốt lõi của mình là cung cấp trải nghiệm người dùng khi xem video trực tuyến chất lượng cao. Mặc dù phải xây dựng lại toàn bộ công nghệ để có thể chạy trơn tru trên cloud AWS, nhưng bù lại, việc cải thiện khả năng mở rộng và tính khả dụng của dịch vụ, Netflix đã thu được lợi nhuận đáng kể. Netflix cũng là một trong những công ty đầu tiên sử dụng thành công kiến trúc microservices. Microservices nhắm vào các vấn đề của thiết kế phần mềm nguyên khối bằng phương pháp “separation of concerns” trong đó các chương trình lớn được chia thành các thành phần mềm nhỏ hơn theo mô đun, với việc tự đóng gói dữ liệu. Microservices cũng giúp tăng khả năng mở rộng thông qua chia tỷ lệ theo chiều ngang và phân vùng khối lượng công việc. Bằng cách áp dụng microservices, các kỹ sư của Netflix dễ dàng thay đổi các dịch vụ giúp triển khai nhanh hơn. Ngoài ra, họ có thể theo dõi hiệu suất của từng dịch vụ và nhanh chóng giải quyết, cô lập các vấn đề dịch vụ đó với các dịch vụ đang chạy khác. Trong bài viết này, ta sẽ tìm hiểu kiến trúc cloud của Netflix và hiệu suất của nó trong các khối lượng công việc và giới hạn mạng khác nhau. Cụ thể, bài viết sẽ phân tích thiết kế hệ thống về tính khả dụng, độ trễ, khả năng mở rộng và khả năng phục hồi đối với sự cố mạng hoặc sự cố hệ thống. Nội dung chính cuẩ các phần như sau:
2. Kiến trúc Cloud của NetflixNetflix hoạt động dựa trên các dịch vụ điện toán đám mây của Amazon (AWS) và Open Connect – mạng phân phối nội dung nội bộ của AWS. Cả hai hệ thống phải hoạt động liền mạch với nhau để cung cấp dịch vụ streaming chất lượng cao trên toàn cầu. Từ góc độ kiến trúc phần mềm, Netflix được cấu tạo bởi ba phần chính: Client, Backend và Content Delivery Network (CDN). Client là bất kỳ trình duyệt nào được hỗ trợ trên máy tính xách tay, máy tính để bàn hoặc ứng dụng Netflix trên điện thoại thông minh, TV thông minh. Netflix phát triển ứng dụng iOS và Android của riêng mình để cung cấp trải nghiệm xem tốt nhất cho từng khách hàng và thiết bị. Bằng cách kiểm soát các ứng dụng và các thiết bị khác của họ thông qua SDK, Netflix có thể điều chỉnh các dịch vụ phát trực tuyến của mình một cách minh bạch trong một số trường hợp nhất định như mạng chậm hoặc máy chủ quá tải. Backend bao gồm các dịch vụ, CSDL, kho lưu trữ chạy hoàn toàn trên đám mây AWS. Backend về cơ bản xử lý mọi thứ không liên quan đến streaming. Một số thành phần của Backend với các dịch vụ AWS tương ứng của chúng được liệt kê như sau:
Open Connect CDN là một mạng lưới các server gọi là Open Connect Appliances (OCAs), được tối ưu hóa để lưu trữ và phát trực tuyến các video dung lượng lớn. Các máy chủ OCA được đặt bên trong nhà cung cấp dịch vụ internet (ISP) và các mạng lưới địa điểm trao đổi internet (IXP) trên khắp thế giới. OCA chịu trách nhiệm streaming tới khách hàng. Trong các phần tiếp theo, tôi sẽ mô tả một tham chiếu về kiến trúc đám mây Netflix bao gồm 3 phần trên. Trong phần 2.1, một kiến trúc tổng thể có khả năng phát trực tuyến video, được gọi là kiến trúc Playback, sau khi người đăng ký nhấp vào nút Play trên ứng dụng của họ. Sau đó, trong phần 2.2, một kiến trúc microservices chi tiết hơn của Backend sẽ được mô tả để chứng minh cách Netflix xử lý tính khả dụng và khả năng mở rộng ở quy mô toàn cầu. 2.1 Kiến trúc PlaybackKhi người đăng ký nhấp vào nút Play trên ứng dụng hoặc thiết bị của họ, cả Backend trên AWS và OCA trên Netflix CDN sẽ cùng hoạt động để phát video trực tuyến. Sơ đồ sau minh họa cách thức hoạt động của quá trình phát lại:
Trong sơ đồ trên, Steering service, Playback Apps và Cache Control service chạy hoàn toàn trong đám mây AWS dựa trên kiến trúc microservices. Trong phần tiếp theo, tôi sẽ mô tả một tham chiếu về kiến trúc microservices Netflix Backend giúp tăng tính khả dụng và khả năng mở rộng của các dịch vụ đang chạy 2.2 Kiến trúc BackendNhư đã đề cập trong phần trước, Backend xử lý hầu hết mọi thứ, từ đăng ký, đăng nhập, thanh toán đến các tác vụ xử lý phức tạp hơn như chuyển mã video và đề xuất được cá nhân hóa. Để hỗ trợ cả khối lượng công việc nhẹ và nặng chạy trên cùng một hạ tầng cơ bản, Netflix đã chọn kiến trúc microservices cho hệ thống dựa trên đám mây của họ. Sơ đồ dưới đây đại diện cho một kiến trúc microservices có thể có tại Netflix mà tôi đã lấy từ một số nguồn trực tuyến: Hình 2 . Tham khảo kiến trúc phụ trợ dựa trên nhiều nguồn khác nhau
Các kiến trúc được mô tả giúp ta hiểu về cách các phần khác nhau sắp xếp và hoạt động cùng nhau để streaming. Tuy nhiên, để phân tích tính khả dụng và khả năng mở rộng của kiến trúc, ta cần đi sâu hơn vào từng thành phần quan trọng để xem nó hoạt động như thế nào trong các khối lượng công việc khác nhau. 3. Thành phầnTrong phần này, ta sẽ xem xét các thành phần đã được xác định tại Mục 2, để phân tích tính khả dụng và khả năng mở rộng của nó. Khi miêu tả mỗi thành phần, tôi sẽ đồng thời miêu tả cách nó đáp ứng các mục tiêu thiết kế này. Phân tích thiết kế chuyên sâu hơn cũng sẽ được đề cập trong các phần tiếp theo liên quan tới toàn bộ hệ thống. 3.1 Khách hàngĐội ngũ kỹ thuật của Netflix đã rất nỗ lực trong việc phát triển các ứng dụng chạy nhanh hơn và thông minh hơn trên laptop, máy tính bàn hoặc các thiết bị di động. Ngay cả trên một số TV thông minh mà Netflix không xây dựng ứng dụng dành cho khách chuyên biệt, Netflix vẫn kiểm soát hiệu suất của nó thông qua SDK được cung cấp. Trên thực tế, bất kỳ môi trường thiết bị nào cũng cần cài đặt Netflix Ready Devive Platform (NRDP) để mang lại trải nghiệm xem Netflix tốt nhất có thể. Một thành phần cấu trúc khách hàng điển hình ([11]) được minh họa trong Hình 3. Hình 3. Client App Component
3.2 Backend3.2.1 API Gateway ServiceThành phần API Gateway Service kết nối với AWS Load Balancers để giải quyết tất cả các yêu cầu của khách hàng. Thành phần này có thể được triển khai cho nhiều AWS EC2 instances trên các khu vực khác nhau để tăng tính khả dụng của dịch vụ Netflix. Sơ đồ trong Hình 4 đại diện cho một Zuul nguồn mở, một triển khai của API Gateway do nhóm Netflix tạo ra. Hình 4. Zuul Gateway Service Component
3.2.2 API Ứng dụngAPI ứng dụng đóng vai trò của một lớp điều phối đối với các dịch vụ vi mô của Netflix. API cung cấp một logic tạo các yêu cầu tới các dịch vụ vi mô cơ bản theo thứ tự cần thiết, với dữ liệu bổ sung từ các kho dữ liệu khác để tạo ra các phản hồi thích hợp. Đội ngũ Netflix đã dành rất nhiều thời gian để thiết kế thành phần API ứng dụng vì nó tương thích với các chức năng kinh doanh cốt lõi của Netflix. Nó cũng cần có khả năng mở rộng, khả dụng cao với khối lượng yêu cầu lớn. Hiện tại, API ứng dụng được xác định theo ba danh mục: Signup API cho các yêu cầu không phải thành viên như đăng ký, thanh toán, dùng thử miễn phí, v.v., Discovery API để tìm kiếm, yêu cầu đề xuất và Play API để phát trực tuyến, xem yêu cầu cấp phép. Sơ đồ thành phần cấu trúc chi tiết của API Ứng dụng được cung cấp trong Hình 5. Hình 5. Separation of Play and Discovery Application API
Vì API Ứng dụng phải xử lý khối lượng yêu cầu khổng lồ và xây dựng các phản hồi thích hợp, nên quá trình xử lý nội bộ của nó cần phải chạy song song. Đội ngũ Netflix đã tìm thấy sự kết hợp giữa thực thi đồng bộ và I/O không đồng bộ là cách tiếp cận phù hợp. Hình 6. Synchronous Execution & Asynchronous I/O of Application API
3.2.3 MicroservicesTheo định nghĩa của Martin Fowler, “Microservices là một tập hợp các dịch vụ nhỏ, mỗi dịch vụ chạy trong quy trình riêng và giao tiếp với các cơ chế nhẹ…”. Các chương trình nhỏ này có thể triển khai độc lập hoặc có thể nâng cấp đối với những chương trình khác và có dữ liệu được đóng gói riêng. Việc triển khai thành phần microservice tại Netflix ([11]) được minh họa trong Hình 7. Hình 7. Structural component of a microservice
3.2.4 Lưu trữ dữ liệuKhi di chuyển cơ sở hạ tầng sang đám mây AWS, Netflix đã sử dụng các kho dữ liệu khác nhau (Hình 8), cả SQL và NoSQL, cho các mục đích khác nhau ([6]). Fig 8. Netflix Data Stores deployed on AWS
3.2.5 Stream Processing PipelineStream Processing Data Pipeline ([14,3]) đã trở thành xương sống dữ liệu của Netflix trong các nhiệm vụ phân tích kinh doanh và đề xuất được cá nhân hóa. Nó chịu trách nhiệm sản xuất, thu thập, xử lý, tổng hợp và chuyển tất cả các sự kiện vi dịch vụ sang các bộ xử lý dữ liệu khác trong thời gian gần thực. Hình 9 cho thấy các phần khác nhau của nền tảng. Hình 9. Keystone Stream Processing Platform at Netflix
3.3 Open ConnectOpen Connect là mạng phân phối nội dung toàn cầu (CDN) chịu trách nhiệm lưu trữ và phân phối các chương trình truyền hình và phim Netflix cho người đăng ký trên toàn thế giới. Netflix đã xây dựng và vận hành Open Connect một cách hiệu quả bằng cách đưa nội dung mà mọi người muốn xem đến gần nơi họ muốn xem nhất có thể. Để bản địa hóa lưu lượng xem video Netflix vào mạng của khách hàng, Netflix đã hợp tác với Nhà cung cấp dịch vụ Internet (ISP) và Điểm trao đổi Internet (IX hoặc IXP) trên toàn thế giới để triển khai các thiết bị chuyên dụng có tên Open Connect Appliances (OCA) bên trong mạng của họ ([7]). Hình 10. Deployment of OCAs to IXs or ISPs sites OCA là các máy chủ được tối ưu hóa để lưu trữ và phát trực tuyến các tệp video lớn từ các trang web IX hoặc ISP trực tiếp đến trang chủ của người đăng ký. Các máy chủ này báo cáo định kỳ các tuyến đường tối ưu về chỉ số sức khỏe mà chúng học được từ mạng IXP/ISP và những video nào chúng lưu trữ trên đĩa SSD của mình cho các dịch vụ Open Connect Control Plane trên AWS. Đổi lại, các dịch vụ mặt phẳng điều khiển sẽ lấy dữ liệu đó để tự động hướng các thiết bị khách đến các OCA tối ưu nhất dựa trên tính khả dụng của tệp, tình trạng máy chủ và mức độ gần gũi của mạng với các máy khách. Các dịch vụ máy bay điều khiển cũng kiểm soát hành vi điền của việc thêm tệp mới hoặc cập nhật tệp trên OCA hàng đêm. Các hành vi lấp đầy ([8,9]) được minh họa trong Hình 11.
Về VTI CloudVTI Cloud tự hào là Advanced Consulting Partner của AWS và Gold Partner của Microsoft nhằm đem đến sức mạnh của Điện toán đám mây và các dịch vụ CNTT hàng đầu đến với các tổ chức, doanh nghiệp tại thị trường Việt Nam và Nhật Bản. VTI Cloud sở hũu đội ngũ hơn 50+ kỹ sư về giải pháp được chứng nhận bởi AWS, cùng đội ngũ giàu kinh nghiệm với hàng trăm dự án lớn. Xây dựng các kiến trúc an toàn, hiệu suất cao, linh hoạt, và tối ưu chi phí cho khách hàng là nhiệm vụ hàng đầu của VTI Cloud trong sứ mệnh công nghệ hóa doanh nghiệp. |