2008-09-20 4 views
45

XML-RPC 또는 REST를 사용하는 솔루션의 단순성에 대한 논점은 이해하기 쉽고 논쟁하기가 쉽지 않습니다.SOAP 대 XML-RPC 또는 REST의 성능

나는 종종 SOAP의 증가 된 오버 헤드가 사용 된 대역폭과 대기 시간에도 상당한 영향을 미칠 수 있다는 주장을 종종 들었다. 충격을 수치화 한 테스트 결과를보고 싶습니다. 어느 누구라도 그러한 정보를 얻을 수있는 좋은 원천을 알고 있습니까?

답변

6

유익한 정보를 얻을 수있는 몇 가지 연구가 있습니다. 다음을 참조하십시오 :

MSDN Forums의 항목에 대한 (약간 구식) 흥미로운 성능 대화도 있습니다.

요컨대 대부분의 이러한 소스는 SOAP 및 REST가 범용 데이터와 거의 동일한 성능이라는 데 동의합니다. 그러나 일부 결과는 이진 데이터로 인해 REST가 실제로 성능이 떨어질 수 있음을 나타냅니다. 자세한 내용은 내가 링크 된 포럼의 링크를 참조하십시오.

19

프로토콜로 REST는 메시지 엔벨로프의 어떤 형식도 정의하지 않지만 SOAP에는이 표준이 있습니다.

그 때문에, 그 두 가지를 비교하고 비교하는 것은 다소 단순합니다. 그들은 오렌지에 사과입니다.

즉, SOAP 봉투 (데이터 빼기)는 몇 킬로미터 밖에되지 않으므로 SOAP와 REST를 통해 직렬화 된 개체를 검색하는 경우 눈에 띄는 속도 차이가 없어야합니다.

+1

이 유래에서 얻을 올바른 순서에

좀 더 자세한 정보를 의존하는 대신 매개 변수의 이름을 지정; 그것은 'http가 사용하는 것을 사용하십시오'라고 말하며, MIME 타입입니다. – pjz

+0

오, 정말요? 직렬화 된 C# 클래스를 보내고 싶습니다. REST 프로토콜의 소비자는 MIME 형식에서 구문 분석하는 방법을 알게 될 것입니다. – FlySwat

+23

나는 REST 프로토콜을 사용해 보려고 할 때 문제가 시작된다고 생각한다. REST는 HTTP 프로토콜을 사용할 수있는 아키텍처 스타일입니다. –

2

벤치마킹 질문에 대한 답을 모르겠지만 SOAP 형식에 대해 알고있는 것은 네입니다. 오버 헤드가 있지만 오버 헤드가 요청 당 증가하지 않습니다. 하나의 요소가있는 경우 웹 서비스에 대한 오버 헤드 + 하나의 요소 구성이 있고, 1000 개의 요소가 웹 서비스로 전송되면 오버 헤드 + 1000 요소가 생성됩니다. 오버 헤드는 XML 요청이 특정 작업에 맞게 형식화 될 때 발생하지만 요청의 모든 개별 인수 요소는 동일한 형식으로 지정됩니다.

반복적 인 짧은 데이터 버스트 (예 : 500 개 요소)를 고수하면 속도가 빨라집니다.

62

SOAP 대 REST 속도의 주된 영향은 유선 속도와 관련이 없지만 캐싱 가능성이 있습니다. REST는 XML을 통해 터널링하는 대신 웹의 의미를 사용하도록 제안하므로 RESTful 웹 서비스는 일반적으로 캐시 헤더를 올바르게 사용하도록 설계되어 프록시 캐싱과 로컬 브라우저 캐시와 같은 웹의 표준 인프라와 잘 작동한다. 또한 웹의 의미를 사용하면 ETags 및 자동 우편 압축과 같은 기능이 효율성을 높이는 방법으로 잘 이해됩니다.

.. 이제 벤치 마크를 원한다고합니다. 음, Google의 도움을 받아 one guy의 테스트 결과 REST가 SOAP보다 4-6 배 빠르며, 또 다른 paper은 REST를 선호하는 것으로 나타났습니다.

+3

좋은 답변 pjz, 당신은 당신의 대답이 XML-RPC에 대해 말할 것도없고 고려해야 할 최고의 선택들 중에 나타나지 않는 이유를 깨닫게 되었습니까? –

+1

"한 사람"에 대한 링크가 업데이트되었습니다. http://www.learnosity.com/techblog/2008/03/cfmx-soap-vs-rest-benchmarks/ – Fedearne

5

"pjz"의 답변에서 확장됩니다.

많은 정보 (get * 유형의 호출) 기반 SOAP 조작이있는 경우 현재 캐시 할 수있는 방법이 없습니다. 그러나 REST를 사용하여 이러한 동일한 작업을 구현하려는 경우 위에서 언급 한 것처럼 데이터 (비즈니스 컨텍스트에 따라 다름)를 캐시 할 수있는 가능성이 있습니다. SOAP은 조작을 위해 POST를 사용하기 때문에 서버 측에서 정보를 캐시 할 수 없습니다.

8

XML과 XML을 사용하는 다른 프로토콜은 일반적으로 메시지를 상당히 비싸게 만듭니다. 문맥에 따라 문제가 될 수도 있고 아닐 수도 있습니다.

JSON과 같은 것은 크기가 더 작고 serialise/deserialise가 더 빠를 수도 있지만 그 이유 때문에 배타적으로 사용하지 마십시오. 당신이 느끼는 것이 무엇이든간에 그 시간에 이해하고 그것을 변경하십시오.

일반적으로 HTTP를 사용하는 것 (많은 구현에서는 HTTP 1.1 킵 얼라이브 연결을 재사용하지 않는 한)은 각 요청에 대해 새로운 TCP 연결을 시작합니다. 이것은 특히 대기 시간이 긴 링크에서 상당히 나쁩니다. HTTPS가 훨씬 더 나쁩니다. 한 번의 발신자에서 한 명의 수신자로 많은 짧은 요청이있는 경우이 오버 헤드를 줄일 수있는 방법에 대해 생각해보십시오.

모든 종류의 RPC (SOAP 또는 기타)에 HTTP를 사용하면 항상 오버 헤드가 발생합니다. 일반적으로 다른 RPC 프로토콜을 사용하면 연결을 계속 열어 둘 수 있습니다.

4

SOAP의 속도가 확실히 느립니다. 페이로드는 어셈블, 전송, 구문 분석, 유효성 검사 및 처리 속도가 훨씬 더 빠릅니다.

0

여기서 중요한 질문은 RPC와 SOAP을 비교하는 것입니다.

그들은 둘 다 당신과 함께 작동하는 스텁 객체와이 모든 것이 어떻게 처리되는지를 알지 못하는 원시/복잡한 데이터 유형을 사용함으로써 동일한 통신 추상화 방식을 제공합니다.

난 항상 선호 (JSON-) RPC는 경량

  • 때문에
  • 많은 훌륭한 구현 거기에 모든 프로그래밍 언어가
  • 이 생성/사용/배우 간단
  • 빨리 (특히 JSON 사용)

SOAP을 사용해야하는 이유가 있습니다. 즉, 필요한 경우 당신은 내가 그 나머지는 메시지 봉투를 정의하지 않는 말을 disingenous 생각 question