Domanda

Gli argomenti sulla semplicità delle soluzioni che utilizzano XML-RPC o REST sono facili da capire e difficili da discutere.

Ho anche spesso sentito argomentazioni sul fatto che l'aumento del sovraccarico di SOAP può influire in modo significativo sulla larghezza di banda utilizzata e forse anche sulla latenza. Mi piacerebbe vedere i risultati di un test che quantifica l'impatto. Qualcuno conosce una buona fonte per tali informazioni?

È stato utile?

Soluzione

Ci sono stati alcuni studi che sono stati fatti riguardo a ciò che potresti trovare informativo. Si prega di consultare quanto segue:

C'è anche un'interessante (piuttosto obsoleta) conversazione di performance sull'argomento in Forum MSDN .

In breve: la maggior parte di queste fonti sembrano concordare sul fatto che SOAP e REST abbiano approssimativamente le stesse prestazioni per i dati di uso generale. Alcuni risultati, tuttavia, sembrano indicare che con i dati binari, REST potrebbe effettivamente essere meno performante. Vedi i collegamenti nel forum che ho collegato per maggiori dettagli su questo.

Altri suggerimenti

L'impatto principale sulla velocità di SOAP rispetto a REST non ha a che fare con la velocità del filo, ma con la cachability. REST suggerisce di utilizzare la semantica del Web invece di provare a scavalcarla tramite XML, quindi i servizi Web RESTful sono generalmente progettati per utilizzare correttamente le intestazioni della cache, quindi funzionano bene con l'infrastruttura standard del web come i proxy di cache e persino le cache dei browser locali. Inoltre, l'utilizzo della semantica del Web significa che cose come ETag e compressione zip automatica sono modi ben compresi per aumentare l'efficienza.

..e ora dici di volere benchmark. Bene, con l'aiuto di Google, ho trovato un ragazzo i cui test mostrano che REST è 4-6 volte più veloce di SOAP e un altro carta che favorisce anche REST.

REST come protocollo non definisce alcuna forma di busta del messaggio, mentre SOAP ha questo standard.

Pertanto, è un po 'semplicistico cercare di confrontare i due, sono mele e arance.

Detto questo, una busta SOAP (meno i dati) è solo di pochi k, quindi non ci dovrebbe essere alcuna differenza di velocità evidente a condizione che si stia recuperando un oggetto serializzato tramite SOAP e REST.

SOAP e qualsiasi altro protocollo che utilizza XML generalmente gonfia un po 'i tuoi messaggi - questo può o meno essere un problema a seconda del contesto.

Qualcosa come JSON sarebbe più compatto e forse più veloce da serializzare / deserializzare - ma non usarlo esclusivamente per questo motivo. Fai tutto ciò che ritieni sensato in quel momento e cambialo se è un problema.

Tutto ciò che utilizza HTTP in genere (a meno che non stia riutilizzando una connessione keepalive HTTP 1.1, che molte implementazioni non fanno) avvia una nuova connessione TCP per ogni richiesta; questo è abbastanza male, specialmente su collegamenti ad alta latenza. HTTPS è molto peggio. Se hai molte brevi richieste da un mittente a un solo destinatario, pensa a come eliminare questo sovraccarico.

L'uso di HTTP per qualsiasi tipo di RPC (sia SOAP o qualcos'altro) comporta sempre questo sovraccarico. Altri protocolli RPC generalmente consentono di mantenere aperta una connessione.

Espansione su " pjz " la risposta.

Se ricevi molte operazioni SOAP basate su INFORMAZIONI (ottieni * tipo di chiamate), al momento non è possibile memorizzarle nella cache. Ma se dovessi implementare queste stesse operazioni utilizzando REST, c'è la possibilità che i dati (dipende dal contesto aziendale) possano essere memorizzati nella cache, come menzionato sopra. Poiché SOAP utilizza POST per le sue operazioni, non può memorizzare nella cache le informazioni sul lato server.

SOAP è decisamente più lento. I payload sono significativamente più grandi e più lenti da assemblare, trasportare, analizzare, convalidare ed elaborare.

Non conosco alcuna risposta alla domanda di benchmarking, tuttavia, ciò che so sul formato SOAP è sì, ha un overhead, ma quell'overhead non aumenta per richiesta: se hai un elemento inviato a il servizio web, hai un overhead + una costruzione di elementi e se hai 1000 elementi inviati al servizio web, hai un overhead + una costruzione di 1000 elementi. L'overhead si verifica quando la richiesta XML viene formattata per la particolare operazione, ma ogni singolo elemento dell'argomento nella richiesta viene formattato allo stesso modo.

Se ti attieni a raffiche ripetibili di dati (diciamo 500 elementi), la velocità dovrebbe essere accettabile.

Immagino che la domanda principale qui sia come confrontare RPC con SOAP.

entrambi servono lo stesso approccio dell'astrazione della comunicazione avendo oggetti stub con cui si opera e tipi di dati primitivi / complessi che si ottengono senza sapere davvero come tutto questo viene gestito al di sotto.

Preferirei sempre (JSON-) RPC perché

  • è leggero
  • ci sono molte grandi implementazioni per tutti i linguaggi di programmazione là fuori
  • è semplice da imparare / usare / creare
  • è veloce (specialmente con JSON)

sebbene ci siano ragioni per cui dovresti usare SOAP, cioè se hai bisogno di parametri di denominazione invece di fare affidamento sul loro ordine corretto

alcuni ulteriori dettagli che ottieni da questo stackoverflow question

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top