Frontend como microservices [Micro Frontends] #661
Replies: 57 comments 1 reply
-
Alo @houstondapaz, só dando um pitaco mesmo, acho que a estrutura de micro serviços para modulos de frontend podem ser vistas como varios apps em uma mesma base de código, por exemplo o front do site e o front do admin, podem ser serviços diferentes rodando na mesma base. Digo, não é uma regra a relação 1 pra 1 entre serviços de back e front. Pra essas preocupações sobre a arquitetura de frontend, recomendo seguir a linha "headless", onde o backend é isolado do(s) front(s) e a comunicação é feita pelas APIs. :) |
Beta Was this translation helpful? Give feedback.
-
Pra aplicações pequena/mediana, realmente não vejo necessidade de ser um microservice pra cada módulo/componente. A manutenção e legibilidade do código ficará mais dificil, e pode gerar mais problemas com isso. Acredito que a componentização e uma boa estrutura de pastas/arquivos no repositório, irá abrir mais sua mente. =) |
Beta Was this translation helpful? Give feedback.
-
Vendo modularização de código, sugeriria muito mais voltar a modularização por componentes/pacotes/módulos que microsserviços. Com React + Webpack tem o Code Splitting, creio que poderia ser feito algo parecido usando o Lazy Loading, bem semelhante: Aí seu entrypoint seria feito direto no código usando |
Beta Was this translation helpful? Give feedback.
-
@bernardodiasc valeu pelo pitaco rs. Ahhh obrigado pela dica do "headless" vou dar uma lida. @wtolotti acho que o que vc flw cai no mesmo caso que expliquei (ou não?) @ninetails se só fizer via modulos importados direto no entrypoint eu não teria que regerar o bundle toda vez que o modulo for atualizado? Em algum ponto o entrypoint vai ter que saber que aquele modulo existe, mas o que queremos evitar é fazer o deploy do entrypoint só por conta de um update em algum modulo. Obrigado pelas repostas |
Beta Was this translation helpful? Give feedback.
-
@houstondapaz é, infelizmente do jeito que falei ainda se tem necessidade de regerar o bundle, mesmo pq existem otimizações do webpack que seriam ideais como o mas sobre o code-splitting, o Webpack mesmo gera arquivos diferentes para cada entrypoint, mas somente pros inline (os que forem chamados via System.import, ou só import()). Mesmo separando os arquivos, dado que as configurações estejam corretas no webpack, ele resolve e carrega os arquivos "splittados" somente quando necessário (quando passar pelo import correspondente) |
Beta Was this translation helpful? Give feedback.
-
Entendi que voce quer tipo importar um app dentro de outro app em tempo de uso. Nunca fiz isso, o mais perto que sei li aqui https://medium.com/@tomsoderlund/micro-frontends-a-microservice-approach-to-front-end-web-development-f325ebdadc16 Ao pé da letra, Na arquitetura headless, o serviço Tem varias formas de fazer isso, não sei qual é a melhor mas vamos vendo ai :D |
Beta Was this translation helpful? Give feedback.
-
@bernardodiasc esse link é uma maravilha, abre milhões de possibilidades, tinha visto ele antes mas não achava mais, valeu. Então é isso mesmo que você disse, mas não necessariamente são apps, são mais para components mesmo. Mas o server de pessoa não vai devolver o html renderizado, eu vou só expor os js do modulo de pessoa , os components em si e no client que ele se renderiza, busca as infos na api de pessoa e tudo mais. E depois que eu li o headless, é basicamente o que fazemos hoje em dia né? Um front independente que só busca no server os dados. A treta é como "servir" esses components, vindo de dominios diferentes, mas já to pegando algumas coisas, esse projeto tem uma arquitetura legal a ser seguida, usando SystemJS. Uma saida que encontrei para a não duplicação dos modulos comuns é importar eles no entrypoint e não incluir no bundle dos components especificos. @ninetails Eu tava vendo o esquema do code-splitting do webpack, mas ele cria uma referencia para um arquivo que ele cria e não trabalha com arquivos fora do bundle que ele cria, ou estou errado? |
Beta Was this translation helpful? Give feedback.
-
@houstondapaz sim, no webpack para trabalhar com arquivos de fora do bundle creio que seria usar externals. |
Beta Was this translation helpful? Give feedback.
-
@ninetails não conhecia o externals parece interessante |
Beta Was this translation helpful? Give feedback.
-
@houstondapaz já viu: Mosaic da Zalando? É algo que pode te ajudar a nível de estudo de arquitetura. Eu comecei a fazer algo sobre o assunto mas nada a nível de implementações reais mas estou certo que próximo passo para nossa aplicação aqui será um passo como esse até por que temos muitos squads! Espero ter contribuido =) |
Beta Was this translation helpful? Give feedback.
-
Salve @edmolima muito foda essas libs deles, da pra explorar por varios pontos. Valeu mesmo |
Beta Was this translation helpful? Give feedback.
-
Acredito que o @rubenspgcavalcante caso tu precise tirar dúvida seja um cara que pode te ajudar muito @houstondapaz, ele me mostrou esse projeto e é um brazuca que trabalha na Zalando \o/ |
Beta Was this translation helpful? Give feedback.
-
Opa, tamo aew @edmolima! :D Voce pode tbm abordar de forma mais simples, algo parecido com o que eu fiz na minha antiga empresa. Lá nos necessitávamos de uma dashboard totalmente customizável, e que novos widgets pudessem ser lançados de forma simples e rápida. Na epoca tbm estavámos usando angular 1.x. Enfim, dá uma estudada e escolhe a melhor opção! Qq coisa estamos aqui, soh falar! :D |
Beta Was this translation helpful? Give feedback.
-
Aqui na Arquivei nós usamos o front como um "micro-serviço", dessa forma nós trabalhamos isolados do time de backend. |
Beta Was this translation helpful? Give feedback.
-
@adrianojdesouza isso é o "micro-frontend" ou apenas uma divisão de front / back? |
Beta Was this translation helpful? Give feedback.
-
Pra Webpack: Tem o externals diversos plugins pra pegar lib de CDN (creio que isolaria libs) ou senão utilizar o Webpack DLL Plugin e deixar o mesmo caminho pros split chunks (não tem mais common chunks na versão 4) |
Beta Was this translation helpful? Give feedback.
-
+1 |
Beta Was this translation helpful? Give feedback.
-
Alguém já utilizou o projeto: https://single-spa.js.org/ para realizar o desenvolvimento front-end como microserviços? Se sim, sabem me dizer prós e contras dele? Ou a experiência que obteve utilizando o mesmo... Estou pensando em implementá-lo na empresa que estou atualmente, pois aqui temos apps legados AngularJS + jQuery (Sim colocaram jQuery junto no controller do AngularJS, quem nunca... rsrs) e como não temos tempo de reescrever o que já está funcionando por enquanto, estou pensando em utilizá-lo para poder desenvolver as novas features com um framework mais atual. |
Beta Was this translation helpful? Give feedback.
-
@GustavoGottardi este Single SPA é novo? Não lembro de ter falando dele aqui neste post... Vou dar uma olha pra testar algo.. |
Beta Was this translation helpful? Give feedback.
-
Olhando um pouco para a plataforma acredito que não buildar os serviços em bundle de módulos faça bastante sentido nesse cenário. Usar es6 modules e construir web components que interajam entre si via um serviço de integração ou com as api's. O Google é mestre em fazer isso, parte do YouTube funciona assim. Dois requisitos dessa abordagem seriam servir com http2 para obter performance e usar polyfill em navegadores legados. |
Beta Was this translation helpful? Give feedback.
-
@GustavoGottardi Mas não tenho nada contra. Mas brother se tu usar, compartilha conosco pfv :D Abrasss |
Beta Was this translation helpful? Give feedback.
-
Pessoal saiu um vídeo sobre nosso assunto: |
Beta Was this translation helpful? Give feedback.
-
Mais um nova talk sobre o assunto. |
Beta Was this translation helpful? Give feedback.
-
Empresas gigantescas como FB, Amazon e Google já têm micro-frontends em produção, mas não são muito bem otimizados. Ao abrir o source code você pode perceber chunks de código repetidos, mas na escala deles faz sentido. O problema é extremamente complexo e o ScriptedAlchemy está trabalhando numa solução com Webpack pra deixar os bundles mais leves: https://github.com/ScriptedAlchemy/webpack-external-import (atenção: esse projeto definitivamente não está pronto pra produção, só dê uma olhada por curiosidade). Discussão no repositório do Webpack: webpack/webpack#10352 |
Beta Was this translation helpful? Give feedback.
-
Em 2020, alguém mais tem cases e experiências de uso real de Microfrontends? 😄 |
Beta Was this translation helpful? Give feedback.
-
@felipefialho gravamos um podcast no hipsters sobre o case da Conta Azul 😁https://hipsters.tech/micro-frontends-no-conta-azul-hipsters-on-the-road-26/ |
Beta Was this translation helpful? Give feedback.
-
@eliseumds It will be for Webpack 5, with a backport to WP4. The rewrite is nearing completion and we will probably begin testing it in production this week. There is a v3 branch which contains the rewrite for webpack core |
Beta Was this translation helpful? Give feedback.
-
@fsblemos Obrigado pelo link, acabei de escutar tudo. Parte dos problemas que vocês enfrentaram eu imaginei que aconteceriam, acho que com o tempo vocês vão resolvendo alguns deles. Mas o case de vocês é enorme, conseguiram arrumar uma solução viável em cima de um projeto legado. Sensacional 😄 |
Beta Was this translation helpful? Give feedback.
-
Alguém aqui teve a necessidade de trabalhar com microfront com server side rendering? Se sim, como resolveu essa questão? Vejo pouquíssimos materiais mais amplos sobre microfront com SSR, na verdade quase nada. |
Beta Was this translation helpful? Give feedback.
-
@leandromatos yes i have. expose a rendering API and have the MFE being loaded make a call to another one to get the rendered html. Or use ESI with a CDN I also am working on federated SSR with the webpack core upgrades I'm working on. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Salve!
Estou trabalhando em um projeto para migrar um monolito para microserviços. Já migramos quase todo o back, mas agora surgiu o dilema de como vamos fazer isso com o front. Hoje ele é um app Angularjs (1.3.15) e já decidimos que vamos migrar pra Vue, porem não queremos mais um super front e sim um entrypoint que vai agregar os outros pedaços do sistema.
O problema É como juntar essas partes? Surgiram dois pontos
Problemas que ainda ainda não conseguimos pensar/resolver, se escolhido a primeira opção teremos que reimplantar o entrypoint todas as vezes que um serviço for atualizado (acabando com a disponibilidade por conta de um unico ponto).
Escolhendo a segunda opção, como evitar a importação do mesmo modulo várias vezes (exemplo a lib do Vue e qlqr outra lib comum a mais de um serviço) uma vez que pensamos em criar um bundle de cada serviço via webpack e ele cuidar dessa parte de dependencias de modulos.
Enfim, queria saber se alguem já fez algo parecido, se tem uma ideia de como implementar ou uma terceira via.
abrass
Beta Was this translation helpful? Give feedback.
All reactions