Journey from EC2 to Containers

Bài tóm tắt Disney Hotstar 2020 3. Quy mô lớn Độ khó: Dễ

Disney Hotstar · 2020 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc

Bối cảnh

  • Đỉnh user đồng thời: ~4,7 triệu (2017), ~10,3 triệu (IPL 2018).
  • IPL 2018 chạy trên EC2 sau ELB, AMI dựng sẵn để boot nhanh, Jenkins, Terraform. Có Auto Scaling Group nhưng không tin nó, nên scale trước các sự kiện lớn.
  • Khó khăn:
    • EC2 khởi động chậm (dù có AMI), nên phải giữ dư nhiều tài nguyên;
    • không tối ưu được CPU/RAM vì không có container;
    • chạm giới hạn số máy của một loại instance trong region;
    • bị throttle API nội bộ của AWS khi ASG scale đột ngột, nên phải scale theo từng bậc.

Thay đổi chính

  • Sau IPL 2018: chuyển 40–50 ứng dụng lõi sang container + Kubernetes (chọn vì cộng đồng và tính năng).
  • Chuẩn hoá:
    • thư viện deploy nhận config JSON và sinh ra object Kubernetes; công cụ CLI đi kèm;
    • developer không phải tự cấu hình logging (chỉ cần khai tên team, ghi log vào đường dẫn chuẩn);
    • core image cho Java, Python, Go đã có sẵn cấu hình môi trường và logging;
    • GoCD (chạy trên Kubernetes) cho CI/CD deploy một click; Vault/Consul cho secret.
  • Tính năng giá trị nhất: scale theo request (Disney Hotstar 2019).
  • Việc phải làm khi migrate: stress test lại từng ứng dụng trong môi trường mới (thread count, heap, kích thước hàng đợi của Java); tinh chỉnh auto-scaling của node và loại instance cho chi phí; scale ngang cả hệ thống monitoring.

Kết quả

  • 2019 phục vụ IPL 2019 và World Cup 2019, tới 25 triệu user đồng thời, trên khoảng 10 cluster Kubernetes tự vận hành.
  • Theo Hotstar: hạ tầng chạy kiểu "lái tự động" khi scale lên xuống trong sự kiện; thời gian đưa ứng dụng lên production ngắn hơn. Họ nói rõ là không so sánh nền tảng nói chung, chỉ là Kubernetes hợp với nhu cầu của họ.

Bài học cho SWE

  • Cloud vẫn có trần: giới hạn số máy trong region, throttle API. Đỉnh cực lớn cần khởi động nhanh hơn chứ không chỉ cần thêm máy.
  • Chuyển nền tảng là dịp chuẩn hoá (core image, thư viện deploy, logging mặc định), tức là "đường ray" chung. Xem Nền tảng nội bộ cho service (đường ray chung).
  • Đổi môi trường chạy thì phải tinh chỉnh lại hiệu năng từng ứng dụng.

Liên quan