GRPC (Google Remote Procedure Call) là gì?

1783
10-06-2022
GRPC (Google Remote Procedure Call) là gì?

Google Remote Procedure Call - hay gRPC, là một framework RPC mang lại lợi ích về hiệu suất và các tính năng hiện đại cho các ứng dụng client-server. gRPC cho phép bạn trực tiếp các phương thức trên các máy khác. Nó nhanh chóng, hiệu quả và an toàn, đồng thời cho phép bạn tạo code một cách nhanh chóng.

Các công ty như Netflix, Spotify và Docker đã chuyển sang gRPC, nhưng liệu những tổ chức khác cũng đi theo con đường này có hợp lý không?

Trong bài viết này, hãy cùng tìm hiểu xem đây có phải là lựa chọn phù hợp với tổ chức của bạn hay không.

Nguồn gốc của GRPC

Trước năm 2000, Remote Procedure Call (RPC) là phương thức truy cập cho các yêu cầu dịch vụ. Các RPC call hiệu quả nhưng phức tạp. Chúng được kết hợp chặt chẽ với các triển khai cụ thể và có thể không an toàn, vì chúng có thể để lộ quá nhiều chi tiết bên trong ra bên ngoài.

Representational State Transfer (REST) được thiết kế để giải quyết những vấn đề này. Nó cung cấp một tập hợp các phương pháp chung cho giao tiếp máy khách-máy chủ. GET và POST sẽ quen thuộc với hầu hết các nhà phát triển web. REST dễ làm việc nhưng không hiệu quả. Có những hạn chế đối với mô hình phản hồi yêu cầu của nó và dữ liệu của nó cần được tuần tự hóa để truyền tải, thêm chi phí hiệu suất.

gRPC (Google Remote Procedure Call) là gì? - Ảnh 1.

Để cải thiện tình trạng này, Google đã phát triển gRPC. Nó ra mắt vào năm 2016, là mã nguồn mở và miễn phí.

Chữ “g” trong tên của nó có vẻ là viết tắt của Google, nhưng ý nghĩa của nó thực sự thay đổi theo mọi phiên bản. RPC là viết tắt của Remote Procedure Call, là công nghệ truyền thông liên hệ thống mà nó nhằm mục đích thay thế và cải tiến.

Tại sao sử dụng GRPC?

Lợi ích về hiệu suất là một lợi thế chính so với các hệ thống khác và là lý do chính để sử dụng gRPC. Ngoài tốc độ nhanh, gRPC còn thúc đẩy bạn đưa ra các lựa chọn tốt về bảo mật và tính nhất quán của mã. Các công cụ tạo mã của nó cũng giúp bắt đầu nhanh chóng.

Hãy nói về một vài tình huống mà gRPC tỏa sáng trước khi đi vào chi tiết hơn về lợi thế kỹ thuật và cấu trúc của nó.

Đối với hiệu suất

Sự kết hợp giữa các lightweight message và hiệu suất cao của gRPC rất hữu ích trong một số trường hợp. Khi tài nguyên mạng ở mức cao, các lightweight message của gRPC là một lựa chọn tốt hơn các JSON message lớn hơn. gRPC có thể có lợi cho các thiết bị thông minh hoặc giao tiếp IOT, cũng như bất kỳ hình thức giao tiếp tần số cao nào.

Độ trễ thấp của nó có lợi cho các microservices, cho phép chúng giao tiếp hiệu quả. Nó cũng hoạt động tốt để kết nối thiết bị di động và trình duyệt với các dịch vụ backend. gRPC cũng hữu ích cho giao tiếp giữa các quá trình (IPC - interprocess communication), có hiệu quả tăng hơn TCP khi gửi tin nhắn giữa các dịch vụ trên cùng một máy.

Đối với tốc độ phát triển

Các công cụ tạo tự động của gRPC rất hữu ích để tạo nhanh các thư viện máy khách. Bạn có thể xác định kiến trúc của mình bằng cách sử dụng các tệp proto, tạo các đoạn code tự động và sau đó xác định các chi tiết. Điều đó mang lại cho bạn một khởi đầu thuận lợi trong tổ chức, đặc biệt hữu ích khi xây dựng một hệ thống có kiến trúc phức tạp.

Đối với các kiến trúc dựa trên microservice, nó cho phép bạn xây dựng hệ thống ở quy mô lớn dễ dàng hơn. Việc giữ cho mọi thứ được đồng bộ và tương thích sẽ ít gây đau đầu hơn và bạn ít có khả năng mắc lỗi khi xử lý nhiều ngôn ngữ.

Khả năng khác

Luồng hai chiều là lý tưởng cho giao tiếp, nơi bạn muốn gửi tin nhắn mà không cần đợi phía bên kia yêu cầu. Ngoài việc hữu ích cho việc liên lạc nội bộ giữa các hệ thống, nó còn có các ứng dụng trong nền tảng nhắn tin và chơi game.

gRPC (Google Remote Procedure Call) là gì? - Ảnh 2.

Lợi ích của GRPC

Có nhiều lợi ích khi sử dụng gRPC, từ cả quan điểm kỹ thuật và tổ chức.

Tốc độ và hiệu quả

gRPC sử dụng định dạng Bộ đệm Giao thức (Protobuf). Nó cho phép trao đổi tin nhắn nhanh hơn tới 6 lần so với JSON trong một số trường hợp, với kích thước giảm hơn 30% trong các trường hợp khác. Các message của nó được nén và tuần tự hóa. Nó cũng yêu cầu một lược đồ để đảm bảo cấu trúc cơ bản của dữ liệu được bảo toàn ở bất cứ nơi nào nó được gửi đi.

Phát trực tuyến hai chiều

Ngoài các luồng tiêu chuẩn máy khách-máy chủ, gRPC bao gồm phát trực tuyến hai chiều. Điều này cho phép bạn tạo luồng theo cả hai chiều có thể được đọc toàn bộ hoặc một phần mà không cần phải đợi chiều khác kết thúc.

Thông báo trong mỗi luồng được sắp xếp theo thứ tự, nhưng luồng dữ liệu theo một trong hai chiều có thể được bắt đầu hoặc dừng độc lập với trạng thái của chiều khác.

Điều đó có thể được sử dụng cho các ứng dụng dựa trên giao tiếp, chẳng hạn như ứng dụng trò chuyện hoặc các dịch vụ tương tác khác, chẳng hạn như trò chơi, nơi mỗi bên muốn gửi thông tin liên lạc cho bên kia và chi phí liên quan phải được giảm thiểu.

HTTP/2

gRPC được thiết kế cho HTTP/2 mang lại một số lợi ích. Ngoài việc gọn nhẹ hơn do khung nhị phân và nén nhị phân, nó cho phép bạn gửi nhiều luồng qua một kết nối duy nhất. Điều đó giúp loại bỏ head-of-line-blocking ở lớp ứng dụng, có nghĩa là các gói mạng ít có khả năng bị những người khác giữ lại trong hàng đợi hơn.

Nó cũng có tính năng ưu tiên, vì vậy các nhà phát triển có thể nhận được dữ liệu quan trọng nhất về thời gian được gửi trước. Các tính năng đẩy máy chủ của nó cho phép máy chủ đoán những gì khách hàng có thể muốn và gửi nó mà không cần nhận được yêu cầu.

Language Agnostic

gRPC cho phép bạn xây dựng các API dựa trên các hợp đồng (contract). Chúng được mô tả ở định dạng nhị phân Language Agnostic. Đó là một lợi ích khác, đặc biệt nếu bạn đang xây dựng một hệ thống dựa trên microservices. Sẽ dễ dàng hơn để gRPC làm việc với các microservices được viết bằng các công nghệ khác nhau khi bạn có một định dạng chung để xác định kiến trúc.

Code Generation

Cũng như là Language Agnostic, gRPC có công cụ tuyệt vời và cho phép tạo mã dễ dàng. Nếu bạn xác định một API specification bằng định dạng tệp .proto , bạn có thể sử dụng công cụ protoc để tạo mã cho bạn. Nó hỗ trợ nhiều ngôn ngữ phổ biến, bao gồm C ++, Python, Ruby, JavaScript và PHP.

Protoc không xây dựng các API đầy đủ chức năng, nhưng nó tạo mã bao gồm logic tuần tự hóa, cũng như xử lý mã hóa. Bạn cần tự xử lý quyền truy cập dữ liệu và bất kỳ logic nào khác.

Tuy nhiên, có những dự án dành riêng cho ngôn ngữ tạo ra đầu ra chi tiết hơn, chẳng hạn như gRPC Elixir cho Python. Ngoài ra còn có các công cụ có thể lấy một mô hình đơn giản làm input và tạo tệp proto và code cho bạn, chẳng hạn như GprcGenerator .NET project.

Các công cụ tạo mã này có thể tiết kiệm đáng kể thời gian của nhà phát triển.

gRPC (Google Remote Procedure Call) là gì? - Ảnh 3.

Bảo mật

gRPC hỗ trợ Bảo mật lớp truyền tải (TLS - Transport Layer Security) và điều này là bắt buộc để kết nối với các dịch vụ của Google. Xác thực token-based cũng được hỗ trợ.

API xác thực của Google cho phép bạn tạo các đối tượng thông tin xác thực có thể được đính kèm vào các cuộc gọi và kênh để đảm bảo bảo mật.

Đặc điểm kỹ thuật chính thức (formal specification)

Vì gRPC là một đặc tả hình thức, nên Google có thể tuyên bố rõ ràng những gì cấu thành phương pháp hay nhất. Chủ quan hay không, đó là thông số của họ, và họ có thể đưa ra quyết định cho mọi người.

Với các thông số kỹ thuật khác, chẳng hạn như HTTP, các nhà phát triển tranh luận về cách thực hiện đúng. Mặc dù điều này không nhất thiết là sai, nhưng nó để lại sự mâu thuẫn trong các cơ sở mã của mọi người. Có một định dạng được thiết lập sẽ loại bỏ điều đó và đảm bảo mọi người làm theo cách của Google hoặc chấp nhận rằng họ đang đi ngược lại vấn đề.

Deadline

gRPC cho phép bạn đặt thời hạn cho các cuộc gọi. Bằng cách đó, các máy khách không bị treo nếu máy chủ không phản hồi. Đối với các tình huống quan trọng về tài nguyên hoặc các tình huống cần phản hồi nhanh, việc đặt thời hạn có thể cung cấp cho bạn khả năng kiểm soát chi tiết về thời gian liên lạc của ứng dụng của bạn.


Nếu bạn muốn bắt đầu với gRPC, có rất nhiều cách để thực hiện. Hãy xem tài liệu gốc và thêm một dịch vụ rất đơn giản vào mã hiện có. gRPC cung cấp một số lợi thế so với các phiên bản tiền nhiệm, chẳng hạn như tăng hiệu quả và luồng hai chiều. Nó cũng cung cấp tính bảo mật và tính nhất quán, đồng thời giúp bạn bắt đầu nhanh chóng. Việc sử dụng HTTP/2 hạn chế có nghĩa là bạn không thể tin tưởng vào việc nó có sẵn, vì hiện tại chỉ có 46,3% trang web sử dụng nó và con số đó dường như không tăng. Tuy nhiên, đối với các trường hợp sử dụng mà bạn có toàn quyền kiểm soát kiến trúc, gRPC là một lựa chọn tuyệt vời. Nó cũng lý tưởng cho các ứng dụng di động không yêu cầu trình duyệt.

SHARE