gRPC là gì? Hướng dẫn tổng quan cho lập trình viên

gRPC là một framework mã nguồn mở do Google phát triển, giúp lập trình viên gọi hàm trên server từ xa như gọi hàm cục bộ. Bài viết này sẽ giải thích gRPC là gì, cách hoạt động, ưu nhược điểm so với REST API và khi nào nên dùng.

gRPC là gì?

gRPC là viết tắt của gRPC Remote Procedure Call, một framework RPC hiện đại do Google tạo ra dựa trên hệ thống nội bộ Stubby đã hoạt động từ năm 2001. Dự án được mã nguồn mở từ tháng 3/2015, phát hành phiên bản 1.0 vào tháng 8/2016 và hiện là dự án thuộc CNCF với giấy phép Apache 2.0. Google tuyên bố Stubby xử lý hàng chục tỷ request mỗi giây, cho thấy độ tin cậy của mô hình này ở quy mô lớn.

Khác với REST dựa trên tài nguyên và phương thức HTTP, gRPC tập trung vào việc gọi hàm trực tiếp. Client định nghĩa một hàm trên server, gRPC lo phần đóng gói, truyền dữ liệu và nhận kết quả.

Cách hoạt động của gRPC

Protocol Buffers làm ngôn ngữ định nghĩa

gRPC dùng Protocol Buffers (proto3) làm ngôn ngữ mô tả interface. Lập trình viên viết file .proto khai báo service và message:

syntax = "proto3";
service UserService {
  rpc GetUser (UserId) returns (User);
}
message UserId { int32 id = 1; }
message User { string name = 1; string email = 2; }

Trình biên dịch protoc tự động sinh mã client và server cho hơn 10 ngôn ngữ gồm Go, Java, Python, C++, C#, Node.js, Ruby, Kotlin và Dart. Lập trình viên chỉ viết logic xử lý, không phải lo phần giao tiếp mạng.

HTTP/2 làm nền tảng vận chuyển

gRPC chạy trên HTTP/2, mang lại ba lợi ích chính:

  • Dữ liệu nhị phân nhỏ gọn hơn JSON, giảm băng thông và thời gian tuần tự hóa
  • Multiplexing nhiều request trên một kết nối TCP, loại bỏ head-of-line blocking
  • Nén header giúp giảm chi phí truyền tải

Bốn kiểu gọi RPC

  • Unary: client gửi một request, nhận một response
  • Server streaming: client gửi một request, nhận chuỗi response liên tục
  • Client streaming: client gửi chuỗi request, nhận một response cuối
  • Bidirectional streaming: hai chiều gửi và nhận đồng thời

Ngoài ra gRPC hỗ trợ deadline và timeout, hủy request, metadata, xác thực qua TLS và mã hóa mặc định.

gRPC so với REST API

Tiêu chí gRPC REST API
Định dạng dữ liệu Protocol Buffers nhị phân JSON/XML đọc được
Giao thức HTTP/2 HTTP/1.1 hoặc HTTP/2
Hợp đồng File .proto bắt buộc, sinh mã tự động OpenAPI tùy chọn
Streaming Hỗ trợ đầy đủ 4 kiểu Hạn chế
Trình duyệt Cần gRPC-Web Hỗ trợ tự nhiên
Debug Khó đọc trực tiếp Dễ kiểm tra bằng curl

gRPC không phải lúc nào cũng nhanh hơn REST. Với API công khai, dữ liệu đơn giản và cần tương thích trình duyệt, REST vẫn là lựa chọn phù hợp. gRPC tỏa sáng ở hệ thống nội bộ, microservices và ứng dụng realtime.

Khi nào nên dùng gRPC

  • Kiến trúc microservices: giao tiếp giữa các service nội bộ với hiệu năng cao và hợp đồng chặt chẽ
  • Ứng dụng mobile: payload nhỏ giúp tiết kiệm băng thông và pin
  • Streaming realtime: chat, theo dõi vị trí, dữ liệu tài chính
  • Hệ thống đa ngôn ngữ: sinh mã tự động cho nhiều nền tảng

Google, Netflix, Square, Uber, Dropbox, Spotify và Docker đều sử dụng gRPC trong hệ thống sản xuất.

Công cụ hỗ trợ phát triển gRPC

Hệ sinh thái gRPC có đầy đủ công cụ hỗ trợ lập trình viên. grpcurl cho phép gọi thử service gRPC từ dòng lệnh tương tự như curl với REST. Postman và Insomnia đều hỗ trợ gRPC để kiểm thử API. Trình biên dịch protoc kèm plugin của từng ngôn ngữ tự động sinh mã, giúp client và server luôn đồng bộ với hợp đồng trong file .proto. Với gRPC-Web, ứng dụng chạy trên trình duyệt có thể giao tiếp với backend gRPC thông qua proxy Envoy, mở rộng phạm vi sử dụng ra cả frontend.

Hạn chế của gRPC

  • Dữ liệu nhị phân khó đọc trực tiếp khi debug
  • Trình duyệt không gọi trực tiếp được, phải dùng gRPC-Web
  • Đường cong học tập dốc hơn REST đối với người mới
  • Công cụ và hệ sinh thái chưa phong phú bằng REST

Kết luận

gRPC là lựa chọn mạnh mẽ cho giao tiếp giữa server với hiệu năng cao, streaming và hợp đồng chặt chẽ. Nếu bạn xây dựng microservices hoặc API nội bộ, gRPC đáng để thử. Với API công khai hướng tới trình duyệt, REST vẫn là chuẩn phù hợp.

Tham khảo thêm

Tài liệu chính thức grpc.io | So sánh gRPC và HTTP API của Microsoft | Wikipedia gRPC

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Apache Kafka là gì? Kiến trúc và ứng dụng thực tế

Kafka là gì? Apache Kafka là nền tảng stream event mã nguồn mở được xây dựng để xử lý hàng tỷ sự kiện mỗi ngày theo thời gian thực. Được…

Xem thêm

Git là gì? Hướng dẫn toàn diện cho người mới bắt đầu

Git là gì? Vì sao mọi lập trình viên đều cần Git Git là hệ thống quản lý phiên bản phân tán (Distributed Version Control System) mã nguồn mở, được…

Xem thêm

Microservices là gì? Hướng dẫn kiến trúc vi mô cho lập trình viên

Microservices là gì? Microservices là kiến trúc phần mềm chia ứng dụng thành nhiều dịch vụ nhỏ, độc lập, mỗi dịch vụ chạy trong tiến trình riêng và giao tiếp…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất