2008-09-20 18 views
45

Los argumentos sobre la simplicidad de las soluciones que usan XML-RPC o REST son fáciles de entender y difíciles de discutir.Desempeño de SOAP frente a XML-RPC o RESTO

A menudo también he escuchado argumentos de que el aumento de la sobrecarga de SOAP puede afectar significativamente el ancho de banda utilizado y posiblemente incluso la latencia. Me gustaría ver los resultados de una prueba que cuantifica el impacto. ¿Alguien sabe una buena fuente para tal información?

Respuesta

6

Hay algunos estudios que se han hecho con respecto a esto que puede encontrar informativos. Consulte el siguiente:

También hay una (un poco fuera de fecha) interesante conversación rendimiento sobre el tema en el MSDN Forums.

En resumen: la mayoría de estas fuentes parecen estar de acuerdo en que SOAP y REST tienen aproximadamente el mismo rendimiento para los datos de propósito general. Sin embargo, algunos resultados parecen indicar que, con datos binarios, REST puede tener un rendimiento menor. Ver los enlaces en el foro que he vinculado para obtener más detalles sobre esto.

19

REST como protocolo no define ninguna forma de envolvente de mensaje, mientras que SOAP tiene este estándar.

Por lo tanto, es algo simplista intentar y comparar los dos, son manzanas con naranjas.

Dicho esto, un sobre SOAP (menos los datos) es solo un par de k, por lo que no debería haber ninguna diferencia notable en la velocidad siempre que esté recuperando un objeto serializado mediante SOAP y REST.

+1

Creo que es disingenous decir que el descanso no define un sobre del mensaje; dice 'use lo que usa http', que es mime-types. – pjz

+0

¿De verdad? Deseo enviar una clase de C# serializada, ¿cómo va a saber el consumidor del protocolo REST cómo analizarlo desde un tipo de mimo? – FlySwat

+23

Creo que el problema comienza cuando tratas de considerar REST como un protocolo. REST es un estilo arquitectónico que puede usar el protocolo HTTP. –

2

No conozco ninguna respuesta a la pregunta de evaluación comparativa, sin embargo, lo que sí sé sobre el formato SOAP es sí, tiene una sobrecarga, pero esa sobrecarga no aumenta por solicitud: si tiene un elemento enviado para el servicio web, tiene una construcción de overhead + one element, y si tiene 1000 elementos enviados al servicio web, tiene overhead + construcción de 1000 elementos. La sobrecarga ocurre cuando la solicitud XML se formatea para la operación particular, pero cada elemento de argumento individual en la solicitud tiene el mismo formato.

Si se adhiere a ráfagas cortas y repetibles de datos (por ejemplo, 500 elementos), la velocidad debe ser aceptable.

62

El principal impacto en la velocidad de SOAP vs. REST no tiene que ver con la velocidad del cable, sino con la capacidad de caché. REST sugiere utilizar la semántica de la web en lugar de intentar pasar por encima de ella a través de XML, por lo que los servicios web RESTful generalmente están diseñados para usar correctamente los encabezados de caché, por lo que funcionan bien con la infraestructura estándar de la web como los servidores de caché e incluso los cachés de los navegadores locales. Además, usar la semántica de la web significa que cosas como ETags y la compresión automática de zip son formas bien entendidas de aumentar la eficiencia.

..y ahora dices que quieres puntos de referencia. Bueno, con la ayuda de Google, encontré one guy, cuyas pruebas muestran que REST es 4-6 veces más rápido que SOAP y otro paper que también favorece a REST.

+3

Gran respuesta pjz, ¿se ha dado cuenta de que su respuesta no tiene nada que decir sobre XML-RPC o por qué no aparece entre las mejores opciones para ser considerado? –

+1

Enlace actualizado para "one guy" http://www.learnosity.com/techblog/2008/03/cfmx-soap-vs-rest-benchmarks/ – Fedearne

5

Expandiendo la respuesta de "pjz".

Si obtiene mucha INFORMACIÓN (obtener * tipo de llamadas) basadas en operaciones SOAP, actualmente no hay forma de que pueda almacenarlas en caché. Pero si implementara estas mismas operaciones con REST, existe la posibilidad de que los datos (en función del contexto de su empresa) se puedan almacenar en caché, como se mencionó anteriormente. Como SOAP utiliza POST para sus operaciones, no puede almacenar en caché la información del lado del servidor.

8

SOAP y cualquier otro protocolo que use XML generalmente abota un poco los mensajes, esto puede o no ser un problema según el contexto.

Algo como JSON sería más compacto y quizás más rápido de serializar/deserializar, pero no lo use exclusivamente por ese motivo. Haga lo que sienta que tiene sentido en ese momento y cámbielo si es un problema.

Cualquier cosa que use HTTP normalmente (a menos que reutilice una conexión keepalive HTTP 1.1, que muchas implementaciones no) inicia una nueva conexión TCP para cada solicitud; esto es bastante malo, especialmente en enlaces de alta latencia. HTTPS es mucho peor. Si tiene muchas solicitudes breves de un remitente a un destinatario, piense en cómo puede tomar estos gastos generales.

El uso de HTTP para cualquier tipo de RPC (ya sea SOAP u otra cosa) siempre incurrirá en esa sobrecarga. Otros protocolos RPC generalmente le permiten mantener una conexión abierta.

4

SOAP es definitivamente más lento. Las cargas útiles son significativamente más grandes, que son más lentas de ensamblar, transportar, analizar, validar y procesar.

0

Supongo que la pregunta principal aquí es cómo se compara RPC con SOAP.

ambos tienen el mismo enfoque de abstracción de comunicación al tener objetos de código auxiliar con los que operas y tipos de datos primitivos/complejos que obtienes sin saber realmente cómo se maneja todo esto debajo.

Siempre preferiría (JSON-) RPC porque

  • es ligero
  • hay muchos grandes implementaciones para todos los lenguajes de programación que hay
  • que es fácil de aprender/uso/crear
  • es rápido (especialmente con JSON)

aunque hay motivos por los que debe usar SOAP, es decir, si necesita nombrar parámetros en lugar de confiar en su orden correcto

algunos detalles más que se obtiene de este stackoverflow question

Cuestiones relacionadas