원격 프로시저 호출(Remote Procedure Call, RPC)은 분산 클라이언트-서버 기반 애플리케이션을 구축하기 위한 강력한 기술입니다. 함수 호출 또는 서브루틴 호출이라고도 합니다. 원격 프로시저 호출은 프로그래머가 원격 상호 작용에 대한 세부 정보를 명시적으로 지정하지 않고 컴퓨터 프로그램이 로컬 프로시저 호출로 코딩된 다른 주소 공간에서 프로시저를 실행하도록 하는 경우입니다. 프로그래머는 서브루틴이 실행 프로그램에 대해 로컬이든 원격이든 관계없이 본질적으로 동일한 코드를 작성합니다. 이는 요청-응답 메시지 전달 시스템을 통해 구현된 클라이언트-서버 상호 작용의 한 형태입니다.
RPC 모델은 다음을 의미합니다. 위치 투명성 호출 절차는 로컬이든 원격이든 거의 동일합니다. 일반적으로 동일하지 않으므로 로컬 통화와 원격 통화를 구별할 수 있습니다. 원격 통화는 일반적으로 로컬 통화보다 훨씬 느리고 신뢰성이 떨어지므로 이를 구별하는 것이 중요합니다.
RPC는 서로 다른 프로세스가 서로 다른 주소 공간을 갖는다는 점에서 IPC(프로세스 간 통신)의 한 형태입니다. 물리적 주소 공간이 동일하더라도 동일한 호스트 시스템에 서로 다른 가상 주소 공간이 있습니다. 서로 다른 호스트에 있으면 물리적 주소 공간이 다릅니다.
원격 프로시저 호출을 거는 방법
호출 환경이 일시 중지되고 프로시저 매개변수가 네트워크를 통해 프로시저가 실행될 환경으로 전송되고 그곳에서 프로시저가 실행됩니다.
프로시저가 완료되고 결과가 생성되면 호출 환경으로 다시 전송되며, 여기서 일반 프로시저 호출에서 반환되는 것처럼 실행이 재개됩니다.
참고: RPC는 호출자와 수신자 간에 제어 흐름이 번갈아 나타나는 클라이언트-서버(예: 쿼리-응답) 상호 작용에 특히 적합합니다. 개념적으로 클라이언트와 서버는 동시에 실행되지 않습니다. 대신 실행 스레드가 호출자에서 호출 수신자로 점프한 다음 다시 돌아옵니다.
RPC 유형
운영 체제에는 다음과 같은 세 가지 유형의 원격 프로시저 호출(RPC)이 있습니다.
1. 콜백 RPC
이러한 유형의 RPC는 참여 프로세스 간의 P2P 패러다임을 가능하게 합니다. 이는 프로세스가 클라이언트 서비스이자 서버 서비스가 되는 데 도움이 됩니다. 콜백 RPC에는 다음과 같은 기능이 있습니다.
sed 명령
- 원격으로 처리된 대화형 애플리케이션 문제.
- 클라이언트 핸들이 있는 서버를 제공합니다.
- 콜백은 클라이언트 프로세스를 기다리게 만듭니다.
- 콜백 교착 상태를 관리합니다.
- 이는 참여 프로세스 간의 P2P 패러다임을 촉진합니다.
2. 브로드캐스트 RPC
브로드캐스트 RPC는 네트워크에서 클라이언트의 요청 브로드캐스트이며 해당 요청을 처리하는 방법으로 모든 서버에서 처리됩니다. 브로드캐스트 RPC에는 다음과 같은 기능이 있습니다.
- 클라이언트의 요청 메시지가 브로드캐스트되어야 함을 지정할 수 있습니다.
- 브로드캐스트 포트를 선언할 수 있습니다.
- 물리적 네트워크의 부하를 줄이는 데 도움이 됩니다.
3. 배치 모드 RPC
배치 모드 RPC는 클라이언트측 전송 버퍼에 RPC 요청을 대기열에 추가하고 별도의 요청을 한 다음 네트워크를 통해 일괄적으로 서버에 보내는 데 도움이 됩니다. 배치 모드 RPC에는 다음과 같은 기능이 있습니다.
자바 브레이크
- 요청을 네트워크를 통해 일괄적으로 서버에 전송함으로써 요청 전송과 관련된 오버헤드를 최소화합니다.
- 이러한 유형의 RPC 프로토콜은 낮은 호출 속도가 필요한 애플리케이션에만 효율적입니다.
- 안정적인 전송 프로토콜이 필요합니다.
RPC는 무엇을 합니까?
RPC 프레임워크를 사용하는 프로그램 문이 실행 가능한 프로그램으로 컴파일되면 원격 프로시저 코드를 나타내는 컴파일된 코드에 스텁이 포함됩니다.
프로그램이 실행되고 프로시저 호출이 실행되면 스텁은 요청을 수신하여 이를 로컬 컴퓨터의 클라이언트 런타임 프로그램에 전달합니다. 클라이언트 스텁이 처음 호출되면 이름 서버에 접속하여 서버가 있는 전송 주소를 결정합니다.
클라이언트 런타임 프로그램은 원격 컴퓨터와 서버 애플리케이션의 주소를 지정하는 방법을 알고 있으며 원격 프로시저를 요청하는 메시지를 네트워크를 통해 보냅니다. 마찬가지로 서버에는 원격 프로시저 자체와 인터페이스하는 런타임 프로그램과 스텁이 포함되어 있으며 응답 요청 프로토콜도 동일한 방식으로 반환됩니다.
RPC의 특징
운영 체제에서 RPC(원격 프로시저 호출)에는 다음과 같은 기능이 있습니다.
- RPC는 사용자에게 메시지 전달 프로세스의 복잡성을 숨깁니다.
- RPC는 전송 계층과 같은 OSI 모델의 특정 계층만 사용합니다.
- 클라이언트는 고급 언어를 사용하여 서버와 통신할 수 있습니다.
- RPC는 로컬 환경과 원격 환경 모두에서 잘 작동합니다.
- RPC의 프로그램은 간단한 코드로 작성되어 프로그래머가 쉽게 이해할 수 있습니다.
- 운영 체제는 RPC와 관련된 프로세스와 스레드를 쉽게 처리할 수 있습니다.
- 운영 체제는 사용자로부터 RPC의 추상화를 숨깁니다.
RPC는 어떻게 작동하나요?
원격 프로시저 호출이 호출되면 호출 환경이 일시 중단되고 프로시저 매개변수가 네트워크를 통해 프로시저가 실행될 환경으로 전송된 다음 해당 환경에서 프로시저가 실행됩니다.
프로시저가 완료되면 결과가 호출 환경으로 다시 전송되며, 여기서 일반 프로시저 호출에서 반환되는 것처럼 실행이 재개됩니다.
RPC(원격 프로시저 호출)는 운영 체제에서 다음 단계로 작동합니다.
1 단계: 클라이언트, 클라이언트 스텁 및 RPC 런타임은 클라이언트 시스템에서 실행됩니다.
2 단계: 클라이언트는 일반적인 방법으로 매개변수를 전달하여 클라이언트 스텁 프로세스를 시작합니다. 프로시저 매개변수의 패킹을 호출합니다. 마샬링 . 클라이언트 스텁은 클라이언트 자체 주소 공간 내에 저장되며 로컬 RPC 런타임에 서버 스텁으로 다시 보내도록 요청합니다.
3단계: 이 단계에서 사용자는 정기적인 Local Procedural Call을 통해 RPC에 접근할 수 있습니다. RPC 런타임은 클라이언트와 서버의 네트워크 간 메시지 전송을 관리하고 재전송, 승인, 라우팅 및 암호화 작업도 수행합니다.
리눅스 단축키
4단계: 서버 프로시저를 완료한 후 서버 스텁으로 돌아가서 반환 값을 메시지로 압축(마샬링)합니다. 그런 다음 서버 스텁은 메시지를 전송 계층으로 다시 보냅니다.
5단계: 이 단계에서 전송 계층은 결과 메시지를 클라이언트 전송 계층으로 다시 보내고, 클라이언트 전송 계층은 메시지를 클라이언트 스텁으로 다시 반환합니다.
6단계: 이 단계에서 클라이언트 스텁은 결과 패킷의 반환 매개변수를 디마샬링(압축해제)하고 실행 프로세스가 호출자에게 반환됩니다.
RPC(원격 프로시저 호출) 문제
운영 체제에서 원격 프로시저 호출 또는 RPC는 다음과 같이 해결해야 하는 몇 가지 문제에 직면했습니다.
1. RPC 런타임
RPC 런타임 시스템은 RPC 메커니즘의 기반이 되는 네트워크 통신을 처리하는 루틴 및 서비스 라이브러리입니다. RPC 호출 과정에서 클라이언트측 및 서버측 런타임 시스템 코드는 바인딩을 처리하고, 적절한 프로토콜을 통해 통신을 설정하고, 클라이언트와 서버 간에 호출 데이터를 전달하고, 통신 오류를 처리합니다.
2. 스텁
스텁의 기능은 프로그래머가 작성한 애플리케이션 코드에 투명성을 제공하는 것입니다.
3. 바인딩
행 대 열
고객은 누구에게 전화해야 하는지, 서비스가 어디에 있는지 어떻게 알 수 있나요?
가장 유연한 솔루션은 동적 바인딩을 사용하고 RPC가 처음 만들어질 때 런타임에 서버를 찾는 것입니다. 클라이언트 스텁이 처음 호출되면 이름 서버에 접속하여 서버가 상주하는 전송 주소를 결정합니다. 바인딩은 두 부분으로 구성됩니다.
4. RPC와 관련된 호출 의미론
주로 다음과 같은 선택으로 분류되는데,
RPC의 특성
원격 프로시저 호출의 필수 특성은 다음과 같습니다.
- 호출된 프로시저가 다른 프로세스에 있으며, 이는 다른 컴퓨터에 있을 가능성이 높습니다.
- 프로세스는 주소 공간을 공유하지 않습니다.
- 매개변수는 값으로만 전달됩니다.
- RPC는 서버 프로세스 환경 내에서 실행됩니다.
- 호출 프로시저 환경에 대한 액세스를 제공하지 않습니다.
RPC의 장점
RPC의 장점은 다음과 같습니다.
- RPC 방법은 클라이언트가 고급 언어의 프로시저 호출을 기존 방식으로 사용하여 서버와 통신할 수 있도록 도와줍니다.
- RPC 방법은 로컬 프로시저 호출을 모델로 하지만 프로시저가 다른 프로세스, 일반적으로 다른 컴퓨터에서 실행될 가능성이 높습니다.
- RPC는 프로세스 및 스레드 지향 모델을 지원합니다.
- RPC는 내부 메시지 전달 메커니즘을 사용자에게 숨깁니다.
- 코드를 다시 작성하고 재개발하는 데 필요한 노력은 최소화됩니다.
- 원격 프로시저 호출은 배포 및 로컬 환경에 사용될 수 있습니다.
- 성능을 향상시키기 위해 많은 프로토콜 계층을 커밋합니다.
- RPC는 추상화를 제공합니다. 예를 들어, 네트워크 통신의 메시지 전달 특성은 사용자에게 숨겨져 있습니다.
- RPC를 사용하면 로컬 환경뿐만 아니라 분산 환경에서도 응용 프로그램을 사용할 수 있습니다.
- RPC 코드를 사용하면 다시 작성하고 재개발하는 노력이 최소화됩니다.
- RPC가 지원하는 프로세스 지향 및 스레드 지향 모델입니다.
RPC의 단점
다음은 RPC 사용의 몇 가지 단점이나 단점입니다.
- 원격 프로시저 호출은 허용되지 않는 값과 포인터 값으로만 매개변수를 전달합니다.
- 원격 프로시저 호출(및 반환) 시간(즉, 오버헤드)은 로컬 프로시저보다 훨씬 낮을 수 있습니다.
- 이 메커니즘은 통신 시스템, 다른 시스템 및 다른 프로세스를 포함하므로 오류에 매우 취약합니다.
- RPC 개념은 다양한 방식으로 구현될 수 있지만 이는 표준화될 수 없습니다.
- RPC는 대부분 상호 작용 기반이므로 하드웨어 아키텍처에 대한 유연성을 제공하지 않습니다.
- 원격 프로시저 호출로 인해 프로세스 비용이 증가합니다.