본문 바로가기
Programing/Knowledge

[CS] Remote Procedure Call (RPC)

by 꾸압 2022. 12. 8.

 

<설명>

  - OS에 사용되는 상위 수준의 통신 Paradigm을 제공하는 Protocol.

  - RPC는 통신 Program 사이에서 메시지 data를 전달하는 TCP/IP 또는 UDP 등 하위 수준의 Transport Protocol 존재를 가정한다.

    ==> RPC는 Transport Protocol 이 아님. 그저 기존 통신 기능을 Transparant하게 쓰는 방식.

    ==> 이 Transparancy 가 RPC 이 강점 (분산 시스템 기준).

 

  - RPC는 Network Application을 지원하고자 특별히 설계된 논리적인 Client-to-Server 통신 System을 구현함.

    ==> 대표 예시 : MSA 분산 시스템, Client-Server 기반 Application

  - 기존에 있는 Local Procedure Calling의 확장성을 전제로 하여, Called Procedure가 Calling Procedure 와 같은 Address 공간에 존재할 필요가 없도록 함.

 

  - User가 원격 Procedure를 Local Procedure인 것처럼 작업할 수 있게 함.

    ==> 어떤 기계에 있는 Program이 원격인걸 모른채 다른 기계에 있는 Subroutine을 호출할 수 있게 함.

 

  - 원격 Procedure 호출은 RPC Protocol에 포함된 Routine 들을 통해 정의됨.

  - 각 호출 msg 는 응답 msg 와 동일함.

 

  - RPC는 Batching 이나 Broadcastring 원격 호출 같이 RPC 가 아닌 Protocol을 구현하는 Message-Passing Protocol.

  - Server 측에서 Callback Procedure 및 Select Subroutine 도 지원.

  - Server 와 Client 를 서로 인식하게하는 'Authentication(인증) Process' 를 제공.

 

  - RPC에서 각 Server는 원격 Serice Procedure 집합체의 Program 을 Supply(공급)함.

    ==> Host Address, Program Number, Procedure Number 의 조합이 하나의 원격 Service Procedure를 지정.

 


 

[RPC Model]

  - RPC Model에서 Client는 Server에 Data Packet을 보내기 위해 Procedure 호출을 만듦.

    ==> Packet이 도착하면 Server는 요청된 모든 Service를 수행하는 Dispatch Routine을 호출한 뒤, Client에게 답신을 보냄.

    ==> 이렇게 하여 Procedure 호출이 Client에게 Return 함.

 

이미지 출처 : GeeksforGeeks

 

  - Caller(호출자) 와 Callee(호출 수신자) 간 제어 흐름이 번갈아 나타나는 Client-Server 에 RPC가 특히 아주 잘 맞음.

    ==> 예시로 Query-Response에 아주 적합함.

 


 

[RPC Interface]

  - RPC Interface는 보통 Network 안에서 다른 Workstation에 있는 Process들 끼리 통신하는데 사용됨.

    ==> 같은 Workstation에 있는 다른 Process 끼리 통신하는 것도 잘 됨.

 


 

<동작 원리 in RPC Model>

  1) Client가 Client Stub Procedure를 늘 하던 방식대로 Parameter를 보내 Invoke(호출).

    ==> Client Stub은 Client가 가진 Address 공간에 상주.

 

  2) Client Stub 는 Message 안에 Parameter를 Marshall(Pack, 포장).

    ==> Marshalling 엔 Parameter 표현을 표준 형식으로 변환하고, 각 Parameter를 Message에 복사하는 작업이 포함.

 

  3) Client Stub이 Message를 Transport Layer에 전달.

    ==> Tranport Layer에서 원격 Server 기계로 Message를 보냄.

 

  4) Server에서 Transport Layer가 Message를 Server Stub 에 전달.

    ==> 이 Server Stub는 Parameter를 Demarshall(Unpack) 하고, 정규 Procedure Call Mechanism을 통해 원하는 Server Routine을 호출(Call).

 

  5) Server Procedure가 완료되면 Return 값을 Message로 Mashalling 하는 Server Stub으로 Return.

    ==> 위 Server Stub 의 예시 : Normal Procedure Call Return

 

  6) Tranport Layer가 결과 Message를 Client Transport Layer로 돌려 보내고, Client Transport Layer는 Message를 Client Stub으로 돌려 보냄.

 

  7) Client Stub은 Return Parameter를 Demarshalling 하고 Execution을 호출자에게 Return.

 

이미지 출처 : GeeksforGeeks

 


 

<RPC Issues>

  1) [RPC Runtime]

    - RPC Mechanism의 기반인 Network 통신을 처리하는 Routine 및 Service Library 집합체

    - RPC Call 과정에서 Client 측 및 Server 측 Runtime Sysem의 Code 다음 것들을 처리함.

      ==> Binding 처리(Handle)

      ==> 적절한 Protocol 을 통해 통신 설정

      ==> Client와 Server 사이에서 Call Data 를 전달.

      ==> 통신 장애 처리(Handle)

 


 

  2) [Stub]

    - Stub 기능은 Programmer가 작성한 Application Code에 Transparency를 제공함.

    - Client 측에서 Stub는 다음을 처리(Handle) 함.

      ==> Client의 Local Procedure 호출과 Runtime System 사이의 Interface

      ==> Mashalling 및 Unmarshalling Data

      ==> RPC Run-time Protocol 호출(Invoke)

      ==> 요청 시 일부 Binding 단계를 수행.

    - Server 측에서 Stub는 'Runtime System'과 'Server에 의해 Execute되는 Local 관리자 Procedure' 간에 유사한 Interface를 제공.

 


 

  3) [Binding : Client는 누가 자기를 Call 하는지, Service가 어디에 상주하는지 어떻게 아는가?]

    - 가장 유연한 방안은 Dynamic Binding을 사용하고 RPC가 처음 만들어질 때 Run-time에서 Server를 찾는 것.

    - 처음 호출(Invoked) 될 때 Name Server 에 연결하여 Server가 상주하는 Transport Address를 결정.

 

    - Binding 은 2가지로 구성됨.

      ==> Naming & Locating

      ==> 제공할 Service를 가진 Server는그것에 대한 Interface를 보냄(Export). Interface를 보내면 Client가 사용할 수 있도록 System에 등록.

      ==> Client 는 통신 시작 전 (Export 한) Interface 를 가져와야(Import) 함

 


 

  4) [RPC 와 관련된 'Call Semantics(의미 체계)']

    - 아래 선택에 따라 분류됨.

      A. Retry Request Message : Server가 실패했거나 수진자가 Message를 못 받으면, 요청 Message 전송을 재시도 할 지의 여부

      B. Duplicate Filtering : 중복된 Server 요청을 제거

      C. 결과 Retransmission (재전송) : Server 측에서 작업을 다시 실행하지 않고 손실된 Message를 재전송.

 

 


 

<장점>

  1) Abstraction 을 제공.

    ==> Network 의 Message-Passing 특성 통신이 User에게 숨겨짐.

 

  2) RPC 는 종종 성능 향상을 위해 여러 Protocol Layer(계층)을 생략함. (참고 : OSI 7계층 구조)

    ==> Program이 여러번 RPC를 Invoke(호출) 할 수 있기에 적은 성능 향상 조차 이득.

 

  3) RPC를 통해 Local 환경 뿐 아니라 분산 환경도 Application에 사용 가능함.

 

  4) RPC Code에 대한 Re-writing 과 Re-developing 의 노력이 최소화.

 

  5) RPC가 Process-Oriented(지향) 및 Thread 지향 모델을 지원.

 


 

<참조 1> https://www.w3.org/History/1992/nfs_dxcern_mirror/rpc/doc/Introduction/WhatIs.html

<참조 2> https://www.ibm.com/docs/en/aix/7.1?topic=concepts-remote-procedure-call

<참조 3> https://www.geeksforgeeks.org/remote-procedure-call-rpc-in-operating-system/

<참조 4>

 

 

'Programing > Knowledge' 카테고리의 다른 글

[CS] Batch File 동작 원리(Operating Principle)  (0) 2022.12.10
[CS] Stub  (0) 2022.12.09
[CS] Mount  (0) 2022.12.07
[CS] Cyclic Dependency  (2) 2022.12.04

댓글