Ba lựa chọn chủ đạo là REST (HTTP/JSON), gRPC (HTTP/2 + Protobuf), và message queue (Kafka/RabbitMQ). REST và gRPC là đồng bộ; queue là bất đồng bộ.
Ba lựa chọn chủ đạo là REST (HTTP/JSON), gRPC (HTTP/2 + Protobuf), và message queue (Kafka/RabbitMQ). REST và gRPC là đồng bộ; queue là bất đồng bộ.
| Khía cạnh | REST | gRPC | Message Queue |
|---|
| Phong cách | Sync | Sync | Async |
| Payload | JSON (văn bản) | Protobuf (nhị phân) | Bất kỳ (thường nhị phân) |
| Hiệu năng | Tốt | Cao | Thông lượng cao |
| Hợp đồng | OpenAPI (lỏng) | .proto (chặt) | Schema/event |
| Streaming | Hạn chế | Hỗ trợ gốc (bidi) | Pub/sub |
| Tốt nhất cho | API công khai, trình duyệt | Đường nóng nội bộ | Tách rời, event |
service OrderService {
// RPC định kiểu mạnh, sinh client + server stub
rpc GetOrder (OrderId) returns (Order);
}
message OrderId { string id = 1; }
message Order { string id = 1; double total = 2; }
Order Service ─publish→ [ topic "OrderPlaced" ] ─▶ Inventory
└────▶ Notifications
(producer không biết hoặc chờ consumer)
Dùng sync gRPC/REST ở mọi nơi tái tạo sự gắn kết chặt; dùng async cho một thao tác đọc tức thì của người dùng thêm độ trễ không cần thiết.
Lựa chọn tầng vận chuyển đặt ra mức trần về sự gắn kết và hiệu năng cho mỗi tương tác, nên chọn theo từng use case — không phải toàn cục — là điều giữ cho hệ thống vừa nhanh vừa bền bỉ.
Các hệ thống trưởng thành cố tình pha trộn cả ba: gRPC trên đường nóng nội bộ, REST ở rìa, và queue cho các luồng công việc.