Os microsserviços estão ganhando popularidade entre os desenvolvedores, pois são bons para grandes serviços de Internet que atendem a um grande número de usuários. Se houver uma falha em um serviço, os outros continuarão seu trabalho: isso é muito importante para sistemas grandes e complexos. No caso de inovações, você pode simplesmente escrever um novo serviço, que se encaixará facilmente em todo o sistema e não precisará lidar com problemas de compatibilidade. Além disso, você pode incluir várias equipes independentes usando diferentes linguagens de programação no trabalho: os microsserviços permitem que você faça isso.
A abordagem de microsserviço tem vantagens e desvantagens. Neste artigo, consideraremos em detalhes a essência da arquitetura de microsserviços, suas diferenças em relação à arquitetura monolítica, vantagens e desvantagens, bem como as peculiaridades da operação de aplicativos criados com base no princípio dos microsserviços.
O que é arquitetura de microsserviços
A arquitetura de microsserviços é um estilo de desenvolvimento de software que consiste em dividir o monólito de um sistema em componentes separados que representam serviços independentes. Cada serviço individual é projetado para executar funções relativamente simples, o trabalho do aplicativo é testado em tempo real com o rastreamento de elementos técnicos e características comerciais. Os serviços têm limites físicos claros, o que os torna escaláveis e possibilita o uso de diferentes linguagens de programação. As alterações necessárias são feitas sem afetar o aplicativo inteiro.
Arquitetura de microsserviço e monólito
Os sistemas monolíticos combinam todos os serviços de um aplicativo em um único processo e, em seguida, duplicam esse sistema em vários servidores. A arquitetura de microsserviços tem um pacote separado para cada serviço, e eles também são armazenados em servidores diferentes, isolados uns dos outros e duplicados, se necessário. Isso permite que você trabalhe com cada elemento funcional separadamente.
Benefícios da arquitetura de microsserviços
Os benefícios dos microsserviços foram suficientemente fortes para que grandes empresas como Amazon, Netflix ou eBay os implementassem em seus sistemas.
- Alta tolerância a falhas: se um dos serviços ficar inoperante, todos os outros continuarão funcionando. Assim, as falhas em serviços individuais não interferirão em todo o fluxo de trabalho;
- Flexibilidade: você pode tentar implementar uma nova tecnologia com pouco sangue. Será muito mais rápido e, em caso de falha, será fácil reverter as alterações. Ao alterar um dos serviços localmente, não colocamos em risco todo o sistema e o tempo necessário para as alterações é menor;
- Simplicidade: quanto menos código (e cada serviço individual é um sistema completo, portanto, você não precisa entender um grande número de detalhes que não estão relacionados a essa função específica), mais fácil será para os programadores entenderem o que e como ele funciona. Além disso, isso levará menos tempo;
- Facilidade de colocar o código escrito para funcionar: uma pequena quantidade de código proporciona uma implementação rápida;
- Escalabilidade: os serviços mais necessários e necessários podem ser adicionados e expandidos quando houver necessidade. O sistema inteiro permanece o mesmo.
Em comparação com a arquitetura monolítica, a arquitetura de microsserviços tem maior flexibilidade e a capacidade de dimensionar independentemente os serviços individuais. É mais fácil fazer alterações locais no código sem colocar em risco todo o sistema, mas, em vez disso, a complexidade da interação entre os serviços aumenta.
Desvantagens da arquitetura de microsserviços
Apesar da tendência e de um grande número de vantagens da arquitetura de microsserviços, ela também tem algumas desvantagens.
- A comunicação entre os próprios serviços é complexa. Como cada elemento funcional é isolado, é necessário um cuidado especial ao criar uma comunicação competente entre eles, porque eles terão que trocar solicitações e respostas entre si em qualquer caso. É evidente que, à medida que o número de serviços aumenta, a complexidade na criação de suas mensagens também aumenta.
- O crescimento do número de serviços também implica o crescimento do número de bancos de dados com os quais esses serviços se relacionam, porque, diferentemente da arquitetura monolítica, os microsserviços usam mais de um banco de dados comum.
- A complexidade dos testes se expressa no fato de que primeiro é preciso lidar com cada serviço separadamente e, depois, testar a interação correta dele com outros microsserviços.
- Os microsserviços são mais adequados para uso em organizações individuais, pois podem ser excessivamente difíceis de usar, enquanto que para serviços de Internet em massa eles são perfeitos.
Exploração de aplicativos de arquitetura de microsserviços
- Monitoramento
Com o tempo, pequenos problemas podem se transformar em problemas graves. Portanto, o monitoramento oportuno e, no caso dos microsserviços, contínuo, é essencial. O monitoramento de uma arquitetura de microsserviço é muito mais complexo de configurar e mais caro de manter do que o monitoramento de um aplicativo monolítico. - Realização da tolerância a falhas
As arquiteturas monolíticas e de microsserviços não podem evitar falhas nos aplicativos. Um princípio importante na criação de um aplicativo em microsserviços é presumir que as falhas do sistema ocorrerão mais cedo ou mais tarde. E com essa suposição inicial, o aplicativo é criado.
O código deve ser testado exaustivamente antes de ser liberado para produção. No entanto, sempre há uma chance de que algum erro não seja detectado. É para esses casos que o sistema de teste de caos foi inventado. Erros e problemas são criados automática e intencionalmente – para estudá-los com antecedência e encontrar uma solução rápida ou uma maneira de evitá-los. - Escalonamento
A natureza baseada em nuvem dos microsserviços e a virtualização que os sustenta têm a escalabilidade como sua principal vantagem. Cada serviço executa uma função específica, todos os serviços são relativamente pequenos – todas essas características da arquitetura são o que torna o dimensionamento mais fácil e indolor.
Quando é apropriado usar a arquitetura de microsserviços
A arquitetura de microsserviços é especialmente relevante para empresas que fornecem serviços on-line a um grande número de usuários ao mesmo tempo. Esses serviços incluem grandes lojas on-line, plataformas de streaming e redes sociais.
A possibilidade de dimensionamento independente de diferentes componentes do sistema é importante para eles. Por exemplo, nos dias de liquidação, a carga no serviço de colocação de pedidos aumenta muito, enquanto outros serviços funcionam em modo normal. Os microsserviços permitem que você aumente com flexibilidade a capacidade de computação e a largura de banda especificamente para o serviço de checkout sem afetar outros subsistemas.
A tolerância a falhas também é fundamental para serviços on-line com um grande público – se um serviço falhar, o restante do aplicativo deverá continuar a operar normalmente. A separação em microsserviços independentes proporciona exatamente esse isolamento de falhas.
Além disso, os microsserviços são convenientes para grandes equipes de desenvolvimento distribuídas – cada equipe pode lidar com seu próprio serviço, o que simplifica a coordenação e acelera o processo de lançamento.
Ao mesmo tempo, os microsserviços podem ser uma solução redundante para pequenos projetos ou sistemas internos de empresas. Nesses casos, é preferível usar a arquitetura monolítica devido à sua maior simplicidade e baixo custo de desenvolvimento e suporte.
Casos de uso da arquitetura de microsserviço
Amazônia
Uma das primeiras empresas a adotar microsserviços. Toda a infraestrutura da Amazon é construída a partir de centenas de serviços independentes – para catálogo de produtos, contas de usuários, pesquisa, recomendações e assim por diante. Isso permite que a Amazon dimensione facilmente os recursos para atender a cargas de trabalho crescentes e implemente rapidamente novos produtos por meio do desenvolvimento de microsserviços.
Netflix
O serviço de streaming da Netflix é dividido em mais de 800 microsserviços. Eles são responsáveis pela transcodificação de vídeo, recomendações, testes A/B de interfaces e outras tarefas. A flexibilidade dos microsserviços permite que a Netflix expanda rapidamente sua frota de servidores quando o tráfego aumenta e faça experimentos com UI/UX sem prejudicar o sistema.
Uber
A empresa usa centenas de microsserviços – para geolocalização, mapeamento, processamento de pagamentos, logística e muito mais. Isso garante a confiabilidade e a resiliência do sistema sob cargas enormes e permite que a Uber seja dimensionada rapidamente e entre em novos mercados.
Conclusões
Os microsserviços são mais adequados para serem usados como uma arquitetura para o desenvolvimento de sistemas de informações empresariais. Nessa variante, teremos um sistema excessivamente complexo do ponto de vista de operação e manutenção. E o aumento nos custos operacionais não compensará as vantagens do uso da arquitetura de microsserviços, porque elas não serão totalmente manifestadas em uma organização, nem mesmo em uma grande organização.
A principal área de aplicação efetiva dos microsserviços são os grandes serviços de Internet que operam em tempo real para um grande número de usuários.