Introducing Grab-Kit: Distributed Service Design at Grab

Bài tóm tắt Grab 2018 3. Quy mô lớn Độ khó: Trung bình

Grab · 2018 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bối cảnh

Sau khi tách monolith thành microservices, Grab gặp bài toán mới: tăng trưởng theo cấp số nhân mà vẫn giữ được sự nhất quán. Các service có API, SDK, xử lý lỗi, transport khác nhau; log mỗi nơi một định dạng; không truy được một request đi qua đâu; dashboard thì làm tay và nhanh lỗi thời.

Thay đổi chính

Grab-Kit: framework dựng microservice Go, lấy cảm hứng từ Go-Kit nhưng thêm sinh code tự động. Phát hành 11/2017.

  • File .proto là nguồn sự thật duy nhất: grab-kit create <service> sinh file proto, từ đó sinh boilerplate, DTO và binding protobuf.
  • Middleware chung cho mọi client: logging, circuit breaker, stats, panic recovery, profiling, caching. Metric và log có sẵn; ở chế độ dev tự bật CPU profile và trace cho từng endpoint.
  • Dashboard tự sinh: mỗi thư viện khai báo metric trong metrics.yaml; lệnh grab-kit dash gọi API DataDog để tạo hoặc cập nhật dashboard cho service và các phụ thuộc phía trên.
  • Có sẵn: xác thực/phân quyền, throttling, load balancing phía client.

Vì sao

Theo Grab: để kỹ sư tập trung vào business logic thay vì viết boilerplate, khởi tạo thư viện, dựng dashboard và cảnh báo. Họ dẫn kết quả: GrabFood tiết kiệm tới 70% thời gian dựng service mới; độ ổn định và availability được cải thiện (không có số cụ thể).

Bài học cho SWE

  • Tách microservices xong mà không có "đường ray" chung thì mỗi team sẽ tự làm lại cùng một thứ, theo cách khác nhau.
  • Contract-first (proto) cho phép sinh code, client và tài liệu đồng bộ với nhau.
  • Đưa observability vào framework thay vì để từng team tự nhớ thêm. Twitter làm điều tương tự với Finagle + Viz/Zipkin năm 2013 (Twitter 2013).
  • Bài viết mang tính giới thiệu, ít số liệu so sánh trước/sau.

Liên quan