Dịch vụ Auto Scaling Production trên Titus

1556
29-10-2021
Dịch vụ Auto Scaling Production trên Titus

Trong ba năm qua, Netflix đã đầu tư vào công nghệ container. Một phần lớn của khoản đầu tư này là xoay quanh Titus - nền tảng quản lý container của Netflix được mở mã nguồn vào tháng 4 năm 2018. Titus lập lịch trình các container ứng dụng được chạy trên một nhóm hàng nghìn tiến trình.

Ban đầu Titus tập trung vào việc hỗ trợ các ứng dụng đơn giản và workload có một số yêu cầu hạn chế về tính năng và yêu cầu khả dụng. Khi một số nhóm nội bộ xây dựng microservices muốn áp dụng các container, Titus bắt đầu xây dựng hỗ trợ lập lịch cho các ứng dụng dịch vụ. 

Tuy nhiên, các dịch vụ hỗ trợ, đặc biệt là những dịch vụ dành cho khách hàng quan trọng, đòi hỏi Titus phải cung cấp một loạt các tính năng sẵn sàng sản xuất hơn nhiều. Gần một thập kỷ trước kể từ khi Netflix chuyển lên Cloud, các microservice đã được xây dựng và tận dụng mạnh mẽ lợi thế của "đám mây" cũng như các dịch vụ cơ sở hạ tầng nội bộ của Netflix. Sau đó, tập hợp các tính năng được một dịch vụ nội bộ sử dụng đã đẩy lên rằng liệu dịch vụ đó có thể thúc đẩy Titus hay không.

Dịch vụ Auto Scaling Production trên Titus - Ảnh 1.

Một trong những tính năng dịch vụ được sử dụng phổ biến nhất là tự động mở rộng quy mô (auto scaling). Nhiều microservice được xây dựng để có thể mở rộng theo chiều ngang và tận dụng Auto Scaling để tự động thêm hoặc xóa các tiến trình khi workload thay đổi. Ví dụ: khi mọi người ở bờ biển phía đông của Hoa Kỳ đi làm về và bật Netflix, các dịch vụ sẽ tự động mở rộng quy mô để đáp ứng nhu cầu này. 

Mở rộng quy mô linh hoạt theo nhu cầu thay vì thiết lập cố định giúp đảm bảo rằng các dịch vụ có thể tự động đáp ứng nhiều dạng lưu lượng truy cập mà chủ sở hữu dịch vụ không cần định cỡ và lập kế hoạch công suất mong muốn. Ngoài ra, tính năng mở rộng quy mô linh hoạt cho phép sử dụng các tài nguyên đám mây không cần thiết cho các mục đích khác, chẳng hạn như mã hóa nội dung mới.

Khi các dịch vụ bắt đầu xem xét việc tận dụng các container và Titus, việc Titus thiếu tính năng tự động mở rộng quy mô đã trở thành một rào cản lớn hoặc trở ngại cho việc áp dụng. Trong khoảng thời gian nghiên cứu xây dựng giải pháp của riêng mình, chúng tôi đã hợp tác với một đơn vị Auto Scaling để mô tả trường hợp của chúng tôi. Các cuộc thảo luận giúp thiết kế tính năng Auto Scaling mới cho phép cùng một công cụ điều chỉnh tỷ lệ tự động hỗ trợ các dịch vụ như Auto Scaling và DynamoDB để cung cấp khả năng tự động mở rộng quy mô trong một hệ thống bên ngoài của Cloud như Titus.

Thiết kế này tập trung vào công cụ Auto Scaling có thể tính toán công suất mong muốn cho dịch vụ Titus, chuyển tiếp thông tin công suất đó cho Titus và để Titus điều chỉnh công suất bằng cách khởi chạy các container mới hoặc chấm dứt các container hiện có. Có một số lợi thế cho cách tiếp cận này. 

  • Đầu tiên, Titus đã có thể tận dụng cùng một công cụ auto scaling đã được chứng minh cung cấp năng lượng thay vì phải xây dựng công cụ của riêng chúng tôi. 
  • Thứ hai, người dùng Titus sẽ được sử dụng cùng các chính sách Target Tracking và Step Scaling mà họ đã quen thuộc. 
  • Thứ ba, các ứng dụng có thể mở rộng quy mô dựa trên cả các chỉ số của riêng chúng, chẳng hạn như yêu cầu mỗi giây hoặc mức sử dụng container CPU, bằng cách xuất bản chúng lên CloudWatch cũng như các chỉ số cụ thể, chẳng hạn như độ sâu hàng đợi SQS. 
  • Thứ tư, người dùng Titus sẽ được hưởng lợi từ các tính năng và cải tiến tự động mở rộng mới.

Thách thức chính là kích hoạt công cụ Auto Scaling để gọi lệnh cho control plane Titus đang chạy trong tài khoản Cloud của Netflix. Để giải quyết vấn đề này, chúng tôi đã sử dụng API Gateway, một dịch vụ cung cấp một "front door" API có thể truy cập được mà Cloud và một backend có thể gọi lệnh Titus. 

Dịch vụ Auto Scaling Production trên Titus - Ảnh 2.

API Gateway cho thấy một API chung cho Cloud sử dụng để điều chỉnh dung lượng tài nguyên và nhận trạng thái dung lượng đồng thời cho phép triển khai backend có thể cắm thêm của các tài nguyên đang được mở rộng, chẳng hạn như các dịch vụ trên Titus. Khi chính sách auto scaling được cấu hình trên dịch vụ Titus, Titus sẽ tạo một mục tiêu có thể mở rộng mới bằng công cụ Auto Scaling. Mục tiêu này được liên kết với Titus Job ID đại diện cho dịch vụ và API Gateway endpoint URL an toàn mà công cụ Auto Scaling có thể sử dụng. API Gateway "front door" được bảo vệ thông qua các Service Linked Roles và backend sử dụng Mutual TLS để giao tiếp với Titus.

Việc cấu hình auto scaling cho dịch vụ Titus hoạt động như sau: Một người dùng tạo một ứng dụng dịch vụ trên Titus, trong ví dụ này là sử dụng Spinnaker, hệ thống phân phối liên tục của Netflix. Hình bên dưới cho thấy việc cấu hình chính sách Target Tracking cho ứng dụng Node.js trên giao diện người dùng Spinnaker.

Cấu hình chính sách Spinnaker cũng xác định chỉ số nào sẽ chuyển tiếp tới CloudWatch và cài đặt cảnh báo CloudWatch. Titus có thể chuyển tiếp các chỉ số tới CloudWatch bằng Atlas - hệ thống đo từ xa của Netflix. Những chỉ số này bao gồm những chỉ số do ứng dụng tạo ra và những chỉ số hệ thống cấp container do Titus thu thập. Khi các chỉ số được chuyển tiếp tới Atlas, bao gồm thông tin liên kết chúng với dịch vụ của Titus Job ID và liệu Atlas có nên chuyển tiếp chúng tới CloudWatch hay không.

Khi người dùng đã chọn cài đặt chính sách trên Spinnaker, Titus sẽ liên kết dịch vụ với một tài nguyên có thể mở rộng mới trong công cụ Auto Scaling. Quá trình này được hiển thị trong hình bên dưới. Titus cấu hình cả chính sách Auto Scaling và cảnh báo CloudWatch cho dịch vụ. Tùy thuộc vào loại chính sách mở rộng, trong trường hợp chính sách Target Tracking Titus có thể tạo cảnh báo CloudWatch một cách rõ ràng hoặc Cloud có thể tự động làm điều đó.

Khi các ứng dụng dịch vụ chạy trên Titus phát ra các chỉ số, AWS sẽ phân tích các chỉ số để xác định xem các ngưỡng cảnh báo của CloudWatch có đang bị vi phạm hay không. Nếu ngưỡng cảnh báo đã bị vi phạm, AWS sẽ kích hoạt các hành động mở rộng quy mô liên quan của cảnh báo. Những hành động này dẫn đến các cuộc gọi đến các điểm cuối API Gateway đã định cấu hình để điều chỉnh số lượng phiên bản. Titus đáp ứng những lời kêu gọi này bằng cách tăng hoặc giảm công việc cho phù hợp. AWS giám sát cả kết quả của các yêu cầu mở rộng này và cách các chỉ số thay đổi.

Việc cung cấp tính năng auto scaling cho phép người dùng Titus cấu hình các chính sách mở rộng giống như cách họ thực hiện trên Cloud áp dụng đơn giản hóa rất nhiều. Thay vì kết hợp việc áp dụng các container với công nghệ auto scaling mới, Titus đã có thể cung cấp các lợi ích của việc sử dụng các container với công nghệ auto scaling đã được thử nghiệm mà người dùng và các công cụ của họ đã nắm rõ. 

Chúng tôi đã theo cùng một mô hình tận dụng công nghệ Cloud hiện có thay vì xây dựng công nghệ của riêng chúng tôi cho một số tính năng của Titus, chẳng hạn như mạng, nhóm bảo mật và cân bằng tải. Ngoài ra, tính năng auto scaling đã thúc đẩy các cải tiến về tính khả dụng của Titus để đảm bảo nó có thể thực hiện các điều chỉnh dung lượng trực tuyến nhanh chóng. Ngày nay, tính năng này hỗ trợ các dịch vụ mà nhiều khách hàng Netflix tương tác hàng ngày.

Cho đến ngày nay, Titus đã tận dụng chức năng này như một tính năng riêng biệt. Ngoài các nền tảng quản lý container như Titus, bất kỳ tài nguyên nào cần mở rộng quy mô, như cơ sở dữ liệu hoặc cơ sở hạ tầng dữ liệu lớn, đều có thể tận dụng Auto Scaling. Ngoài việc giúp thúc đẩy chức năng chính cho Titus, sự kết hợp của Netflix với Auto Scaling đã mang lại các tính năng mới cho các khách hàng.

SHARE