Kratos Go framework: microservices cloud-native
Kratos là một Go framework sinh ra code server HTTP và gRPC khớp nhau chỉ từ một định nghĩa Protobuf duy nhất, thay vì bắt bạn viết tay cả hai. Đây là điểm ăn tiền của cách tiếp cận protobuf-first: định nghĩa API một lần, chạy `go generate`, rồi các stub luôn đồng bộ. Bản viết lại v3 cắt bớt dependency, biến hành vi ngầm định thành tường minh — đáng dùng cho service mới, không phải bản nâng cấp qua loa nếu bạn đang ở v2.
Kratos là gì
Kratos là một Go framework nhẹ để xây microservices cloud-native. Thay vì gộp mọi thứ vào một toolkit lớn, nó tách transport, middleware, service registry, nạp config, logging và wire encoding thành từng mảnh riêng, tùy bạn chọn dùng cái nào. Kratos dựa vào Protobuf để định nghĩa API và sinh boilerplate cho HTTP, gRPC, đồng thời dùng log/slog của standard library thay vì một logger riêng. Một hệ sinh thái contrib tách biệt bổ sung các tích hợp tùy chọn mà không làm phình core module.
Năng lực cốt lõi của Kratos
- ✓Quy trình API-first: viết một định nghĩa Protobuf duy nhất rồi sinh code server và client cho cả HTTP lẫn gRPC từ đó.
- ✓Lớp transport thống nhất, chạy song song một HTTP server và một gRPC server trong cùng một service, đúng như ví dụ usage trong README.
- ✓Chuỗi middleware kết hợp được, bao gồm recovery, logging, validation, tracing, metrics và auth.
- ✓Các thành phần registry, configuration và encoding có thể thay thế mà không phải sửa code ứng dụng.
- ✓Logging xây trên log/slog của standard library, có phần mở rộng OpenTelemetry qua các gói contrib.
- ✓Xử lý nhất quán cho metadata, errors, validation và sinh OpenAPI trên nhiều service.
- ✓Một hệ sinh thái contrib riêng cho các tích hợp tùy chọn — registry, config store, middleware, encoding, observability — được tách khỏi core module.
Khi nào nên dùng Kratos
- •Dựng một Go microservice mới cần lộ ra cả API HTTP lẫn gRPC từ một codebase.
- •Đội ngũ muốn chuẩn hóa Protobuf làm nguồn sự thật duy nhất cho hợp đồng API giữa các service.
- •Dự án muốn áp middleware như auth, tracing, metrics một cách nhất quán thay vì gắn tùy tiện theo từng handler.
- •Triển khai cloud-native cần service registry và nguồn config có thể thay thế thay vì hardcode giá trị.
Cài đặt Kratos CLI và điều kiện tiên quyết
Kratos yêu cầu Go 1.25 trở lên, cộng thêm `protoc` và `protoc-gen-go` đã cài, vì CLI sinh code từ định nghĩa Protobuf. Cài CLI bằng `go install github.com/go-kratos/kratos/cmd/kratos/v3@latest`, sau đó chạy `kratos upgrade`. Từ đó, `kratos new helloworld` dựng khung một project; `cd helloworld && go mod tidy && kratos run` khởi chạy nó, và README hướng dẫn truy cập `http://localhost:8000/helloworld/kratos` để xác nhận nó đang chạy.
Xây một service với Kratos
Với quy trình sinh service đầy đủ hơn, trình tự trong README là `kratos proto add api/helloworld/helloworld.proto`, `kratos proto client api/helloworld/helloworld.proto`, `kratos proto server api/helloworld/helloworld.proto -t internal/service`, rồi `go generate ./...` và `kratos run`. Nối service theo cách viết tay trông như sau: ```go package main import ( "github.com/go-kratos/kratos/v3" "github.com/go-kratos/kratos/v3/transport/grpc" "github.com/go-kratos/kratos/v3/transport/http" ) func main() { httpSrv := http.NewServer(http.Address(":8000")) grpcSrv := grpc.NewServer(grpc.Address(":9000")) app := kratos.New( kratos.Name("helloworld"), kratos.Version("v1.0.0"), kratos.Server(httpSrv, grpcSrv), ) if err := app.Run(); err != nil { panic(err) } } ``` Cả hai server đăng ký vào cùng một `kratos.App`, nên chỉ một lệnh gọi `Run()` là khởi động và dừng cả hai cùng lúc.
Điểm mạnh
- ✓Một định nghĩa Protobuf sinh ra cả lớp HTTP lẫn gRPC, nên hai transport không thể lệch nhau như kiểu handler viết tay trùng lặp.
- ✓Middleware cho recovery, logging, validation, tracing, metrics và auth có thể kết hợp được thay vì đóng cứng vào một stack duy nhất.
- ✓Registry, configuration và encoding có thể thay thế, không khóa cứng vào một backend.
- ✓Logging dựa trên log/slog của standard library thay vì một API logging riêng.
- ✓Hệ sinh thái contrib giữ các tích hợp tùy chọn ngoài core module, nên bạn chỉ kéo vào phần thực sự dùng.
Giới hạn và các lưu ý khi migration lên v3
- △Chuyển từ v2 lên v3 không phải kiểu thay thế trực tiếp — README nói v3 giảm dependency cốt lõi và biến hành vi trước đây ngầm định thành tường minh, đồng thời trỏ tới một hướng dẫn migration riêng mà bạn nên đọc trước.
- △Muốn sinh code gì ngoài ví dụ khởi đầu đều phụ thuộc vào việc protoc và protoc-gen-go đã cài và có trong PATH, một bước toolchain phụ mà hầu hết project Go dạng single-binary không cần tới.
- △README không kèm tài liệu API v3 đầy đủ; bạn bị dẫn ra trang docs bên ngoài và hướng dẫn migration cho bất cứ điều gì vượt quá ví dụ hello-world.
- △WeChat được liệt kê cùng Discord như một kênh cộng đồng, cho thấy đội contributor cốt lõi và các kênh hỗ trợ nghiêng về cộng đồng nói tiếng Trung.
So sánh Kratos với các Go framework khác
Câu hỏi thường gặp
Kratos là phần mềm miễn phí và mã nguồn mở, cấp phép theo MIT. Repository go-kratos/kratos trên GitHub chứa toàn bộ source code, và điều khoản MIT cho phép dùng thương mại, sửa đổi và phân phối lại mà không cần trả phí license.
Kratos yêu cầu Go 1.25 trở lên, theo yêu cầu cài đặt của dự án. Bạn cũng cần cài protoc và protoc-gen-go cùng phiên bản Go đó, vì CLI của Kratos sinh code HTTP và gRPC từ định nghĩa Protobuf.
Kratos hỗ trợ cả gRPC lẫn HTTP qua lớp transport thống nhất, với các gói transport/http và transport/grpc riêng. Ví dụ usage của chính Kratos chạy song song một HTTP server và một gRPC server trong cùng một ứng dụng, nối qua kratos.Server(httpSrv, grpcSrv).
Kratos v3 giảm dependency cốt lõi của framework và biến những hành vi trước đây ngầm định ở v2 thành cấu hình tường minh, theo ghi chú migration của dự án. README khuyến nghị đọc kỹ hướng dẫn migration v2 sang v3 trước khi nâng cấp bất kỳ service production nào.
Kratos được cấp phép theo MIT license, như nêu trong file LICENSE và README của dự án. MIT là giấy phép permissive, nên bạn có thể dùng, sửa đổi và phân phối lại Kratos trong dự án thương mại mà không phải mở nguồn code của mình.
Kratos được thiết kế cho các service cloud-native production — bộ middleware của nó bao gồm recovery, tracing, metrics và auth, đúng những gì traffic production cần. README cũng cảnh báo cụ thể là nên đọc hướng dẫn migration v2 sang v3 trước khi nâng cấp một service production hiện có lên v3.
Vấn đề mà Kratos giải quyết
Xây một Go microservice vừa nói gRPC (cho các lệnh gọi nội bộ) vừa nói HTTP (cho client bên ngoài hoặc webhook) thường có nghĩa là phải duy trì hai định nghĩa API riêng biệt, rồi lệch nhau dần khi service lớn lên. Kratos giải quyết việc này bằng cách biến Protobuf thành nguồn sự thật duy nhất: định nghĩa API một lần, rồi sinh cả code server HTTP lẫn gRPC từ đó, cộng thêm client stub, thay vì viết tay các handler song song cho từng transport.
Ai nên dùng — và ai nên bỏ qua
Đội Go xây nhiều hơn một microservice, cần HTTP và gRPC dùng chung một định nghĩa API, là đối tượng hợp nhất với Kratos — quy trình code generation trả công xứng đáng khi bạn phải giữ đồng bộ vài service trở lên. Một lập trình viên đơn lẻ chỉ làm một API HTTP thì không cần đến registry, chuỗi middleware và toolchain protobuf của Kratos. Bỏ qua nó đi. gin hay net/http thuần đã đủ với ít công sức thiết lập hơn nhiều. Ai còn chạy Kratos v2 trong production nên dành thời gian đọc hướng dẫn migration trước khi đụng vào v3.
Repo liên quan
Vẫn đang phân vân về kratos?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về kratos.
