Domanda

Quando svilupperai applicazioni distribuite, tutte scritte in Java dalla stessa azienda, sceglieresti servizi Web o RMI? Quali sono i pro e i contro in termini di prestazioni, accoppiamento lento, facilità d'uso, ...? Qualcuno sceglierebbe WS? Riesci a costruire un'architettura orientata ai servizi con RMI?

È stato utile?

Soluzione

Proverei a pensarci in questo modo:

Stai andando per servizi indipendenti in esecuzione l'uno sotto l'altro e quei servizi potrebbero essere accessibili da applicazioni non Java in futuro? Quindi vai per i servizi web.

Vuoi solo distribuire parti di un'applicazione (attenzione al singolare) su più server? Quindi scegli RMI e non dovrai lasciare l'universo Java per far sì che tutto funzioni perfettamente accoppiato.

Altri suggerimenti

Vorrei scegliere WS.

  • È improbabile che WS / RMI sia il tuo collo di bottiglia.
  • Perché chiudere le porte ad altre possibili tecnologie in futuro?
  • RMI potrebbe avere problemi se la versione delle classi sul client / server non è sincronizzata.

E ... molto probabilmente sceglierei i servizi REST.

Se non ne hai bisogno (interoperabilità con non Java), e probabilmente non lo sei, RMI sarà migliore; meno codice, meno configurazione, meno sovraccarico di larghezza di banda.

Un'opzione se hai paura di cui hai bisogno è usare EJB3; utilizza RMI, è molto facile da configurare e distribuire, ma ti consente anche di trasformare facilmente le tue chiamate in Servizi Web se ne hai bisogno.

Qualunque cosa tu faccia, non crea le tue cose; attenersi a uno standard.

le mie scelte sono:

serializzazione java standard - pro: imho offre il massimo delle prestazioni, semplice da implementare (sto usando Spring per esporre l'interfaccia locale come remota); contro: la serializzazione non funziona tra diverse versioni jvm

serializzazione binaria (ad esempio hessian dal molo) - pro: stesse prestazioni della serializzazione java e funziona tra diverse versioni jvm

WS: solo se c'è una necessità di interoperabilità tra piattaforme diverse java + .net, altrimenti è troppo pesante.

RMI è un ottimo trasporto a sviluppo rapido, ma sconsiglio di utilizzarlo in un ambiente di produzione. Il problema di compatibilità con la serializzazione può rendere le cose imbarazzanti, devi coordinare le tue distribuzioni con molta attenzione.

I servizi Web sono inefficienti, sì, ma solo attraverso l'hardware. In alternativa, utilizzare XML-over-HTTP semplice e leggero, anziché SOAP / WSDL full-fat.

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