Como criar um sistema em Microservices em Java

60 respostas Resolvido
wladyband

Saudação para todos,

Estou para criar um sistema que será vendido em módulos, existe o modulo de controle de estoque, o modulo de ocorrência, o modulo de ordens de serviço, e um modulo de autenticação de usuários.

Pela modelagem do meu banco de dados, as tabelas são totalmente amarradas umas as outras, e se eu tentar força o sistema a roda sem algumas das tabelas existentes, gera uma serie de erros.

O meu objetivo é vender o sistema por módulos, ou seja, se o cliente quiser somente o modulo de controle de estoque, ai eu vou vender somente para ele este modulo, porém o sistema continuará funcionando normalmente, as mesma coisas com os outros módulos.

Cada módulo tem um conjunto de tabelas.

É como se os módulos tivessem interligadas umas com as outras, mas que existisse uma possibilidade lógica delas funcionarem indenpententes uma das outras.

Existe algum livro que explique como criar a base de dados em módulos ou criação de sistemas em modulos?

Se eu não souber fazer isso vou ser obrigado a sempre vender o sistema completo, e isso não é interessante porque vou ser obrigado a vender todos recursos do sistema pra ele, que provavelmente não irá precisar.

Já ouvir falar de sistemas feito em Microservices, e dentro do conceito do Microservices existem várias técnicas para aplicar o conceito de Microservices, como podem ver o link abaixo;

MicroServices clique aqui

Ao realizar mais pesquisas sobre esse assunto, esses tipos de sistemas são chamados de sistemas distribuidos, eu sei que esse assunto é muito extenso para ser explicado assim com poucas linhas, preciso somente de uma direção para saber pesquisa melhor sobre esse assunto, eu não se existe literaturas, ou vídeo aulas ou até instituições que expliquei como construir sistemas seguindo esse conceito.

O sistema estou fazendo em Spring MVC.

60 Respostas

N

Sobre microserviços: http://blog.caelum.com.br/arquitetura-de-microservicos-ou-monolitica/

Porém para o seu problema, talvez não seja esse o caminho.

wladyband

Você acha que posso procura qual caminho para resolver esse problema?

wladyband

Estou vendo que pouca gente entende de MicroServices, será que esse conhecimento somente se adquiri trabalhando nas empresas?

javaflex

Com certeza, tem que ser dentro da empresa após análise das reais necessidades e experiências do cliente, com pessoas que já se prepararam para isso.

Querer vender sistemas separados não necessariamente precisa seguir arquitetura de micro services.

Onde trabalho os sistemas são separados, atendendo cada gerência, cada um tem sua equipe de desenvolvimento e ambiente dedicado para deploy e uso, mas longe de seguir a arquitetura de micro serviços. Tentando comparar ao seu caso, “Ordem de Serviço” seria um sistema e “Estoque” seria outro. Cada um com seu schema de tabelas onde seja dono/gestor da informação. Tabelas em comum podem ser compartilhadas com restrições de acesso a quem não for dono. O sistema de “Ordem de Serviço” pode funcionar mesmo sem existir uma tabela do sistema de “Estoque” onde o sistema de “Ordem de Serviço” não faça uso. No final das contas são sistemas de arquitetura tradicional, só que menores e divididos por assuntos específicos, integrados através de tabelas em comum, views e também web services (REST, etc) quando necessário.

Micro services vai muito além disso, onde não deveria nem ter esse compartilhamento de tabelas em comum com áreas diferentes. Se na prática isso não for um real causador de problemas na empresa, não tem porque usar micro services, acaba usando só por seguir a moda. Com micro services terá que lidar com o outro lado da moeda, principalmente pela perda de facilidade de integração entre pontos comuns.

wladyband

Minha situação real é essa base de dados que eu mesmo criei, eu não sei se está modelado corretamente, gostaria que me ajudasse a identificar problemas nessa base de dados

ACW.pdf (23.2 KB)

Mas como você pode ver as seguintes tabelas como

Pessoa,TipoPessoa,Propriedade,TipoPropriedade e Condominio
seria um módulo, e as tabelas como
Impacto,CadastroOcorrencia, OcorrenciaAprovados,StatusOcorrencia
seria outro módulo, o que liga esse dois modulos é a tabela
Condominio .

Do jeito que criei o meu sistema se eu tentar colocar módulos de acesso, tipo, Usuário 1 acessa um módulo sendo que não acessa o outro, se eu fizer isso, no ato de inserir um chamado gera um erro.

O que estou tentando descobri é a logica ou no banco de dados ou no próprio código Java como poder as Tabelas se comunicarem, mas ao mesmo tempo elas serem independentes. como é o caso de alguns sistemas que são vendido por módulos, exemplo;

Um cliente comprou o módulo de cadastro, passou uns dois anos usando o sistema, depois disso ele sugeriu de comprar o módulo de ocorrência, e com isso o que devo fazer? Simplesmente dei permissão de acesso para ele usar o outro módulo.

Essa é minha ideia.

javaflex

Qual erro? Se for tentando acessar uma tabela que o módulo não usa, então basta alterar o SQL para retirar essa tabela. Cada módulo tem que ter suas próprias querys.

Você está falando sobre módulos mas seu modelo de dados está tudo junto. Já deve começar a se organizar por ai separando por módulos. O que for tabela compartilhada você puxa junto. Coloque cor diferente nas tabelas por módulo. Pelo menos vejo ADs trabalhando assim, não sou especialista de banco de dados.

“wladyband:

Um cliente comprou o módulo de cadastro, passou uns dois anos usando o sistema, depois disso ele sugeriu de comprar o módulo de ocorrência, e com isso o que devo fazer? Simplesmente dei permissão de acesso para ele usar o outro módulo.

Isso ai já é questão de automatizar o processo, a estratégia você define e implementa. Longe de ser a forma mais elegante, mas a forma mais fácil costuma ser deixar todos os módulos instalados e só habilitar acesso do que ele comprar. Isso ai é programação mesmo, como se fosse controle de acesso do usuário, mas aplicando licença de uso. Outra forma seria automatizar o deploy dos módulos e criação de tabelas, mas dependendo do caso não vale a pena se complicar com isso.

pfk66

no caso de microservices, quando o acesso aos dados não pode mais ser feito diretamente, só por meio do gateway do serviço, a organização dos dados e armazenamento passa a ser questão de responsabilidade dos desenvolvedores do módulo/serviço, e não mais de um especialista ou DBA.

javaflex

Sim, mas os casos que comentei não usam micro serviços e nem tem a necessidade.

pfk66

Por que não? Tá com peninha do DBA?
Microservices é o futuro.

javaflex

Por que deveria ser necessário se não existe a necessidade? Não faz sentido sua pergunta, seria como resolver problema que não existe.

Já o autor do tópico está cheio de dúvidas sobre o projeto dele, onde dependendo das definições pode ser necessário ou não. Então você poderia ajudar ele relatando sua experiência real em micro serviços, além de encaixar o caso dele nessa arquitetura.

wladyband

Então, você teria condições me ajuda? Se você realmente tem experiencia com MicroServices por favor me ajuda nesse projeto?

nel

Oi @wladyband.

Eu leio vender e associo o produto à on premise, ou seja, que será instalado na casa do cliente. É isso ou estamos falando em SaaS? Se for on premise, ignora a ideia de microservices e começa a pensar em controle de módulos por segurança, usando algum protocolo ou o conceito de “roles” (papéis). Nesse formato, mesmo que o cliente tenha instalado todo o produto, ele só irá conseguir acessar os módulos no qual pagou.

Se a ideia é ir para SaaS, a arquitetura de microservices é muito interessante e amplamente utilizada (Uber e Netflix fazem posts constantes sobre esse modelo de arquietura e explicando suas próprias arquiteturas, inclusive). Em relação ao banco de dados (se seguir para microservices), provavelmente você terá que desenhar o MER e atualizar o mesmo, buscando uma forma de deixar teus microserviços independentes. Uma forma é se tu tem composição dentro de suas entidades, ao invés de trabalhar com o objeto X, você terá um ID único de X. Enfim, terás que analisar.

Por fim, independente do caminho que seguir, uma dica é usar o conceito de DDD, para trabalhar com contextos específicos e etc. Segue um artigo do Martin Fowler sobre microservices que eu gosto muito: Martin Fowler: Microservices.

Só mais um detalhe: eu acredito que este post deveria estar no tópico arquitetura.

Boa sorte.

wladyband

que tipo de sugestão de titulo você daria para essa postagem?

nel

@wladyband não vejo problemas com o título, apenas dei a sugestão de mover para arquitetura. Não sei se é possível mover com tudo o que já foi postado. Espero que eu tenha conseguido colaborar contigo na resposta anterior.

Abraços.

wladyband

Talvés você tenha razão em relação a isso, mas eu preciso de mais uma coisa, eu preciso saber se meu banco está desenhado corretamente, você acha que devo criar uma nova postagem para isso?

nel
Solucao aceita

@wladyband a melhor pessoa para responder à esta pergunta é você mesmo. Se está pensando em vender o produto, seja SaaS ou on premise, é muito interessante que avalie a arquitetura do seu produto e o banco de dados, claro.

Se quiser, é só abrir um tópico em Infraestrutura/Banco de dados. Não esqueça de explicar sua necessidade, previsão de crescimento (massa de dados) do seu banco e etc, para uma melhor análise do pessoal.

Abraços.

pfk66

Cara você não usa nenhum serviço de armazenamento distribuído como DynamoDB, Cassandra ou Riak… em que era você vive!!! kkkkkkk

javaflex

@pfk66, o mundo não se restringe a isso, se é importante para sua empresa, problema nenhum. Mas pelo jeito você nunca teve experiencia em grandes empresas com projetos críticos, onde não tem essa de brincar de trocar o que já atende por “tecnologia da hora” mesmo sem necessidade. Isso não é mais importante do que a finalidade do negocio. TI é só o meio, você está se fechando a este meio, é só programador.

Enquanto isso você não relatou ainda para o autor do tópico sua experiência real, colaborando para encaixar no projeto dele as tecnologias que você trabalha.

pfk66

Eu num to intendendu que negocio é esse…:confused:
que grande empresa é essa que não precisa ser capaz de lidar com quantidade maciça de dados, que projeto crítico é esse que não precisa de alta disponibilidade?

javaflex

A infra é quem garante a disponibilidade e escalabilidade, não acumulo esta função.

esmiralha

O que confere alta disponibilidade e capacidade de processar grandes volumes de dados não é o produto X ou Y, é a arquitetura da sua solução. Você pode ter alta disponibilidade e capacidade de processar grandes volumes de dados usando arquivos texto.

Só para ilustrar, grandes sistemas de telecom processam bilhões de registros de chamada todos os dias e uma grande parte faz isso com arquivos texto e C.

Eu sou obrigado a concordar com o Alan Kay quando ele diz que a indústria do software se parece com a indústria da moda.

pfk66

Certo. A diferença é que agora um whatsapp faz isso tb… mas com 15 funcionários.

whatsapp = futuro
telecom = passado

esmiralha

whatsapp = app idiota com uma hype monstruosa
telecom = o que vc usa quando estoura a hemorróida da sua vovó e tem que chamar uma ambulância
pfk66 = troll hypeiro SteveJobs-wannabe

pfk66

Ok, você está se fechando pra este meio, é apenas alguém que escolhe entre o framework 6 ou meia dúzia.

javaflex

Do que está falando? Nem está conseguindo mais trollar direito.

pfk66

Se não sabe nada de infra, não tem condição de saber se essas tecnologias são realmente necessárias né?

Talvez fosse melhor perguntar pro seu colega da infra.

pfk66

Qual parte do “ambas arquiteturas processam bilhões de registro, mas apenas uma o faz por uma fração do custo e da mão de obra” vc não entendeu?

esmiralha

Não entendi a parte onde você acha que o custo de uma operadora de telecom é sua folha de pagamento. Também não entendi como você acha que pode comparar uma empresa que tem um aplicativo a empresas que tem um investimento de capital na ordem de trilhões de dólares. E não entendi como o WhatsApp funcionaria sem uma operadora de telecom para transmitir suas informações.

Sem as grandes empresas que fazem gigantescos investimentos de capital e criam as verdadeiras tecnologias de ponta, o Vale do Silício é apenas um playground para crianças mimadas.

javaflex

Não são necessárias porque já funciona muito bem com o que existe, simples assim. Não trabalho com infra mesmo, os servidores precisam de alta disponibilidade e a infra mantem isso, não vou pra casa com responsabilidade de por exemplo o loading balancing ficar funcionando. Claro que no início do projeto todos são envolvidos para que o sistema atenda dentro do que a infra vá dispor. Não tem nada haver infra escolher framework, não sei da onde retirou isso.

pfk66

O assunto é banco de dados. Você sugeriu comparar o volume de dados que as empresas processam. Como a empresa com trilhões de investimento foi destruído nesse quesito por uma app idiota, mas extremamente popular, agora não pode mais comparar? ok. rs

Arquivo texto é tecnologia de ponta?

Nossa geralmente as empresas de telecom são odiadas pelo péssimo serviço prestado, e pela organização disfuncional, primeira vez que encontro um cheerleader delas!

pfk66

Sim, um cluster de servidores SQL funciona muito bem, até não funcionar mais.

Só falei que manter cluster de servidores SQL é coisa da era passada. :wink:

esmiralha

O assunto é micro-serviços em Java. Você entrou no tópico dizendo que se uma empresa não usa Riak, Cassandra ou a palavrinha da moda do momento, ela não tem alta disponibilidade, nem consegue processar grandes volumes de dados. Eu repliquei dizendo que isso é uma falácia porque existem empresas que processam grandes volumes de dados e oferecem serviços que tem uma disponibilidade muito superior à do WhatsApp sem necessariamente utilizar os produtos que você considera essenciais para obter esses benefícios. Então, você iniciou uma comparação entre o WhatsApp e essas empresas que são essenciais para que qualquer serviço como o WhatsApp possa sequer existir. A comparação absurda quem começou foi você.
Dizer que as operadoras foram destruídas pelo WhatsApp demonstra que você não tem nenhum conhecimento do mercado. O WhatsApp afeta a receita das operadoras? Sim, sem dúvida. Ele representa uma ameaça à continuidade dessas empresas? Não, de forma alguma. Porque ele depende delas.

Você conhece alguém que não tem celular? As pessoas falam, falam, mas dependem do serviço. E pagam por isso. Quanto é o faturamento do WhatsApp mesmo?

aix

Nossa, isso já se extendeu demais e perdeu o objetivo do tópico que era falar sobre arquitetura em microservices, vamos parar de trollar :), fazer pesquisas e responder com embasamento técnico, dessa forma se tornou uma guerra de egos e é isso que difere este fórum do stack, cade o moderador ?

javaflex

@pfk66 Seus argumentos não fazem sentido, sua app não é nada sem uma grande empresa de telecom.

javaflex

Estávamos esperando até agora o @pfk66 relatar suas experiências reais em micro services e encaixar o projeto do colega nessa arquitetura, já que ele levanta tanto a bandeira, mas realmente isso não ocorreu. No mais isso é fórum de discussão, sei que a geração atual é mais politicamente correta, mas faz parte a discussão, apesar do título o autor do tópico nem definido está sobre usar micro services, na prática não definiu nem a modelagem de dados.

pfk66

Se o assunto é microservices, o que faz aqui cheerleadering pra telecoms e seus arquivos texto?

pfk66

Desculpa, mas quem não entende de infra não esta em posição de dizer se microservice é necessário ou não.

javaflex

Quando você trabalhar em um grande empresa vai entender tudo isso, e não vai ser mais um faz tudo.

pfk66

Por que alguém que sabe criar um sistema ou torradeira precisa trabalhar pra grandes empresas de telecom ou de energia elétrica? lol

javaflex

Porque grandes empresas podem investir mais, não se limitam em 15 funcionários, pagam mais, e o trabalho é mais dividido.

pfk66

Ele pode usar os produtos que eu citei pra fazer microservices. Não tem como fazer com servidor SQL.

Por isso é fácil dizer se você é um dinossauro da era passada. :slight_smile:

javaflex

Melhor ser um dinossauro em empresas que pagam mais do que ficar trabalhando na moda em empresa pequena.

esmiralha

Não estou fazendo torcida para ninguém. É só uma questão de analisar os fatos. Dizer que para criar microservicos é necessário usar o produto x ou y, é desconhecer o assunto ou é papo de vendedor.

Mas a título de curiosidade: você sabe que a infra de backend do whatsapp é implementada em uma linguagem chamada Erlang? Você sabe o que qier dizer Erlang?

pfk66

Onde vc leu necessário?

Sim, qual sua dúvida?

leandronsp
{{troll mode=on}}

sobre a treta whatsapp x telecom, whatsapp usa Erlang que foi feita pela telecom acho que temos um vencedor <img src="//https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngtuck_out_tongue.png?v=5" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:">

{{troll mode=off}}

Brincadeiras à parte, acho que o post do @nel já descreveu bem a importância e os contras desse tipo de abordagem de microservices, e já que citaram Amazon na thread, meus dois cents nisso é que os web services da Amazon são ótimas (mas não únicas) tools pra quem precisa de projeto com alta disponibilidade e não tem um trilhão de dólares pra investir como já foi discutido aqui.

O problema com a Amazon é a curva de aprendizado em algumas tools, pois acaba ficando difícil encontrar conteúdo adequado pra utilizá-las de forma simples, o que faz com que alguns developers optem pelos treinamentos. Contudo, acho que dá sim pra conseguir alcançar se se esforçar um pouco na pesquisa.

pfk66

Sim, whatsapp é desenvolvido em Erlang, que possui uma arquitetura baseada em serviços e imutabilidade.

Arquivo texto e C deve ser usado em projetos internos da telecom, e portanto, de pouca importância.

igor_ks

(Alimentando o troll em 3,2,1…)

pfk66, não existe essa de tecnologia bala de prata. Cada sistema tem sua particularidade, nem todo sistema é necessário ser feito em microservicos, nem todo sistema se encaixa bem em um banco NoSQL. Não existe essa de que todos sistemas possuem grandes volumes de dados, sendo assim, pensar em disponibilidade acaba nao sendo algo crítico.

Não fique preso na tecnologia da moda, pois amanhã já não será mais. Aprenda a usar a tecnologia certa, no lugar certo, assim poderá avaliar melhor quais são as tecnologias que se adequam melhor para seu projeto.

esmiralha

Se os dados do seu sistema cabem na palma da sua mão, você não tem um problema de big data… :slight_smile:

pfk66

Concordo. Mas se alguém fala que tem experiência com projetos críticos, com grande volume de dados, então acho que estamos falando de uma bala específica pra uma situação específica.

Pena que ele não soube informar qual bala a infra dele usa afinal?

Eu uso Erlang, Lisp, UNIX, programação funcional… onde você viu moda? serviços de armazenamento rápido e distribuído?
E porque essa tecnologia vai desaparecer no futuro? aquecimento global? :open_mouth:

igor_ks

Simplesmente porque outras melhores aparecerão, assim como aparece uma nova tecnologia a cada dia.
Acharia desnecessário responder, pois acho que está trollando, mas vai que né…

pfk66

Não posso ficar esperando uma suposta tecnologia melhor do futuro, meus clientes querem aplicações inteligentes hoje.

Ta parecendo que inventa desculpa pra justificar ficar preso naquilo que você já conhece e não sair da sua zona de conforto.

igor_ks

Voce tá falando coisas sem nexo já, uma hora fala uma coisa, ai por causa de um trecho voce fala outra.

Parei por aqui :slight_smile:

pfk66

A sua sugestão que não tem nexo nenhum.
Onde já se viu não usar uma tecnologia que me traz benefícios hoje, porque amanha pode aparecer uma tecnologia melhor… kkkkk

blz, vou deixar de usar SSD porque amanha pode aparecer armazenamento quântico. :laughing:

pfk66

Se os dados do seu sistema cabem na palma da mão, não precisa de banco de dados (ex: apps móveis).

Mas se você desenvolve aplicações inteligentes de backend, em algum momento vai ter que lidar com big data uma vez que esses sistemas são acumulativos com o tempo.

esmiralha

Qualquer sistema decente da indústria financeira ou de seguros, utiliza append-only. Na verdade, esse conceito vem da contabilidade e dos livros-caixa e foi inventado há mais de 400 anos. Não tem nada de novo, nem de original.

Implementation options vary, from specific accumulative data stores such as (propaganda removida) to simply using an “append-don’t-update” approach with a traditional database.

pfk66

Qualquer sistema inteligente daqui em diante vai usar accumumulate-only, resultando assim em big data. Qual a sua dúvida?

Não perguntei se tem alguma coisa nova, não vivo de moda, vivo de resolver problemas de TI.

pfk66

Se agora o whatsapp pode fazer um sistema telecom com 5 pessoas, é algo novo pra mim.
Se agora o Joãozinho pode fazer um sistema inteligente (que resulta em big data), é algo novo pra mim.

Vocês dinossauros precisam parar de se fechar em tecnologias e ter uma visão mais holística do negócio, parecem torcedor de futebol.

esmiralha

Chega de te alimentar, você já está gordo demais…

pfk66

Você pode dizer o mesmo de big data, que não é novo porque Acme Corp. já usa big data tem 400 anos. dã.

Por acaso já trabalhou com big data e bancos tradicionais?

pfk66

@esmiralha avisa suas amigas cheerleaders que financeiras já estão experimentando com esses novos banco de dados imutáveis.

Criado 22 de agosto de 2016
Ultima resposta 30 de ago. de 2016
Respostas 60
Participantes 9