Componente e approccio di comunicazione esterni - REST o RPC?

1

Questo è uno scenario ipotetico con alcune parti concrete.

Dire che ho costruito un sistema che consente agli utenti di organizzare in modo interattivo il layout del salotto. Il risultato di questa disposizione è presentato all'utente sotto forma di immagine di anteprima RENDERED.

Il sistema è costruito utilizzando le best practice, i principi SOLID e prendendo l'Uncle Bob's Clean Architecture come una delle principali linee guida - una delle ragioni - per essere preparato per il ridimensionamento.

Il sistema viene distribuito come un monolito di applicazioni Web sul server Web dell'azienda. Dopo un po ', a causa di un carico elevato, mi rendo conto che il componente RENDER è un collo di bottiglia e utilizza molte risorse di sistema e deve ridimensionare in qualche modo.

Viene presa la decisione di spostare l'operazione di rendering sul servizio esterno (server, cloud o altro)

I componenti esistenti che utilizzano la funzione di rendering devono comunicare in qualche modo con il servizio di rendering esterno. Il servizio Render accetta il modello di layout del soggiorno come input e fornisce output sotto forma di immagine raster, nulla deve essere mutato, persistente, niente di simile a questo - solo una semplice funzione che accetta input e produce output.

Ora, tutti stanno urlando REST e mi piacciono anche alcune delle generalizzazioni impiegate, ma non vedo l'approccio REST come qui - Semplicemente non si allinea alle risorse in alcun modo, solo a me sembra come una misura sbagliata.

In un altro modo, mi sembra che la comunicazione sia totalmente in linea con lo stile RPC (over http ovviamente).

Quindi, quale approccio dovrei adottare in questo scenario, REST o RPC?

Se REST, come dovrebbe essere realizzato in un dettaglio?

    
posta Dusan 09.10.2018 - 22:03
fonte

2 risposte

2

So, which approach should I take on this scenario, REST or RPC?

"Dipende". Sono sicuro che sei scioccato.

The REST interface is designed to be efficient for large-grain hypermedia data transfer, optimizing for the common case of the Web, but resulting in an interface that is not optimal for other forms of architectural interaction. Roy Fielding

REST is intended for long-lived network-based applications that span multiple organizations. If you don’t see a need for the constraints, then don’t use them. Roy Fielding.

La prima cosa che mi viene fuori è la domanda: più organizzazioni. Non stai tentando di creare alcun protocollo standard mondiale per scaricare il rendering del salotto su un server. Questo cambia il calcolo per la compatibilità a lungo termine piuttosto un po '.

Il secondo pensiero è il caching; HTTP ha un ottimo supporto per la memorizzazione nella cache. Se i casi d'uso hanno un riutilizzo significativo delle immagini renderizzate, avere la cache fatta per te potrebbe essere una buona vittoria.

Quindi, se il numero di combinazioni è piccolo (un miliardo? 10 miliardi?), e specialmente se un piccolo insieme di esse tende ad essere interessante in un dato momento, allora il caching potrebbe ben ripagare.

If REST, how that should be realized in a detail?

Beh, probabilmente sembra un modulo web che consente al client di specificare il modello di layout del soggiorno.

Se le informazioni si adattano a una stringa di query, bene! il calcolo dell'URI si verifica sul client, che può quindi verificare se ha già una copia valida nella cache.

Se le informazioni non rientrano in una stringa di query, probabilmente stai guardando un POST al server, che può calcolare l'URI e inviarlo al client, e quindi il protocollo sembra lo stesso da lì.

    
risposta data 10.10.2018 - 03:15
fonte
1

RPC su HTTP e REST avranno prestazioni simili poiché entrambi dovranno inviare i parametri e ricevere il risultato utilizzando lo stesso protocollo. L'unica differenza potrebbe essere causata dalla codifica, ma è possibile optare per JSON in entrambi i casi.

Quindi il criterio principale per la scelta è la filosofia API che si adatta meglio al tuo caso d'uso:

  • La filosofia dell'API RPC consiste nel fornire servizi corrispondenti ai metodi, ad es. %codice%. Vi è una naturale corrispondenza con il vostro caso d'uso, dal momento che si desidera solo distribuire i metodi esistenti dell'elaborazione corrente su più nodi. Dall'altra parte, ci sono alcune varianti di RPC in giro, quindi creerai alcuni vincoli di interoperabilità.

  • La filosofia dell'API REST è orientata alle risorse e utilizza una ben nota interfaccia uniforme . In linea di principio, l'endpoint dovrebbe essere denominato in base a una risorsa e a un ID univoco, ad es. %codice%. Quindi puoi creare un rendering con un POST (parametri nel corpo), e in seguito riutilizzare questo rendering con un GET per lo stesso ID, e ottenere l'intera accelerazione grazie al caching. Il paradigma orientato alle risorse richiederebbe un cambiamento nella progettazione. Dall'altro lato, il vantaggio è che disaccoppia di più i componenti e riduce i vincoli di interoperabilità poiché REST è abbastanza universale.

risposta data 11.10.2018 - 22:21
fonte

Leggi altre domande sui tag