TopDev AI Robot TopDev
#Backend & Microservices#Kiến trúc & System Design

Thiết kế Microservices: Giao tiếp qua gRPC vs REST API – Đánh giá hiệu năng và độ phức tạp

Hoàng Nam (Tech Lead)
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview

Điểm nghẽn khi các Microservices gọi nhau bằng REST/JSON Khi tách một hệ thống nguyên khối Monolith thành 20 Microservices, lưu lượng mạng giao tiếp nội bộ giữa các dịch vụ East-West Traffic tăng lên…

☰ Mục lục bài viết (5 phần) Mở / Đóng mục lục

Điểm nghẽn khi các Microservices gọi nhau bằng REST/JSON#

Khi tách một hệ thống nguyên khối (Monolith) thành 20 Microservices, lưu lượng mạng giao tiếp nội bộ giữa các dịch vụ (East-West Traffic) tăng lên gấp nhiều lần.

Nếu sử dụng REST API truyền thống:

  • Dữ liệu dạng JSON là chuỗi văn bản (text-based), kích thước cồng kềnh.
  • Chi phí parse/stringify JSON tiêu tốn rất nhiều chu kỳ CPU.
  • Mỗi request HTTP/1.1 phải mở kết nối TCP mới hoặc bị nghẽn Head-of-line blocking.

gRPC (phát triển bởi Google) sử dụng Protocol Buffers (Protobuf) và chạy trên nền HTTP/2 là giải pháp tối ưu cho bài toán này.

Định nghĩa Contract chuẩn với Protobuf#

PROTOBUF
syntax = "proto3";
package user;

service UserService {
  rpc GetUser (UserRequest) returns (UserResponse);
}

message UserRequest {
  int64 user_id = 1;
}

message UserResponse {
  int64 user_id = 1;
  string full_name = 2;
  string email = 3;
  repeated string roles = 4;
}

Kết quả đo lường hiệu năng thực tế#

Tiêu chí REST API (JSON) gRPC (Protobuf)
Kích thước Payload 100% (Chuẩn) Giảm 60% - 70% (Dạng nhị phân)
Tốc độ tuần tự hóa (Serialization) Chậm Nhanh gấp 5 - 8 lần
Giao thức mạng HTTP/1.1 hoặc HTTP/2 HTTP/2 Multiplexing (1 kết nối cho nhiều request)
Streaming hai chiều Phức tạp Hỗ trợ tự nhiên (Bidirectional Streaming)

Kiến trúc đề xuất: "Bên ngoài REST, bên trong gRPC"#

  • API Gateway đối ngoại: Tiếp nhận request từ Web/Mobile bằng REST/JSON để thân thiện với trình duyệt.
  • Giao tiếp nội bộ giữa các Service: 100% dùng gRPC để tối đa hóa tốc độ và giảm thiểu độ trễ mạng.

Góc thảo luận#

Team bạn có đang ứng dụng gRPC trong hệ thống không? Khâu chia sẻ file .proto giữa các repository được quản lý như thế nào?


Xem thêm nội dung liên quan:

Chia sẻ thảo luận này:

Thảo luận

1 phản hồi

Ý kiến từ cộng đồng kỹ sư TopDev
💬

Tham gia thảo luận

Cộng đồng mở · Đăng nhập 1-chạm qua Google
  1. Thu Trang (Backend Engineer)
    #1

    Mô hình "Bên ngoài REST, bên trong gRPC" là kinh điển nhất. Bọn mình dùng Buf CLI để quản lý và sinh code client tự động cho các file .proto, gõ code TypeScript hay Go đều có autocomplete đầy đủ kiểu dữ liệu.

Bài liên quan trong #Backend & Microservices

1
TopDev AI Companion
AI
✓ Đã sao chép link