2016-03-24 13 views
5

Nella nostra azienda utilizziamo avvio a molla, microservizi, cloud primaverile e così via ... Siamo contenti di questa infrastruttura, ma ho ancora qualche problema: usiamo il resto come protocoll di comunicazione e anche se lo trovo fantastico, continuo a pensare che potremmo trovare qualcosa di meglio. Con il riposo:Come migliorare la comunicazione tra i microservizi

  • è necessario utilizzare un client e un server (restcontroller)
  • è necessario conoscere il server URI, il metodo HTTP (POST, GET, PUT,...)
  • è necessario sapere dove params vanno (corpo, querystring)
  • ....

non pensi che sarebbe molto più facile se avessimo qualcosa di simile a RMI? So che è una tecnologia piuttosto vecchia (e non è indipendente dalla lingua), ma ha reso la vita più semplice (hai solo bisogno di un'interfaccia e della sua implementazione).

Cercando in giro, ho trovato alcuni progetti interessanti come clienti finti o stream di nuvole primaverili, ma nessuno di loro sembra essere il proiettile d'argento.

Cosa ne pensi di questo argomento? È un problema che senti? Se sì, come ci si avvicina?

Grazie in anticipo.

risposta

0

È possibile utilizzare Spring Cloud Netflix and Eureka come Individuazione servizio e Client-Side Load Balancing with Ribbon.

Con l'aiuto di quelli è possibile comunicare tra microservizio con 'nomi di servizio' invece di posizioni di servizio.

Check out this demo. Dovrebbe essere MOLTO UTILE per le comunicazioni di microservizio.

Qui abbiamo 2 microservizi semplici e servizio di rilevamento per le comunicazioni tra di loro.

+0

sì, li usiamo. Ma con il loro caso risolviamo il problema di scoperta degli URI (e il bilanciamento) Utilizziamo anche il server di configurazione spring cloud per la gestione della configurazione. Ma penso ancora che scrivere un resto client/server sia piuttosto costoso anche con tutte queste tecnologie a bordo. Riposa la migliore soluzione che abbiamo? Non c'è niente di più facile da usare? – Pirulino

1

I microservizi non sono pensati per essere strettamente accoppiati, RMI richiede il tuo codice su entrambe le estremità, che è stato divertente quando non hai controllato l'altro lato, ad esempio i clienti che non vogliono aggiornare ed è stato un B! @ *! superare i firewall.

Il sapone ha risolto la maggior parte delle cose che menzionate, ma sfortunatamente Java non ha mai avuto un buon stack di sapone. Detto questo, Rest ha altri vantaggi specialmente quando si accede al servizio da una pagina web e da un javascript.

3

Nella mia azienda, utilizziamo JMS per aggiungere uno stack di comunicazione "interno" al nostro stack di microservizi. È affidabile, semplice da usare, efficiente e molto performante.

Si utilizza Apache ActiveMQ come implementazione, ma è anche ampiamente utilizzato RabbitMQ.

+0

Questo è quello che stavo cercando. Anche noi usiamo rabbitMQ e c'è una bella implementazione RPC (http://docs.spring.io/spring-amqp/reference/htmlsingle/#_message_correlation_with_a_reply_queue) ma stavo cercando di capire se c'è una soluzione migliore. Hai visto questo http://www.grpc.io/? – Pirulino

+0

Non lo usiamo come strumenti RPC ma come scambio di messaggi (che è l'obiettivo principale di JMS). Gli strumenti RPC in genere non rispondono a molte domande JMS: cosa succede se la rete è temporaneamente inattiva? Cosa succede se si desidera indirizzare un'istanza? Tutte le istanze? Una classe o tipo di istanza specifica? Con JMS è davvero facile affrontare tutti questi casi d'uso, non lo so, puoi farlo facilmente con gli strumenti RPC. È possibile eseguire RPC su JMS, ma penso che potrebbe essere più semplice progettare l'applicazione come un'applicazione basata su messaggi. –

+0

Puoi anche dare un'occhiata a [akka] (http://akka.io/), che è anche un buon strumento per progettare applicazioni guidate dai messaggi, ed è ampiamente usato per questo caso d'uso (comunicazione interna dei microservizi) –