RPC là gì? RPC có những thành phần nào?

Trong lĩnh vực lập trình, ứng dụng có thể được xây dựng trên nhiều tiến trình. Các tiến trình này đôi khi được hoạt động trên một hoặc nhiều hệ thống khác nhau. Để giải quyết vấn đề truyền tin giữa các tiến trình riêng biệt, người ta thường sử dụng phương pháp RPC. Vậy RPC là gì? RPC có những thành phần nào? Hãy cùng Khotenmien.vn theo dõi bài viết dưới đây nhé.

1. RPC là gì?

RPC – viết tắt của Remote Procedure Call, là một mô hình kỹ thuật mạng hay còn được biết tới là cơ chế tiếp cận giữa hai tiến trình.

Thuật ngữ RPC ra đời vào năm 1981 được thực hiện bởi Andrew Birrel  Bruce Nelson. RPC được triển khai  phổ biến lần đầu trên Unix dưới dạng Sun’s RPC (ngày nay gọi là ONC RPC). Từ đó, RPC được sử dụng làm cơ sở chuẩn hóa hệ tập tin mạng. Trong hệ thống mạng máy tính vào thời điểm hiện tại có rất nhiều dịch vụ & phần mềm sử dụng cơ chế kết nối RPC.

RPC là gì? RPC có những thành phần nào?
RPC là gì?

Đây là một loại giao thức yêu cầu-phản hồi, có thể dễ dàng được giải thích sử dụng mô hình truyền thông máy khách/máy chủ. Quá trình gọi một yêu cầu được gọi là “máy khách” và quá trình trả lời lại yêu cầu này gọi là “máy chủ”. Lưu ý, máy khách hoặc máy chủ có thể là các thiết bị khác nhau trong một hệ thống mạng hoặc có thể là các tiến trình khác nhau nằm trong cùng hệ thống. Có hay loại thủ tục xuất hiện trong chương trình gồm:

  • Thủ tục cục bộ là thủ tục được cài đặt và thực thi tại máy của của chương trình
  • Thủ tục ở xa là thủ tục được định nghĩa, cài đặt và thực thi trên một máy tính khác.

2. Điểm mạnh & điểm yếu của RPC.

2.1 Điểm mạnh.

RPC có năng lực cho phép chuyển sự phân tán của hệ thống cuối cùng vào một quyết định ở thời điểm khai triển. Việc loại bỏ phương diện phân tán từ code có thể mang đến rất nhiều tiện ích cho các dự án, vì ở giai đoạn đầu triễn khai các chi tiết cuối thường không được biết nhất định. Lập trình viên có thể tùy biến chuyển từ lời gọi cục bộ sang lời gọi từ xa RPC mà không thay đổi quá lớn cấu trúc ban đầu của chương trình.

2.2 Điểm yếu.

Với RPC, cách chia nhiều hàm để gọi tồn tại một số hạn chế khi thời gian trễ mỗi lần gọi RPC là khó có thể bỏ quả, càng nhiều lần gọi, tổng thời gian trễ sẽ tăng, khả năng nghẽn cổ chai do kiểu hỏi đáp liên tục sẽ tăng.

Đối với lời gọi cục bộ, đối tượng gọi (caller) và đối tượng bị gọi (receiver) nằm trong cùng một process. Kiểu tham số truyền được kiểm tra nghiêm ngặt khi biên dịch. Còn với RPC, việc kiểm tra như thế sẽ dẫn đến nhiều rủi ro hơn, dữ liệu có thể bị nghe lén hoặc bị thay đổi trên đường truyền. Việc bảo mật lời gọi RPC dẫn đến cần phải mã hóa, gắn kèm chữ ký kiểm tra…điều này sẽ khiến thư viện bên dưới của caller và receiver sẽ phải làm việc nhiều hơn, độ trễ lại cao hơn.

Chưa kể đồng hồ thời gian ở máy tính chứa caller và receiver có thể sai khác nhau, hệ điều hành cũng như phần mềm, ngôn ngữ lập trình cũng khác nhau, kiểu dữ liệu có sự sai khác…

3. Kiến trúc của RPC.

RPC được thiết kế để cung cấp cho việc truyền tải thông tin giữa client  server dễ dànghơn, bảo mật hơn, thuận tiện hơn cho việc đồng bộ hóa các luồn dữ liệu. Các hàm chứa trong RPC hỗ trợ cho việc truy cập bất kỳ chương trình nào đòi hỏi phương pháp giao tiếp từ client đến server. Hình phía dưới sẽ cho thấy kiến trúc của RPC

RPC là gì? RPC có những thành phần nào?
Kiến trúc của RPC

Hình 1: Kiến trúc Remote Procedure Call

  •  Các thành phần của RPC
Thành phần Miêu tả
Client or server process Chương trình hoặc dịch vụ trả lời từ yêu cầu của RPC
RPC stubs Những hệ thống chương trình con được dùng bởi client hoặc server khởi động yêu cầu RPC.
Marshalling engine

(NDR20 hoặc NDR64)

Cung cấp một giao diện chung giữa RPC Client và RPC Server và được chia làm 2 loại: NDR20 và NDR64. NDR20 được dùng cho hạ tầng 32 bits. Trong khi đó NDR64 được tối ưu dùng cho hạ tầng 64 bits. Client và Server sẽ thương lượng nên chọn NDR20 hay NRD64 để giao tiếp với nhau
Runtime application programming interface (API) Cung cấp giao diện cho RPC tới Clients hoặc Servers. Thông thường, RPC Clients và Servers sẽ gọi hàm API (giao diện lập trình ứng dụng) để khởi tạo RPC và chuẩn bị cấu trúc dữ liệu sẽ được sử dụng để thực hiện cuộc gọi RPC. Lớp API sẽ quyết định nếu yêu cầu RPC đến từ marshalling engine hoặc trực tiếp từ client/server đến máy chủ nội bộ hoặc máy chủ từ xa. Sau đó lớp API sẽ dẫn đường cho RPC đến Connection RPC, Datagram RPC hoặc Local RPC Layers
Connection RPC protocol engine Được sử dụng khi RPC yêu cầu giao thức kết nối. Lớp này sẽ chỉ định sử dụng giao thức kết nối nếu RPC được gửi đi hoặc nhận được một kết nối hướng tới RPC
Datagram RPC protocol engine Được sử dụng khi RPC yêu cầu giao thức phi kết nối. Lớp này sẽ chỉ định sử dụng giao thức phi kết nối nếu RPC được gửi đi hoặc nhận được một phi kết nối tới RPC
Local RPC protocol engine Được sử dụng khi Server và Client đặt trong cùng một host.
Registry Được truy cập khi dịch vụ RPC đầu tiên được tải về. Các thành phần trong registry sẽ chỉ định dãy port IP và tên thiết bị của các card mạng để RPC có thể  kết hợp chúng lại với nhau. Trừ khi API ép buộc RPC phải dùng, Registry sẽ không được sử dụng trong hoạt động của RPC
Win32 APIs

(kernel32.dll, advapi32.dll, ntdll.dll)

Kernel32.dll là  một file thư viện động 32 bits có trong Windows NT. File này chịu trách nhiệm quản ly‎ bộ nhớ, các hoạt động vào ra của hệ thống

Advapi32.dll là file nâng cao của Windows 32 dựa trên giao diện lập trình ứng dụng. File này hỗ trợ về bảo mật và gọi các registry

Ntdll.dll là file dll quản lý‎ chức năng các file hệ thống của Windows NT

SSPI

(secur32.dll)

Cung cấp giao diện bảo mật cho RPC. File secur32.dll sẽ thương lượng cách dùng cho việc chứng thực và mã hóa như: Kerberos, NTLM, hoặc Secure Sockets Layer (SSL)
Endpoint Mapper (EPM)

(rpcss.dll)

Rpcss.dll (Remote procedure call subsystem) chủ yếu cung cấp cơ sở hạ tầng cho các dịch vụ COM, nhưng một phần của Rpcss.dll được dùng cho EPM. RPC Server liên lạc với EPM để nhận những điểm kết thúc động và đăng ký những điểm này vào cơ sở dữ liệu của EPM. Rồi sau đó khi RPC Clients muốn kết nối tới RPC Server, nó sẽ liên lạc với EPM để nhờ EPM phân giải những điểm kết thúc..
Active Directory Chỉ được sử dụng cho quá trình xử lý RPC client khi giao diện bảo mật cụ thể như Kerberos hoặc Negotiate như nhà cung cấp bảo mật hoặc khi Server dùng NTLM như nhà cung cấp bảo mật

Used in the RPC client process only when the security interface specifies Kerberos or Negotiate as the security provider or when the server uses NTLM as the security provider.

Network stack Được sử dụng thông qua các yêu cầu  và trả lời của RPC giữa Client và Server
Kernel Được sử dụng thông qua các yêu cầu  và trả lời của RPC giữa Client và Server

 

 TẠM KẾT.

Vậy là Khotenmien.vn đã vừa giới thiệu cho các bạn về RPC rồi đấy. Mong rằng những thông tin trong bài viết dưới đây có thể cung cấp cho bạn những thông tin đầy đủ nhất về RPC thông qua một số nội dung như RPC là gì? RPC có những thành phần nào?… từ đó có thể giúp ích cho các công việc của bạn. Hi vọng bài viết sẽ phần nào giúp bạn có thêm nhiều kiến thức về lĩnh vực này!


Thu Uyên – Tổng hợp, chỉnh sửa.

Cám ơn bạn đã quan tâm đến sản phẩm tại Khotenmien.vn

Chúng tôi sẽ liên hệ bạn ngay nhé!