리모트 프로시저 호출

Remote procedure call

분산 컴퓨팅에서 리모트 프로시저 호출(RPC)은 컴퓨터 프로그램이 프로시저(서브루틴)를 다른 어드레스 공간(공유 네트워크상의 다른 컴퓨터 상에서만)에서 실행시키는 경우로, 프로그래머가 리모트 인터랙션을 위한 상세 내용을 명시적으로 부호화하지 않고 일반(로컬) 프로시저 호출인 것처럼 부호화된다.즉, 프로그래머는 서브루틴이 실행 중인 프로그램의 로컬인지 리모트인지에 관계없이 기본적으로 동일한 코드를 작성합니다.이것은 클라이언트와 서버의 대화 형식(발신자는 클라이언트, 실행자는 서버)으로, 통상, 요구 응답 메시지 전달 시스템을 개입시켜 실장됩니다.오브젝트 지향 프로그래밍 패러다임에서 RPC는 리모트 메서드 호출(RMI)로 나타난다.RPC 모델은 로케이션의 투과성 수준을 의미합니다.즉, 콜 프로시저는 로컬인지 리모트인지에 관계없이 거의 동일하지만, 통상은 동일하지 않기 때문에 로컬콜과 리모트콜을 구별할 수 있습니다.리모트 콜은 보통 로컬콜보다 훨씬 느리고 신뢰성이 떨어지기 때문에 구별이 중요합니다.

RPC는 Inter-Process Communication(IPC; 프로세스 간 통신)의 한 형태입니다.즉, 프로세스마다 주소 공간이 다릅니다.같은 호스트 머신 상에 있는 경우 물리 주소 공간은 동일하지만 물리 주소 공간은 다릅니다.이 개념을 구현하기 위해 다양한(대부분 호환되지 않는) 기술이 사용되었습니다.

역사와 기원

요청-응답 프로토콜은 1960년대 후반의 초기 분산 컴퓨팅으로 거슬러 올라가며, 네트워크 운영 모델로서의 원격 프로시저 호출의 이론적 제안은 1970년대, 실질적인 구현은 1980년대 초반으로 거슬러 올라간다.Bruce Jay [1]Nelson은 일반적으로 1981년에 "원격 프로시저 호출"이라는 용어를 만든 것으로 알려져 있습니다.

최신 운영 체제에서 사용되는 원격 프로시저 호출은 프로세스 [3]동기화를 위해 요청-응답 통신 프로토콜을 사용한 RC 4000 멀티프로그래밍 [2]시스템으로 거슬러 올라갑니다.네트워크 조작을 리모트프로시저 콜로서 취급하는 개념은 적어도 초기 ARPANET [4]문서에서는 1970년대까지 거슬러 올라갑니다.1978년 Per Brinch Hansen은 프로세스 [5]간의 프로시저 호출로 구성된 "외부 요청"에 기반한 분산 컴퓨팅용 언어인 분산 프로세스를 제안했습니다.

가장 초기의 실용적인 구현 중 하나는 1982년 Brian Randell과 동료들이 UNIX [6]머신 간의 Newcastle Connection을 위해 수행한 것입니다.곧이어 Andrew Birrell과 Bruce Nelson이 Xerox PARC[7][8][9]Cedar 환경에서 "Lupine"을 발표했습니다.Lupine은 자동으로 stub를 생성하여 안전한 바인딩을 제공하고 효율적인 [8]통신 프로토콜을 사용했습니다.RPC의 첫 번째 비즈니스 용도 중 하나는 1981년 "Courier"라는 이름으로 Xerox에 의해 사용되었습니다.Unix에서 RPC의 첫 번째 인기 있는 구현은 네트워크 파일 시스템(NFS)의 기반으로 사용되는 Sun의 RPC(현재의 ONC RPC)입니다.

1990년대 객체 지향 프로그래밍의 보급으로 Common Object Request Broker Architecture(CORBA, 1991년) 및 Java 원격 메서드 호출과 같은 원격 메서드 호출(RMI)의 대체 모델이 널리 구현되었습니다.RMI는 인터넷의 증가와 함께, 특히 2000년대에 인기가 떨어졌다.

메시지 전달

RPC는 요청-응답 프로토콜입니다.RPC는 클라이언트에 의해 개시되며, RPC는 기존의 리모트서버에 요구 메시지를 송신하여 지정된 파라미터를 사용하여 지정된 프로시저를 실행합니다.리모트 서버는 클라이언트에 응답을 송신하고, 애플리케이션은 그 프로세스를 속행합니다.서버가 콜을 처리하는 동안 클라이언트가 XMLHttpRequest 등의 비동기 요구를 서버에 송신하지 않는 한 클라이언트는 차단됩니다(서버가 처리를 완료할 때까지 대기한 후 실행을 재개합니다).다양한 구현에는 많은 변형과 섬세함이 있으며, 그 결과 다양한 (호환되지 않는) RPC 프로토콜이 발생합니다.

리모트 프로시저 콜과 로컬콜의 중요한 차이점은 예측할 수 없는 네트워크 문제로 리모트콜이 실패할 수 있다는 것입니다.또, 통상, 발신자는 리모트프로시저가 실제로 기동되었는지 아닌지를 모르는 채, 이러한 장해에 대처할 필요가 있습니다.Idempotent 프로시저(여러 번 호출해도 추가 효과가 없는 프로시저)는 쉽게 처리되지만 리모트프로시저를 호출하는 코드가 주의 깊게 기술된 하위 서브시스템에 한정되는 경우가 많습니다.

이벤트의 순서

  1. 클라이언트는 클라이언트의 스터브를 호출합니다.콜은 로컬프로시저 콜이며 파라미터는 통상적인 방법으로 스택에 푸시됩니다.
  2. 클라이언트 스터브는 파라미터를 메시지에 패키지하고 시스템콜을 발신하여 메시지를 발송합니다.파라미터를 패킹하는 것을 마샬링이라고 합니다.
  3. 클라이언트의 로컬 운영 체제가 클라이언트 시스템에서 서버 시스템으로 메시지를 보냅니다.
  4. 서버 머신의 로컬오퍼레이팅시스템은 착신 패킷을 서버 스터브에 전달합니다.
  5. 서버 스터브는 메시지에서 파라미터를 언팩합니다.파라미터의 압축을 해제하는 것을 언마샬링이라고 합니다.
  6. 마지막으로 서버 스터브가 서버 프로시저를 호출합니다.응답은 같은 순서를 역방향으로 추적합니다.

표준 접점 메커니즘

다른 클라이언트가 서버에 액세스 할 수 있도록 표준화된 RPC 시스템이 다수 작성되었습니다.대부분의 경우 Interface Description Language(IDL; 인터페이스 기술 언어)를 사용하여 다양한 플랫폼에서 RPC를 호출할 수 있습니다.다음으로 IDL 파일을 사용하여 클라이언트와 서버 간에 인터페이스할 코드를 생성할 수 있습니다.

아날로그

RPC 의 실장 및 아날로그에는, 다음과 같은 것이 있습니다.

언어 고유의

  • Java의 Java Remote Method Invocation(Java RMI) API는 표준 Unix RPC 메서드와 유사한 기능을 제공합니다.
  • Go는 RPC를 구현하기 위한 패키지 rpc를 제공하며 비동기 콜을 지원합니다.
  • Java RMI의[10] 기반이 된 Modula-3의 네트워크 객체
  • RPyC는 Python에 RPC 메커니즘을 구현하고 비동기 콜을 지원합니다.
  • DRB(Distributed Ruby)를 사용하면 Ruby 프로그램이 같은 머신 또는 네트워크를 통해 서로 통신할 수 있습니다.DRB는 Remote Method Invocation(RMI; 리모트메서드 호출)을 사용하여 프로세스 간에 명령어와 데이터를 전달합니다.
  • Erlang은 프로세스 지향적이며 노드 간 메시지 전달과 로컬 프로세스 간 메시지 전달을 통해 배포 및 RPC를 기본적으로 지원합니다.
  • Elixir는 Erlang VM을 기반으로 구축되어 에이전트 및 메시지 전달을 통해 동일한 네트워크의 프로세스 통신(OS 프로세스가 아닌 Elixir/Erlang 프로세스)을 즉시 실행할 수 있습니다.

응용 프로그램 고유

  • 액션 메시지 포맷(AMF)을 사용하면 Adobe Flex 응용 프로그램이 백엔드 또는 AMF를 지원하는 다른 응용 프로그램과 통신할 수 있습니다.
  • 원격 기능 호출은 SAP 시스템 간 통신을 위한 표준 SAP 인터페이스입니다.RFC는 리모트시스템에서 실행되는 함수를 호출합니다.

일반

  • NFS(Network File System)는 RPC의 가장 중요한 사용자 중 하나입니다.
  • Sun Microsystems의 네트워크 컴퓨팅 리모트 프로시저 호출 열기
  • D-Bus 오픈 소스 IPC 프로그램은 CORBA와 유사한 기능을 제공합니다.
  • SORCER는 연합 메서드 호출을 위한 API 및 ;Exsertion-Oriented Language(EOL)를 제공합니다.
  • XML-RPC는 XML을 사용하여 콜 및 HTTP를 전송 메커니즘으로 인코딩하는 RPC 프로토콜입니다.
  • JSON-RPC는 JSON 인코딩 메시지를 사용하는 RPC 프로토콜입니다.
  • JSON-WSP는 JSON 인코딩 메시지를 사용하는 RPC 프로토콜입니다.
  • SOAP은 XML-RPC의 후계자이며 HTTP 기반 콜 부호화에 XML을 사용합니다.
  • ZeroCInternet Communications Engine(Ice) 분산 컴퓨팅 플랫폼.
  • 네트워크 서비스를 구축하기 위한 식각 프레임워크.
  • Apache Trift 프로토콜 및 프레임워크.
  • CORBA객체 요청 브로커라는 중간 계층을 통해 원격 프로시저 호출을 제공합니다.
  • Libevent는 RPC 서버와 클라이언트를 [11]작성하기 위한 프레임워크를 제공합니다.
  • Windows Communication Foundation은 의 응용 프로그램프로그래밍 인터페이스입니다연결된 서비스 지향 애플리케이션을 구축하기 위한 NET 프레임워크.
  • Microsoft.NET Remoteing은 Windows 플랫폼에 구현된 분산 시스템을 위한 RPC 기능을 제공합니다.WCF로 대체되었습니다.
  • Microsoft DCOM 에서는, DCE/RPC 에 근거하는 MSRPC 가 사용됩니다.
  • Open Software Foundation DCE/RPC 분산 컴퓨팅 환경(Microsoft도 실장).
  • Google Protocol Buffers(protobufs) 패키지에는 2015년[13]gRPC로 오픈 소스된[12] RPC 프로토콜에 사용되는 인터페이스 정의 언어가 포함되어 있습니다.
  • WAMP는 RPC와 Publish-Subscribe를 하나의 트랜스포트 어그노스틱 프로토콜로 결합합니다.
  • Google Web Toolkit은 비동기 [14]RPC를 사용하여 서버 서비스와 통신합니다.
  • Apache Avro는 클라이언트와 서버가 연결 핸드쉐이크에서 스키마를 교환하고 코드를 생성할 필요가 없는 RPC를 제공합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Bruce Jay Nelson (May 1981). Remote Procedure Call. PARC CSL-81-9 (Also CMU-CS-81-119). Xerox Palo Alto Research Center. 박사 논문
  2. ^ "Per Brinch Hansen • IEEE Computer Society". www.computer.org. Retrieved 2015-12-15.
  3. ^ Brinch Hansen, Per (1969). RC 4000 Computer Software: Multiprogramming System (PDF). Copenhagen, Denmark: Regnecentralen.
  4. ^ James E. White (December 23, 1975). "A High-Level Framework for Network-Based Resource Sharing". RFC 707. Augmentation Research Center. Retrieved July 11, 2011.
  5. ^ Brinch Hansen, Per (November 1978). "Distributed processes: a concurrent programming concept" (PDF). Communications of the ACM. 21 (11): 934–941. CiteSeerX 10.1.1.107.3108. doi:10.1145/359642.359651.
  6. ^ Brownbridge, David R.; Marshall, Lindsay F.; Randell, Brian (1982). "The Newcastle Connection" (PDF). Software: Practice and Experience. 12 (12): 1147–1162. doi:10.1002/spe.4380121206. Archived from the original (PDF) on 2016-08-16. Retrieved 2016-08-16.
  7. ^ Birrell, Andrew D.; Nelson, Bruce Jay (1984). "Implementing remote procedure calls" (PDF). ACM Transactions on Computer Systems. 2: 39–59. doi:10.1145/2080.357392.
  8. ^ a b "1994 – Andrew Birrell, Bruce Nelson: Remote Procedure Call". Software System Award citation. Association for Computing Machinery. Archived from the original on April 2, 2012. Retrieved July 11, 2011.
  9. ^ "SIGOPS Hall of Fame Award". Special Interest Group on Operating Systems. Association for Computing Machinery. Retrieved July 11, 2011.
  10. ^ 프로그래밍 언어의 A-Z: Modula-3 - a-z 프로그래밍 언어 2009-01-05 웨이백 머신에 보관.컴퓨터 세계2013-07-17에 회수.
  11. ^ libevent: 메인 페이지.Monkey.org 를 참조해 주세요.2013-07-17에 회수.
  12. ^ "Protocol Buffers - Google's data interchange format". Google project website. Retrieved November 1, 2011.
  13. ^ "gRPC open-source universal RPC framework". Google project website. Retrieved September 7, 2016.
  14. ^ "Google Web Toolkit". Google project website. Retrieved November 1, 2011.

외부 링크