メインコンテンツまでスキップ

Pokémon GO: Kỷ lục Scaling trên Google Kubernetes Engine (GKE)

Năm 2016, Pokémon GO ra mắt và tạo nên cơn sốt toàn cầu. Đằng sau những chú Pokemon ảo là một chiến công hạ tầng vĩ đại của Niantic và Google.

1. Thử thách "Happy Problem"

  • Dự kiến: 1x traffic.
  • Kịch bản xấu nhất (Worst case): 5x traffic.
  • Thực tế: 50x traffic chỉ trong vài ngày đầu!

Hệ thống Database và Server liên tục quá tải. Niantic phải chặn người dùng mới để cứu hệ thống.

2. Giải pháp: Google Kubernetes Engine (GKE)

Đây là dự án triển khai Kubernetes lớn nhất thế giới vào thời điểm đó.

Tại sao chọn Container & K8s?

  • Niantic cần deploy code mới liên tục để fix lỗi và thêm tính năng.
  • Họ cần tận dụng toàn bộ sức mạnh phần cứng (bin-packing) để tiết kiệm chi phí.

Chiến lược Scaling

  1. Pod Autoscaling (HPA): Tự động tăng số lượng Pod xử lý logic game khi CPU tăng cao.
  2. Cluster Autoscaling: Khi Pod tăng, Node (VM) hết chỗ. GKE tự động thêm Node mới vào cluster.
  3. Global Load Balancing: Sử dụng Google Cloud Load Balancer để phân tải traffic từ hàng trăm triệu thiết bị di động.

3. Database: Cloud Datastore (NoSQL)

Logic game (vị trí Pokemon, Gym, Pokestop) đòi hỏi ghi/đọc cực nhanh và đồng bộ.

  • Họ dùng Cloud Datastore (nay là Firestore).
  • Đây là NoSQL Database được quản lý, có khả năng Sharding tự động. Nó đã hứng chịu hàng triệu request mỗi giây mà không sập.

4. Bài học xương máu

  • Load Test là chưa đủ: Không ai dự đoán được traffic thực tế gấp 50 lần dự kiến. Hệ thống phải có khả năng scale mềm dẻo (Elasticity) thay vì cứng nhắc.
  • Hợp tác với Cloud Provider: Các kỹ sư Google đã phải vào cuộc, patch trực tiếp vào nhân Linux và mã nguồn Kubernetes để giúp Niantic chịu tải.
  • Kubernetes đã trưởng thành: Sau sự kiện này, thế giới tin rằng K8s đã sẵn sàng cho Enterprise.