O que são microsserviços?
Os microsserviços são uma interpretação moderna de arquiteturas orientadas a serviços em que uma aplicação é dividido em muitos serviços pequenos, permitindo que as equipes inovem mais rapidamente e alcancem uma grande dimensão.
Muitas empresas criaram seus serviços originais usando uma arquitetura de aplicação monolítica, ou seja, todos os componentes da arquitetura residem dentro de uma única infraestrutura. Quando os desenvolvedores usam uma arquitetura de microsserviços, eles separam todos os componentes do sistema e os implantam como serviços individuais. Os serviços se comunicam entre si usando chamadas de API.
O resultado é um estilo arquitetônico modular que permite atualizações rápidas e econômicas. Se você precisar aumentar a escala de apenas uma área do sistema, será mais fácil e mais barato do que aumentar a escala de todo o sistema. Os desenvolvedores usam ferramentas de orquestração de contêineres e Kubernetes para alocar adequadamente o poder de processamento e quaisquer outros recursos necessários. Esses serviços são executados em um contêiner em um servidor baseado em nuvem.
Você pode entender a arquitetura de microsserviços comparando-a com uma arquitetura de aplicação monolítica tradicional. Com um estilo arquitetônico monolítico, todos os componentes individuais fazem parte de uma só unidade. Tudo é desenvolvido, implantado e dimensionado em conjunto. As equipes devem escrever todo a aplicação em uma única linguagem com um único runtime.
Isso significa que equipes diversas que trabalham em diferentes componentes da aplicação precisam se coordenar para que não afetem o trabalho umas das outras. Por exemplo, uma parte da aplicação pode depender de um módulo que precisa de uma versão específica, digamos 1.8, enquanto outra equipe precisa do mesmo módulo, mas requer a versão 1.7 porque 1.8 é incompatível com outra dependência. Em uma aplicação monolítica, é preciso escolher uma versão ou outra. Da mesma forma, aplicações monolíticas implantam tudo como uma única aplicação, exigindo que o código seja testado e implantado em conjunto.
Com microsserviços, cada componente é dividido e implantado individualmente como serviços que se comunicam entre si por meio de chamadas de API.
Os microsserviços maximizam a confiabilidade da aplicação e a velocidade de implantação. Isso é particularmente importante em um mercado que está se movendo e evoluindo mais rápido do que nunca. A arquitetura em contêiner dos microsserviços move as aplicações para qualquer lugar sem alterar ou interromper o ambiente, facilitando a velocidade e reduzindo o tempo de inatividade.
Vamos analisar os principais componentes de uma arquitetura de microsserviços:
- Clientes: as aplicações clientes geralmente devem consumir funcionalidade de vários microsserviços e exigir atualizações frequentes.
- Bancos de dados: uma API de serviço atualiza os bancos de dados de microsserviços transportando serviços totalmente remotos que sustentam comunicações entre processos para diferentes pilhas.
- Gateway de API: um gateway de API é um padrão de design de microsserviços que é um ponto de entrada de aplicação única vital para solicitações de roteamento e tradução de protocolo.
- Provedores de identidade: um microsserviço de identidade deve permitir o acesso de servidor para servidor e orientado pelo usuário aos dados de identidade.
- Formatos de mensagens: os microsserviços se comunicam com padrões de arquitetura de microsserviços síncronos ou assíncronos.
- Conteúdo estático: os clientes recebem conteúdo estático por meio de serviços de armazenamento baseados em nuvem e redes de entrega de conteúdo.
- Gerenciamento: este componente permite que os usuários empresariais configurem serviços durante o tempo de execução.
- Descoberta de serviço: é necessário um mecanismo de descoberta de serviço para solicitar o serviço.
O artigo essencial de Martin Fowler sobre microsserviços define nove componentes que a maioria das arquiteturas de microsserviços tem em comum.
1. Componentização por meio de serviços
Por natureza, as arquiteturas de microsserviços são divididas em serviços-componentes. Como tal, cada serviço pode ser designado, implantado, refinado e reimplantado de forma independente, sem afetar o ambiente. Isso significa que geralmente é possível alterar um serviço em vez de reimplantar uma aplicação inteira.
2. Organizado em torno dos recursos de negócios
Com a abordagem monolítica, as equipes de tecnologia se concentraram separadamente em recursos relacionados à tecnologia, como interface do usuário, bancos de dados e lógica do lado do servidor. Por outro lado, os microsserviços organizam equipes multifuncionais em torno de capacidades e prioridades de negócios. As equipes podem projetar produtos com base em serviços individuais que se comunicam usando um message bus (barramento de mensagens).
3. Produtos, não projetos
No passado, os desenvolvedores de aplicações usavam o modelo de projeto, no qual as equipes eram encarregadas de construir o software, que depois era enviado para uma equipe de manutenção após a conclusão. A arquitetura de microsserviços favorece uma equipe que tenha o produto como propriedade ao longo de sua vida útil. Isso permite que os desenvolvedores interajam com seus produtos de novas maneiras, vendo como eles se comportam na produção e aumentando o contato com o usuário. Também capacita engenheiros e empresas a aumentar a colaboração e entender os campos uns dos outros.
4. "Smart endpoints and dumb pipes"
Os microsserviços têm muito em comum com o sistema UNIX tradicional. Eles recebem uma solicitação, a processam e geram uma resposta apropriada. Fowler se refere a essa abordagem como "smart endpoints and dumb pipes" (endpoints inteligentes e transporte de informações simples, ou burro). A infraestrutura geralmente é "burra", pois serve apenas como um roteador de mensagens, e toda a inteligência reside nos endpoints que produzem e consomem endpoints.
5. Governança descentralizada
A governança descentralizada é a estrutura padrão de uma arquitetura de microsserviços porque as plataformas de tecnologia única geralmente levam à padronização excessiva. Uma grande vantagem dos microsserviços, em oposição aos monólitos, é usar diferentes linguagens de programação e tecnologias onde elas são mais adequadas. Por exemplo, os microsserviços do Spring Boot podem criar uma aplicação para um componente, com o Spring Cloud constituindo outro.
6. Gerenciamento de dados descentralizado
A maioria dos microsserviços permite que cada componente gerencie seu próprio banco de dados a partir do gerenciamento de dados descentralizado. Você sempre pode usar o melhor armazenamento de dados para um projeto específico, eliminando a tarefa demorada de atualizações de banco de dados compartilhados.
7. Automação de infraestrutura
Especialistas em CI/CD usam automação de infraestrutura em microsserviços. Ela diminui as cargas de trabalho dos desenvolvedores e aumenta significativamente a eficiência do cronograma de implantação.
8. Design projetado para falhas
Assim como as melhores empresas, os microsserviços são desenvolvidos com foco na resiliência. Como serviços únicos e diversificados devem se comunicar, é provável que haja uma falha. Esta é a principal desvantagem dos microsserviços em comparação com os monólitos, porque a solução requer complexidade adicional.
Configurações sofisticadas de monitoramento e registros em log são necessárias para evitar que a falha afete os consumidores. Embora isso exija mais trabalho para os engenheiros, isso significa que a resistência a falhas está bem desenvolvida.
9. Design evolutivo
Em uma indústria de tecnologia de ritmo tão acelerado, o design evolutivo não é mais um luxo, é uma necessidade. Novos dispositivos eletrônicos chegam ao mercado a cada ano, e suas aplicações devem estar prontas para acomodá-los. O design desconstruído de microsserviços significa que você pode reformular suas aplicações sem reimplantação.
Fowler entrou em mais detalhes sobre cada um desses componentes nesta palestra na GOTO.
Os designs de microsserviços são ágeis e flexíveis e permitem um tempo de inatividade mínimo para manutenção, reparos e atualizações.
Alguns casos de uso importantes para microsserviços incluem:
1. Processamento de dados
Aplicações em execução usando a arquitetura de microsserviços podem processar mais solicitações simultâneas em menos tempo, tornando-os mais eficientes.
2. Migração de sites
Os microsserviços evitam o tempo de inatividade da interface do usuário, da estrutura e da migração do site
3. Mídia em grande escala
Plataformas podem lidar com um número extremo de solicitações para diferentes subdomínios sem erros ou atrasos.
4. Faturas e transações
Os microsserviços podem ajudar a tornar as transações mais robustas com a redução da falha da aplicação, permitindo que as empresas aumentem a escala sem reimplantar.
5. Sistemas desatualizados
O desenvolvimento de um novo sistema em contêiner é mais eficiente e eficaz do que a atualização de monólitos antigos e desajeitados.
Implementar uma arquitetura de microsserviços ou decompor um monólito legado em microsserviços, pode aumentar a velocidade, a flexibilidade e a capacidade de ajuste de escala, muitas vezes sacrificando a simplicidade. Os monólitos são fáceis de criar, implantar e depurar, mas difíceis de dimensionar. Embora a arquitetura de microsserviços seja mais complexa, há vários benefícios para os engenheiros:
Implantação independente
Cada microsserviço deve ser autossuficiente para funcionar corretamente. As equipes de DevOps podem corrigir erros facilmente em um único microsserviço sem impactar todo o ambiente.
Capacidade de ajuste de escala
Em um monólito, todos os elementos da aplicação devem ser dimensionados em conjunto, o que pode resultar em dimensionamentos desnecessários de algumas partes. Com componentes independentes, é possível dimensionar cada microsserviço individualmente de acordo com sua carga. As equipes que criam aplicações com uma arquitetura de microsserviços podem modificar cada serviço sem afetar o restante da aplicação. Os programadores podem trabalhar em paralelo para identificar serviços críticos, atualizar funcionalidades e ajustar os serviços selecionados.
Liberdade da pilha tecnológica
A dependência de uma única pilha tecnológica para toda a aplicação é uma das características mais limitantes de uma arquitetura monolítica. Com os microsserviços, os desenvolvedores podem criar uma aplicação usando a linguagem de programação, a estrutura, os bancos de dados e as ferramentas de front-end e back-end apropriados para o trabalho. Assim, não é preciso se comprometer com uma pilha padronizada que faz tudo, mas não é excelente em nada.
Isolamento de falhas
Em uma aplicação monolítica, uma única falha geralmente resulta na falha de todo o sistema. Os microsserviços isolam as falhas em seus componentes para impedir que toda a aplicação seja afetada. Quando um microsserviço falha, o restante da aplicação pode permanecer ativa. É recomendado exibir o status de cada microsserviço em um painel para que a equipe de manutenção possa identificar e resolver problemas rapidamente. Corrigir problemas pode ser tão simples quanto mover um controle deslizante para colocar um servidor adicional online com virtualização sob demanda.
Produtividade
Os microsserviços reduzem silos e promovem a colaboração entre equipes multidisciplinares para forças de trabalho distribuídas e remotas. Eles podem ser testados de forma independente enquanto os desenvolvedores cuidam de outros aspectos, agilizando o controle de qualidade. Para os engenheiros, as arquiteturas de microsserviços permitem criar serviços dimensionáveis, resilientes e fáceis de implantar.
Com a entrega contínua, as empresas podem testar as funcionalidades disponibilizando diferentes versões de serviços para diversos subconjuntos de usuários. Até mesmo as empresas que possuem software monolítico estão explorando formas de modernizar sua pilha com microsserviços.
Os microsserviços trazem os benefícios da resiliência e da capacidade de ajuste de escala. No entanto, integrar pequenos serviços independentes pode ser um desafio.
Vamos conferir o que você deve considerar.
- Complexidade: à medida que o número de microsserviços aumenta, sua gestão e orquestração se tornam mais complexas. Automação de infraestrutura e CI/CD são fundamentais.
- Uniformidade de dados: os microsserviços operam juntos em um sistema extenso, mantendo seus próprios dados. Isso significa que haverá dados comuns em vários serviços. As mudanças devem ser replicadas em todos os serviços consumidores sempre que houver alterações nesses dados comuns.
- Risco de falha na comunicação: ao contrário das chamadas de função internas, as chamadas para outros serviços podem não ser bem-sucedidas devido a problemas na rede. É uma troca necessária pela resiliência e capacidade de ajuste de escala proporcionadas pela arquitetura de microsserviços. Para aumentar a resiliência, você pode usar os padrões bulkhead e circuit breaker.
As arquiteturas de microsserviços estão dominando o mundo dos negócios. Muitas empresas já utilizam microsserviços ou planejam implementá-los em breve. Os microsserviços economizam dinheiro, reduzem os problemas de engenharia e minimizam o tempo de inatividade.
Para empresas de todos os portes, a hora é agora. Este é o momento ideal para migrar sua arquitetura de uma estrutura monolítica para uma baseada em microsserviços. Ao fazer isso, sua empresa vai economizar dinheiro a longo prazo, operar com mais eficiência e deixar seus clientes mais satisfeitos. Os microsserviços são a arquitetura do futuro. Chegou a hora de você descobrir como eles podem ajudar sua empresa.
Comparado com os monólitos, os microsserviços oferecem inúmeros benefícios empresariais. Eles promovem uma relação simbiótica entre desenvolvedores e líderes empresariais, gerando melhores resultados. Os microsserviços promovem:
- Ritmo mais rápido de inovação: seu design evolutivo facilita a mudança e a atualização de componentes da aplicação.
- Maior estabilidade e resiliência: os microsserviços praticamente eliminam o tempo de inatividade porque, ao contrário das arquiteturas monolíticas, os serviços são separados, permitindo que os desenvolvedores atualizem um componente de cada vez.
- Capacidade de ajuste de escala: as equipes de desenvolvimento podem trabalhar em componentes isolados sem impactar todo o ambiente, o que as ajuda a acompanhar as demandas empresariais.
- Redução de custos e aumento de receita: microsserviços exigem menos infraestrutura geral, minimizam o tempo de inatividade e melhoram a estabilidade para uma experiência do cliente aprimorada. Também reduzem o tempo entre a criação do protótipo e a implantação do produto.
Com o aumento do uso de aplicativos SaaS por empresas e indivíduos e a crescente complexidade no desenvolvimento desses aplicativos, a necessidade de disponibilidade e capacidade de ajuste de escala nunca foi tão elevada. Os serviços de apoio, como bancos de dados expansíveis, entrega contínua, ferramentas de observabilidade e streaming de dados e eventos, também estão crescendo rapidamente.
Os engenheiros estão constantemente adquirindo habilidades para superar esses desafios. Enquanto isso, a arquitetura de microsserviços e a infraestrutura de rede ainda estão amadurecendo. É fácil imaginar um futuro em que as aplicações de microsserviços sejam mais fáceis de manter e desenvolver, além de agregarem ainda mais valor às empresas.
Com o GitLab, você pode fazer commit do seu código e acessar as ferramentas necessárias em uma única aplicação. Não é mais necessário juntar 10 ferramentas diferentes para cada projeto.
Ao usar uma plataforma de DevOps para gerenciar seus microsserviços, você evita silos de informações. Aumentar a visibilidade entre as equipes e facilitar as transferências resulta em um ciclo de vida de DevOps mais rápido, além de garantir a implantação e estabilidade de seus projetos.
O GitLab simplifica a orquestração de microsserviços com:
- CI/CD integrada: como Fowler aponta, a automação da infraestrutura usando entrega e implantação contínuas é necessária para microsserviços. A CI/CD integrada do GitLab é ideal para empresas que desejam utilizar microsserviços.
- Registro de contêiner integrado e uma robusta integração com o Kubernetes: embora a arquitetura de microsserviços possa ser usada com a tecnologia de máquina virtual (MV) legada, os contêineres e o Kubernetes facilitam muito a criação de microsserviços. O GitLab foi projetado para funcionar bem com o Kubernetes.
- Monitoramento integrado: o monitoramento é fundamental para uma operação bem-sucedida. Os recursos de monitoramento do GitLab que utilizam o Prometheus tornam a plataforma ideal para microsserviços.
- Pipelines multiprojetos: o GitLab comporta a execução de pipelines com dependências entre projetos, facilitando o gerenciamento das interações entre diferentes repositórios.
- Compatibilidade com monorepo e capacidade de executar um pipeline somente quando o código é alterado em um diretório específico: isso reduz o tempo perdido executando pipelines em todo o repositório.
- Clusters do Kubernetes em nível de grupo: é possível integrar vários projetos a um único cluster do Kubernetes.
GitLab é uma plataforma única de DevOps que atrai desenvolvedores e desenvolvedoras de ponta em busca de colaboração e melhoria. Confira alguns dos principais benefícios de usar o GitLab:
- Sem alternância entre aplicações: os desenvolvedores não precisam alternar constantemente entre aplicações, facilitando a concentração e a permanência na tarefa. Além disso, você pode facilmente vincular tíquetes ao trabalho, aumentar a produtividade e eliminar as principais preocupações das equipes de engenharia de software.
- Redução da carga de trabalho: o GitLab facilita a automatização de tarefas para que você se concentre em atividades mais complexas que gerem resultados. Tarefas manuais e repetitivas tiram a alegria do dia de trabalho de qualquer desenvolvedor. Automatize tarefas para aumentar a satisfação e a produtividade no trabalho.
- Colaboração e transparência: os principais benefícios da plataforma GitLab. A transparência entre desenvolvedor e cliente facilita a colaboração para soluções rápidas e fáceis, reduzindo a necessidade de comunicação.
- Fazer parte da comunidade: todos os desenvolvedores podem contribuir para o núcleo de código aberto do GitLab para melhorar a aplicação. É uma comunidade acolhedora, amigável e extremamente receptiva que recebe e ajuda novos membros a aprender como tudo funciona.
- Aprenda práticas avançadas de desenvolvimento de software: neste mundo cada vez mais acelerado, o desenvolvimento de códigos e aplicações é uma das áreas que crescem mais rápido. O GitLab mantém sua comunidade atualizada sobre os últimos avanços e auxilia no aprendizado das melhores práticas.
Inicie sua migração para a nuvem nativa
Crie, teste, implante e monitore seu código em uma única aplicação.
Saiba como o Ask Media Group migrou de servidores locais para a nuvem da AWS com as ferramentas e integrações do GitLab. Junte-se a nós e aprenda com a experiência deles.
Recursos relacionados
Tudo pronto para começar?
Descubra o que sua equipe pode fazer com uma plataforma DevSecOps unificada.