일반적으로 RPC는 REST보다 훨씬 더 많은 언어 통합을 제공합니다. 언급했듯이, 특히 단일 분산 시스템에 여러 언어로 작성된 코드를 실행하는 여러 호스트가 포함 된 경우 규모, 오류 처리, 유형 안전 등과 관련하여 여러 가지 문제가 발생합니다. 그러나 RPC, REST 및 둘 다를 동시에 사용하는 비즈니스 시스템을 작성한 후에 특정 경우 RPC over REST를 선택해야하는 몇 가지 이유가 있음을 알게되었습니다.
RPC가 더 적합하다는 것을 알게 된 경우는 다음과 같습니다.
- 단단한 커플 링. 시스템의 (분산 된) 구성 요소는 함께 작동하도록 설계되었으며 하나를 변경하면 다른 모든 요소에 영향을 줄 수 있습니다. 향후 다른 시스템과 통신하도록 구성 요소를 조정해야 할 가능성은 거의 없습니다.
- 안정적인 커뮤니케이션. 구성 요소는 대기 시간 문제, 패킷 손실 등이 발생할 가능성이 거의없는 동일한 호스트 또는 네트워크에서 완전히 서로 통신합니다. 그러나 여전히 이러한 경우를 처리하도록 시스템을 설계해야합니다.
- 통일 언어. 모든 (또는 대부분의) 구성 요소는 단일 언어로 작성됩니다. 다른 언어로 작성된 추가 구성 요소가 나중에 추가 될 가능성은 없습니다.
IDL에 대한 요점과 관련하여 REST 시스템에서 REST 요청 및 응답의 데이터를 사용중인 내부 데이터 표시로 변환하는 코드도 작성해야합니다. IDL 소스 (좋은 설명 포함)는 인터페이스의 문서 역할을 할 수 있으며 REST API에 대해 별도로 작성하고 유지 보수해야합니다.
위의 세 가지 항목은 더 큰 시스템의 하나의 구성 요소를 빌드하려고 할 때 종종 발생합니다. 필자의 경험에 따르면 이러한 구성 요소는 종종 해당 하위 시스템이 독립적으로 장애를 일으켜 다른 하위 시스템이나 전체 구성 요소의 전체 장애를 유발하지 않아야하는 구성 요소입니다. 이러한 목표를 달성하기 위해 많은 시스템이 Erlang으로 작성되었으며 경우에 따라 다른 언어로 시스템을 작성하고 RPC를 사용하여 이러한 이점을 얻는 것보다 Erlang이 더 나은 선택 일 수 있습니다.
대부분의 엔지니어링 문제와 마찬가지로 프로세스 간 통신 문제에 대한 단일 솔루션은 없습니다. 설계중인 시스템을보고 사용 사례에 가장 적합한 선택을해야합니다.