Como criar micro serviços independentes com springboot?

Ao criar um spring boot application e crio minha api REST eu queria deixar o /api/account e o /api/clients separados, ou seja, basicamente quando parar o serviços de /api/account não parar o de clients, porém quando eu paro a aplicação ele para tudo. Como seria esse conceito de microserviços independentes se todos ficam em um mesmo local?

eu precisaria criar um projeto spring boot para cada api que eu quero, é isso?

1 curtida

Não ficam no mesmo local. Deveriam ser aplicações diferentes se quer real independencia. E se isso for realmente necessário claro, cuidado pra não usar por moda.

Isso mesmo, para que seja microservicos, vc precisa criar projetos separados, com bancos de dados separados

Blz, na verdade é mais para entender o conceito mesmo, pois estava estudando e não estava compreendendo bem como ficaria essa independência.

Obrigado por responder.

1 curtida

Olá @f1lh0t3,

Já trabalhei com spring com essa arquitetura.
Se você quer usar tal serviço recomendo que olhe a documentação de Spring Cloud.

Quando eu trabalhei com esse tipo de aplicação usei Spring Cloud Netflix, que é a mesma arquitetura utilizada na Netflix, na qual ela disponibilizou isso para um projeto open source.

A guia sobre Spring Cloud com microservices: https://spring.io/blog/2015/07/14/microservices-with-spring
A documentação sobre Spring Cloud Netflix: http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html

Qualquer dúvida pode manter contato comigo, posso lhe ajudar nisso: https://github.com/emanuelbatista

Você pode compartilhar banco de dados sim, mas consistência vai ser eventual, ou então usar um banco de dados como Datomic, que é nativo para microservices.

Se vc quer ter microservicos de verdade, o ideal é cada um ter seu “schema” de banco de dados, pra ficar totalmente independente de um microservico com outro.

Sobre o Datomic, como assim nativo pra microservices? O que sei de Datomic é que ele é um banco imutável, tem seu uso pra fins especificos (Perguntando pq nao sei mesmo)

O ideal é você usar um serviço de armazenamento NoSQL distribuído como Riak, Cassandra ou dynamodb, se quiser criar microservicos de verdade, caso precise de transações ACID e joins arbitrárias, use um banco de dados distribuído e imutável como Datomic.

Se usar banco de dados SQL monolitico, aí vai te deixar limitado mesmo a microservicos totalmente independentes que não compartilham nada (a.k.a microservicos burros).

Imutabilidade é que promove a independência dos microserviços.

Se os dados podem ser cacheados agressivamente no cliente, porque afinal são imutáveis, não há necessidade de fazer viagens até o banco toda vez que precisa rodar queries. Com as queries rodando localmente, ao invés de num servidor, não introduz gargalos. Uma query pode demorar +10 minutos e não vai afetar ninguém, só o seu próprio serviço.

Por fim, banco de dados imutaveis como Datomic oferecem melhor ROI para investidores, uma vez que desenvolvedores agora podem focar mais tempo criando valor, e menos tempo otimizando queries. :wink: