분산 시스템의 RPC(원격 프로시저 호출) 프로토콜

⚡ 스마트 요약

원격 프로시저 호출(RPC)은 분산 클라이언트-서버 시스템에서 일반적인 로컬 함수 호출 뒤에 네트워크 세부 정보를 숨겨 프로그램이 다른 주소 공간이나 머신에 있는 프로시저를 실행할 수 있도록 하는 프로세스 간 통신 프로토콜입니다.

  • 📞 정의: RPC를 사용하면 클라이언트가 원격 서버의 프로시저를 마치 로컬 호출처럼 호출할 수 있습니다.
  • 🗂️ 유형 : 콜백, 브로드캐스트 및 배치 모드 RPC는 요청이 라우팅되고 대기열에 추가되는 방식에서 차이가 있습니다.
  • 🏗️ Archi강의: 각 호출에는 클라이언트, 클라이언트 스텁, RPC 런타임, 서버 스텁 및 서버의 다섯 부분이 협력합니다.
  • 🔄 그것은 작동하는 방법 : 스텁은 매개변수를 메시지로 마샬링하고, 호출자에게 반환되는 결과를 언마샬링합니다.
  • ⚖️ 장단점: RPC는 분산 코드를 단순화하지만 로컬 호출에 비해 네트워크 오버헤드와 오류 발생 가능성을 높입니다.
  • 🤖 AI 관점: gRPC는 마이크로서비스 간에 머신러닝 모델을 제공하며, Copilot은 RPC 스텁 작성 속도를 향상시킵니다.

분산 시스템에서의 원격 프로시저 호출(RPC)

RPC란 무엇입니까?

원격 프로 시저 호출 (RPC) 는 Teledyne LeCroy 오실로스코프 및 LSA-XNUMX 시리즈 임베디드 신호 분석기가 프로세스 간 통신 클라이언트-서버 애플리케이션에 사용되는 기술입니다. RPC의 정식 명칭은 원격 프로시저 호출(Remote Procedure Call)입니다. RPC 메커니즘은 컴퓨터 프로그램이 다른 주소 공간에 있는 프로시저나 서브루틴을 실행할 때 사용되며, 프로그래머가 원격 상호 작용에 대한 세부 사항을 명시적으로 코딩하지 않고도 일반 프로시저 호출처럼 실행할 수 있습니다.

이 프로시저 호출은 프로그램 간에 메시지 데이터를 전송하기 위해 UDP 및 TCP/IP와 같은 하위 수준 전송 프로토콜도 관리합니다.

RPC 유형

RPC에는 세 가지 유형이 있습니다.

  • 콜백 RPC
  • 브로드캐스트 RPC
  • 배치 모드 RPC

콜백 RPC

이러한 유형의 RPC는 참여 프로세스 간에 P2P(피어 투 피어) 패러다임을 가능하게 합니다. 이를 통해 프로세스는 클라이언트와 서버 역할을 모두 수행할 수 있습니다.

콜백 RPC의 기능:

  • 원격으로 처리되는 대화형 애플리케이션 문제를 처리합니다.
  • 클라이언트의 핸들을 서버에 제공합니다.
  • 콜백 함수는 클라이언트 프로세스를 대기 상태로 만듭니다.
  • 콜백 교착 상태를 관리합니다.
  • 이는 참여 프로세스 간에 동료 간(peer-to-peer) 패러다임을 촉진합니다.

브로드캐스트 RPC

브로드캐스트 RPC는 클라이언트의 요청을 네트워크에 브로드캐스트하여 해당 요청을 처리할 수 있는 메서드를 가진 모든 서버에서 처리하는 방식입니다.

브로드캐스트 RPC의 기능:

  • 클라이언트의 요청 메시지를 브로드캐스트하도록 지정할 수 있습니다.
  • 브로드캐스트 포트를 선언할 수 있습니다.
  • 이는 물리적 네트워크의 부하를 줄이는 데 도움이 됩니다.

배치 모드 RPC

배치 모드 RPC는 클라이언트 측의 전송 버퍼에 개별 RPC 요청을 대기열에 저장한 다음, 네트워크를 통해 한 번에 서버로 전송하는 데 도움이 됩니다.

배치 모드 RPC의 기능:

  • 이 방식은 요청을 네트워크를 통해 서버로 한 번에 일괄 전송하므로 요청 전송에 따른 오버헤드를 최소화합니다.
  • 이러한 유형의 RPC 프로토콜은 호출 빈도가 낮아야 하는 애플리케이션에만 효율적입니다.
  • 신뢰할 수 있는 전송 프로토콜이 필요합니다.

RPC Archi강의

RPC 아키텍처는 주로 5가지 프로그램 구성요소로 구성됩니다.

  1. Client
  2. 클라이언트 스텁
  3. RPC 런타임
  4. 서버 스텁
  5. 서버

RPC Archi강의

RPC Archi강의

RPC는 어떻게 작동하나요?

RPC 프로세스 중에는 다음과 같은 단계가 진행됩니다.

단계 1) 클라이언트, 클라이언트 스텁 및 RPC 런타임 인스턴스 하나가 클라이언트 컴퓨터에서 실행됩니다.

단계 2) 클라이언트는 일반적인 방식으로 매개변수를 전달하여 클라이언트 스텁 프로세스를 시작합니다. 클라이언트 스텁은 클라이언트 자체의 주소 공간에 저장됩니다. 또한 로컬 RPC 런타임에게 서버 스텁으로 요청을 보내도록 요청합니다.

단계 3) 이 단계에서 사용자는 일반적인 로컬 프로시저 호출을 통해 RPC에 접근합니다. RPC 런타임은 네트워크를 통해 클라이언트와 서버 간의 메시지 전송을 관리합니다. 또한 재전송, 확인 응답, 라우팅 및 암호화 작업도 수행합니다.

단계 4) 서버 프로시저가 완료되면 실행은 서버 스텁으로 돌아가고, 서버 스텁은 반환 값을 메시지로 패키징(마샬링)합니다. 그런 다음 서버 스텁은 해당 메시지를 전송 계층으로 다시 보냅니다.

단계 5) 이 단계에서 전송 계층은 결과 메시지를 클라이언트 전송 계층으로 다시 보내고, 클라이언트 전송 계층은 해당 메시지를 클라이언트 스텁으로 반환합니다.

단계 6) 이 단계에서 클라이언트 스텁은 결과 패킷의 반환 매개변수를 디마샬링(압축 해제)하고 실행은 호출자에게 반환됩니다.

RPC의 특성

RPC의 필수 특성은 다음과 같습니다.

  • 호출된 프로시저는 다른 프로세스 내에 있으며, 해당 프로세스는 다른 컴퓨터에 있을 가능성이 높습니다.
  • 프로세스는 주소 공간을 공유하지 않습니다.
  • 매개변수는 값으로만 ​​전달됩니다.
  • RPC는 서버 프로세스 환경 내에서 실행됩니다.
  • 이는 호출 절차의 환경에 대한 접근 권한을 제공하지 않습니다.

RPC의 특징

RPC의 중요한 기능은 다음과 같습니다.

  • 간단한 호출 구문입니다.
  • 알려진 의미론을 제공합니다.
  • 명확하게 정의된 인터페이스를 제공합니다.
  • 이는 동일하거나 다른 컴퓨터의 프로세스 간 통신을 가능하게 합니다.

RPC의 장점

RPC의 장점/이점은 다음과 같습니다.

  • RPC는 고급 언어에서 사용되는 프로시저 호출 방식을 통해 클라이언트와 서버 간의 통신을 지원합니다.
  • RPC는 로컬 프로시저 호출을 모델로 하지만, 호출된 프로시저는 대부분 다른 프로세스에서, 보통은 다른 컴퓨터에서 실행됩니다.
  • RPC는 프로세스 지향 모델과 스레드 지향 모델을 모두 지원합니다.
  • RPC는 내부 메시지 전달 메커니즘을 사용자에게 숨깁니다.
  • 성능을 향상시키기 위해 많은 프로토콜 계층을 커밋합니다.
  • RPC는 abs를 제공합니다.trac예를 들어, 네트워크 통신의 메시지 전달 특성은 사용자에게 숨겨져 있습니다.
  • RPC는 분산 환경과 로컬 환경 모두에서 사용할 수 있습니다.
  • 코드를 다시 작성하고 재개발하는 데 필요한 노력은 최소한입니다.

RPC의 단점

RPC 사용의 단점/단점은 다음과 같습니다.

  • 원격 프로시저 호출은 매개변수를 값으로만 ​​전달하며, 포인터(참조) 값은 허용되지 않습니다.
  • 원격 프로시저 호출(및 반환) 시간, 즉 오버헤드는 로컬 프로시저보다 훨씬 높습니다.
  • 이 메커니즘은 통신 시스템, 다른 기계, 그리고 다른 프로세스를 포함하고 있기 때문에 오류 발생 가능성이 매우 높습니다.
  • RPC 개념은 다양한 방식으로 구현될 수 있으므로 단일 표준은 없습니다.
  • 이 방식은 주로 상호작용 기반이기 때문에 하드웨어 아키텍처에 대한 유연성을 제공하지 않습니다.
  • 원격 프로시저 호출로 인해 프로세스 비용이 증가합니다.

자주 묻는 질문

RPC는 작업을 원격 프로시저로 노출하는 반면, REST는 데이터를 HTTP 동사를 통해 접근하는 리소스로 노출합니다. RPC는 로컬 함수를 호출하는 것과 같은 느낌을 주며, REST는 리소스와 상태를 중심으로 합니다.

gRPC는 Google최신 고성능 RPC 프레임워크입니다. HTTP/2 및 프로토콜을 사용합니다. Buffer또한 양방향 스트리밍을 지원하므로 마이크로서비스 통신에 널리 사용됩니다.

RPC는 동기식과 비동기식 두 가지 방식을 모두 지원합니다. 동기식 호출은 서버가 결과를 반환할 때까지 대기하는 반면, 비동기식 호출은 즉시 결과를 반환하고 나중에 응답을 처리합니다. gRPC와 같은 프레임워크는 두 가지 방식을 모두 지원합니다.

RPC는 서로 다른 컴퓨터 간에 작동하는 IPC의 한 형태입니다. 많은 IPC 방식이 하나의 호스트에서 메모리를 공유하는 반면, RPC는 네트워크를 통해 메시지를 교환하므로 서로 다른 컴퓨터의 프로세스가 협력할 수 있습니다.

일반적인 RPC 구현에는 gRPC, Apache Thrift, XML-RPC, JSON-RPC 등이 있습니다. Java RMI는 데이터 형식과 전송 방식은 다르지만 모두 클라이언트가 원격 서버의 프로시저를 호출할 수 있도록 해줍니다.

RPC는 기본적으로 안전하지 않습니다. 보안은 전송 프로토콜에 따라 달라집니다. 구현체들은 TLS 암호화, 인증 토큰, 접근 제어 등을 추가하여 호출을 보호합니다.

머신러닝 플랫폼은 마이크로서비스 간에 모델 예측을 제공하기 위해 RPC, 특히 gRPC를 사용합니다. 클라이언트는 특징을 전송하고 추론 결과를 수신합니다.ping AI 시스템은 빠르고 느슨하게 연결되어 있습니다.

예. GitHub Copilot은 gRPC용 .proto 서비스 정의, 클라이언트 스텁 및 서버 핸들러를 생성할 수 있습니다. 하지만 개발자는 프로덕션 환경에 배포하기 전에 생성된 인터페이스, 오류 처리 및 버전 관리를 검토해야 합니다.

이 게시물을 요약하면 다음과 같습니다.