Hướng Dẫn Chi Tiết Xây Dựng Micro-service Với gRPC
Tiếp tục chuỗi bài viết về Domain-Driven Design (DDD), hôm nay tôi xin giới thiệu với bạn một chủ đề khác, tập trung vào cách xây dựng mô hình Micro-service bằng giao thức gRPC thông qua một dự án nhỏ. Series này sẽ gồm nhiều bài viết hữu ích như sau:
- Bài 1: Tổng quan về gRPC.
- Bài 2: Giới thiệu về cấu trúc dự án.
- Bài 3, 4, 5: Triển khai các dịch vụ (services).
- Bài 6: Tổng kết.
Hy vọng bài viết này sẽ nhận được sự đón nhận nồng nhiệt từ bạn đọc. Ngay bây giờ, chúng ta sẽ đi vào bài đầu tiên: Tổng quan về gRPC.
RPC Là Gì?
RPC, viết tắt của "Remote Procedure Call" (Lời gọi thủ tục từ xa), cho phép bạn gọi một hàm trên server từ client. Chỉ có hai phương thức được sử dụng trong RPC là POST và GET, và việc tương tác giữa client và server diễn ra thông qua "Server-side Interface" và "Client-side stub".
Sự Khác Biệt Giữa RPC và REST
REST được thiết kế nhằm quản lý tài nguyên, nơi mọi thao tác (thêm, sửa, xóa) đều tác động trực tiếp lên tài nguyên. Kết quả trả về của REST cũng chính là tài nguyên đó.
Ngược lại, RPC chỉ thực hiện việc gọi một hàm cụ thể trên server mà không cần quan tâm đến tài nguyên. Kết quả của RPC chủ yếu là giá trị trả về từ hàm đó.
Ví Dụ So Sánh:
-
REST:
- GET
/posts/1
- POST
/posts/1
- PUT
/posts/1
- GET
-
RPC:
/posts/1/calculate_score
/posts/1/average_score
Trong thực tế, RPC thường được xây dựng dựa vào REST, cho ra đời khái niệm RPC-base APIs.
gRPC Là Gì? Sự Khác Biệt Của Nó
gRPC là một framework gọi thủ tục từ xa mã nguồn mở (open source) mà có thể chạy ở bất kỳ đâu. Nó cho phép ứng dụng client và server tương tác một cách "minh bạch" và hiệu quả.
gRPC được phát triển bởi Google, và như các hệ thống RPC khác, gRPC cũng định nghĩa các interface cùng với các methods mà client có thể truy cập. Mặc định, gRPC sử dụng Protocol Buffers làm Interface Definition Language
và định dạng trao đổi dữ liệu. Ngoài ra, gRPC cũng hỗ trợ định dạng JSON.
File Interface Definition Language
trong gRPC sử dụng định dạng với phần mở rộng .prot
, và bạn hoàn toàn có thể quản lý phiên bản của file này một cách dễ dàng.
Các Loại RPC mà gRPC Hỗ Trợ:
- Unary: Một yêu cầu từ client - Một phản hồi từ server.
- Server streaming: Một yêu cầu từ client, nhiều thông điệp được stream trả về từ server.
- Client Streaming: Nhiều thông điệp từ client và một phản hồi từ server.
- Bidirectional Streaming: Cả client và server có thể trao đổi nhiều thông điệp với nhau.
Ứng Dụng gRPC Trong Thực Tế
Trong hệ thống microservices, việc sử dụng REST thường gây ra các vấn đề với việc mã hóa và giải mã dữ liệu (JSON), điều này không xảy ra với RPC. Vì vậy, gRPC thường được ưa chuộng trong các hệ thống microservices có tải trọng lớn.
Hơn nữa, gRPC dựa trên nền tảng HTTP/2, cho phép stream dữ liệu hiệu quả và thích hợp cho các ứng dụng cần real-time như event sourcing. HTTP/2 sử dụng dữ liệu nhị phân thay vì văn bản, qua đó gia tăng tốc độ truyền tải giữa các dịch vụ.
Một lưu ý quan trọng là gRPC thường được sử dụng trong giao tiếp giữa các backend - backend
, không nên áp dụng cho giao tiếp giữa backend - frontend
do vấn đề về quản lý trạng thái có thể dẫn đến các vấn đề về quy mô tải và độ trễ (HOL).
Kết Luận Bài Viết 1
Trong phần này, tôi đã trình bày một cách tóm lược về:
- Khái niệm RPC
- Sự khác biệt giữa RPC và REST
- Tổng quan về framework gRPC
- Cách áp dụng gRPC trong thực tế.
Hy vọng rằng sau bài viết này, bạn đọc đã có cái nhìn rõ ràng hơn về gRPC và sẵn sàng theo dõi các bài viết tiếp theo trong chuỗi này. Hẹn gặp lại trong các bài tiếp theo.
Tài Liệu Tham Khảo
- 200lab.io - gRPC là gì?
- Medium - What is gRPC?
source: viblo