RPC là gì? Cách thức hoạt động của RPC
RPC (Gọi thủ tục từ xa) là một giao thức kết nối các chương trình trên các máy tính khác nhau, cho phép chúng tương tác như thể thống nhất. Bài viết này Bizfly Cloud sẽ giải thích RPC là gì, cách thức hoạt động, ưu nhược điểm cũng như so sánh RPC với REST.
RPC là gì?
Gọi thủ tục từ xa (RPC) là một giao thức truyền thông phần mềm được một chương trình sử dụng để yêu cầu dịch vụ từ một chương trình khác nằm trên một máy tính và mạng khác, mà không cần phải hiểu chi tiết về mạng. Cụ thể, RPC được sử dụng để gọi các tiến trình khác trên hệ thống từ xa như thể tiến trình đó là một hệ thống cục bộ. Gọi thủ tục đôi khi còn được gọi là gọi hàm hoặc gọi chương trình con.
RPC hoạt động giống như một giao thức truyền tải cấp thấp để mang các gói dữ liệu giữa các chương trình giao tiếp. Nó thực hiện việc này bằng cách sử dụng mô hình máy khách-máy chủ. Chương trình yêu cầu được gọi là máy khách, trong khi chương trình cung cấp dịch vụ được gọi là máy chủ. Giống như một lệnh gọi thủ tục cục bộ, RPC là một hoạt động đồng bộ yêu cầu chương trình yêu cầu phải bị tạm dừng cho đến khi kết quả của thủ tục từ xa được trả về. Tuy nhiên, việc sử dụng các tiến trình hoặc luồng hạng nhẹ dùng chung không gian địa chỉ cho phép thực hiện đồng thời nhiều RPC.
Ngôn ngữ định nghĩa giao diện (IDL) -- ngôn ngữ đặc tả được sử dụng để mô tả giao diện lập trình ứng dụng (API) của một thành phần phần mềm -- thường được sử dụng trong phần mềm Gọi thủ tục từ xa. Trong trường hợp này, IDL cung cấp một cầu nối giữa các máy ở hai đầu của liên kết có thể đang sử dụng các hệ điều hành (OS) và ngôn ngữ máy tính khác nhau. Điều này có nghĩa là RPC có thể sử dụng được trên các hệ điều hành như Windows, Unix và macOS.
RPC hoạt động như thế nào?
RPC thường được sử dụng để xây dựng và tương tác với các hệ thống phân tán. RPC cho phép một chương trình gọi một chương trình con trên một máy tính khác mà nó không biết là từ xa. Mặc dù RPC hoạt động giống như một giao thức truyền tải, nhưng nó thực chất là một thủ tục giao tiếp giữa các tiến trình.
Khi một câu lệnh hoặc lệnh chương trình sử dụng khuôn khổ RPC được biên dịch thành một chương trình thực thi, một stub sẽ được bao gồm. Một stub là một đoạn mã được sử dụng để chuyển đổi các tham số được truyền giữa máy khách và máy chủ. Stub hoạt động như một đại diện của mã thủ tục từ xa. Khi chương trình được chạy và lệnh gọi thủ tục được đưa ra, stub sẽ nhận yêu cầu và chuyển tiếp nó đến một chương trình thời gian chạy máy khách trên máy tính cục bộ. Lần đầu tiên stub máy khách được gọi, nó sẽ liên hệ với máy chủ tên để xác định địa chỉ truyền tải nơi máy chủ cư trú.
Chương trình thời gian chạy máy khách biết cách định địa chỉ máy tính và ứng dụng máy chủ từ xa và gửi thông báo qua mạng yêu cầu thủ tục từ xa. Tương tự, máy chủ bao gồm một chương trình thời gian chạy và stub giao tiếp với chính thủ tục từ xa. Các giao thức phản hồi-yêu cầu được trả về theo cách tương tự.
Khi một lệnh gọi thủ tục từ xa được gọi, môi trường gọi đầu tiên sẽ bị tạm dừng. Sau đó, các tham số thủ tục được chuyển qua mạng đến thiết bị nơi thủ tục được lên kế hoạch thực hiện. Sau đó, thủ tục bắt đầu thực thi trong môi trường đó.
Khi thủ tục hoàn tất, dữ liệu được chuyển trở lại môi trường gọi, nơi thực thi chương trình tiếp tục -- như thể nó đã được trả về từ một lệnh gọi thủ tục thông thường.
Các bước sau xảy ra trong một RPC:
- Máy khách gọi stub máy khách. Lệnh gọi là một lệnh gọi thủ tục cục bộ với các tham số được đẩy lên ngăn xếp theo cách thông thường.
- Stub máy khách đóng gói các tham số thủ tục vào một thông báo và thực hiện gọi hệ thống để gửi thông báo. Việc đóng gói các tham số thủ tục được gọi là marshalling.
- Hệ điều hành cục bộ của máy khách gửi thông báo từ thiết bị máy khách đến thiết bị máy chủ từ xa.
- Lớp truyền tải của hệ điều hành máy chủ chuyển các gói đến cho stub máy chủ.
- Stub máy chủ giải nén các tham số -- được gọi là unmarshaling -- từ thông báo.
- Khi thủ tục máy chủ kết thúc, nó sẽ trả về cho stub máy chủ, sắp xếp các giá trị trả về trong một thông báo. Sau đó, stub máy chủ gửi thông báo đến lớp truyền tải.
- Lớp truyền tải gửi thông báo đến lớp truyền tải máy khách, sau đó lớp này trả về thông báo cho stub máy khách.
- Stub máy khách hủy sắp xếp các tham số trả về và quá trình thực thi trả về cho người gọi.
RPC cũng có thể được sửa đổi để hoạt động hiệu quả trong các môi trường khác, chẳng hạn như trong microservices.
Các loại RPC và ưu nhược điểm
Có một số mô hình RPC và triển khai điện toán phân tán. Một mô hình và triển khai phổ biến là Môi trường Điện toán Phân tán của Open Software Foundation. Viện Kỹ sư Điện và Điện tử định nghĩa RPC trong Đặc tả Gọi Thủ tục Từ xa ISO, "ISO/IEC 11578:1996."
Các ví dụ về cấu hình RPC bao gồm những điều sau:
- Đồng bộ. Đây là phương pháp RPC tiêu chuẩn. Máy khách thực hiện cuộc gọi và chờ phản hồi từ máy chủ.
- Không chặn. Máy khách thực hiện cuộc gọi, nhưng thay vì chờ phản hồi, nó tiếp tục xử lý của riêng mình.
- Chế độ hàng loạt. Máy khách gửi nhiều cuộc gọi không chặn trong một nhóm.
- Phát sóng. Máy khách gửi thông báo đến nhiều máy chủ và sau đó nhận được tất cả các câu trả lời kết quả.
- Gọi lại. Máy khách thực hiện cuộc gọi máy khách-máy chủ không chặn.
Các phương pháp thay thế cho giao tiếp máy khách-máy chủ bao gồm xếp hàng thông báo, Giao tiếp Chương trình với Chương trình Nâng cao của IBM và Truyền Trạng Thái Đại diện (REST).
RPC cung cấp những lợi ích sau cho các nhà phát triển và người quản lý ứng dụng:
- Giúp máy khách giao tiếp với máy chủ thông qua việc sử dụng truyền thống các lệnh gọi thủ tục trong các ngôn ngữ khác nhau.
- Có thể được sử dụng trong môi trường cục bộ và phân tán.
- Hỗ trợ các mô hình hướng quy trình và hướng luồng.
- Ẩn cơ chế truyền thông báo nội bộ khỏi người dùng, cung cấp tính trừu tượng.
- Bỏ qua nhiều lớp giao thức để cải thiện hiệu suất.
Mặc dù RPC tự hào có nhiều lợi ích, người dùng cũng nên lưu ý những cạm bẫy sau:
- Máy khách và máy chủ sử dụng các môi trường thực thi khác nhau cho các thói quen tương ứng của chúng và việc sử dụng tài nguyên phức tạp hơn. Do đó, các hệ thống RPC không phải lúc nào cũng phù hợp để truyền một lượng lớn dữ liệu.
- RPC dễ bị lỗi vì nó liên quan đến hệ thống truyền thông, một máy khác và một quy trình khác.
- RPC không linh hoạt như các API khác như REST.
So sánh RPC và REST: Điểm giống và khác biệt
REST là một kiểu kiến trúc cho các hệ thống phân tán, thường được sử dụng trong phát triển phần mềm cho các dịch vụ web và hệ thống có thể dễ dàng giao tiếp với nhau. Các hệ thống, giao diện dịch vụ và API tuân thủ REST được gọi là API RESTful.
Giao thức REST và RPC có chung những điểm tương đồng. Ví dụ, cả hai giao thức đều được sử dụng để giao tiếp qua một hệ thống phân tán. Tuy nhiên, chúng vẫn có cấu trúc cơ bản và trường hợp sử dụng khác nhau. Trong khi RPC cho phép các hàm gọi từ xa như thể chúng là cục bộ, API REST cho phép người dùng thực hiện các thao tác dữ liệu trên máy chủ từ xa.
REST phải không trạng thái, nhưng các hệ thống RPC có thể có trạng thái hoặc không trạng thái. REST cũng cho phép tính linh hoạt cao hơn, vì nó có thể gửi dữ liệu ở nhiều định dạng -- như JavaScript Object Notation hoặc Extensible Markup Language -- trong một API, trong khi RPC sử dụng định dạng dữ liệu cố định.