Servizi REST con un'applicazione locale o remota

1

Ho diverse domande non comuni relative alla progettazione di servizi REST ospitati su un server che comunica con applicazioni locali o remote.

Ad esempio, diciamo che ho 2 macchine ("A" e "B") situate in due paesi diversi.

La macchina "A" ospita un server che esegue un endpoint REST (= indirizzo IP con una porta associata) per interagire con le risorse REST.

Dal lato client, ho un'applicazione che interagisce con le risorse REST. Stavo considerando di eseguire l'applicazione sulla macchina "B", ha senso dal momento che REST è un'architettura distribuita con comunicazioni remote.

Tuttavia, mi chiedo se abbia senso ospitare l'applicazione localmente sulla macchina "A"? Il vantaggio principale che vedo qui è legato alla latenza della rete. E quindi, se l'applicazione richiede alcuni vincoli di latenza, la scelta giusta potrebbe essere quella di ospitarla localmente.

Tuttavia, non sono sicuro che sia vero (riguardo a questo link: link ). E vorrei avere un feedback su questo.

Inoltre, non sono sicuro di cosa fare tecnicamente se l'esecuzione di applicazioni locali ha senso. Ad esempio, potrei immaginare di avere 2 endpoint per una stessa risorsa: uno per l'applicazione locale con risorse in esecuzione sull'interfaccia localhost, uno per l'applicazione remota con risorse in esecuzione su un'interfaccia ethernet (con indirizzo IP e porta). Ma ancora una volta, non so se ha senso o no.

Per riassumere le mie domande:

  • Le applicazioni locali in esecuzione sullo stesso computer che ospita il server avranno una comunicazione REST più veloce?
  • Per comunicazioni REST "locali" più veloci, un server deve esporre 2 endpoint (uno per localhost / uno per remoto)?

Grazie!

    
posta AilurusFulgens 02.06.2016 - 11:22
fonte

1 risposta

2

Hai chiesto:

Does local applications running on the same machine that host the server, will have faster REST communication?

Assolutamente. I tuoi dati non dovranno essere serializzati sul filo.

For faster "local" REST communications, does a server needs to expose 2 endpoints (one for localhost / one for remote) ?

No. Il tuo server esporrà su un particolare indirizzo e il tuo cliente può parlare con localhost (127.0.0.1) o con l'indirizzo IP del server attuale. In quest'ultimo caso il tuo client può lavorare su un host remoto senza riconfigurazione, ma fondamentalmente il tuo server non si preoccuperà se il tuo client è locale o remoto.

(ci sono forse sottigliezze in quanto sopra relative a più interfacce di rete, ottimizzazioni dello stack di rete ecc., ma non influenzano i principi sottostanti)

Se riesci a localizzare i tuoi due servizi, questo potrebbe avere senso. Non appena avrai due macchine e un po 'di filo in mezzo, probabilmente introdurrai complessità e un grado di inaffidabilità. Se puoi colocare, e accetti che l'abbattimento di quella macchina eliminerà entrambi i servizi, questa sarà probabilmente una soluzione più gestibile per te. Nota che colocalizzare può avere effetti negativi se (per esempio) la tua macchina non ha risorse sufficienti di CPU / memoria per eseguire entrambi i processi.

Tieni presente che la distribuzione su una rete ti consente di accedere alle Fallacies of Distributed Computing . Alcuni di questi errori verranno comunque applicati nel tuo caso, ma la colocazione ridurrà l'esposizione.

    
risposta data 02.06.2016 - 14:35
fonte

Leggi altre domande sui tag