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
.protolà 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ệnhgrab-kit dashgọ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
Được nhắc tới trong
Công ty (1)