Arquitetura de microsserviços: uma marca de competência
Publicados: 2022-08-02Sistemas monolíticos não são mais viáveis no tempo contemporâneo de conteinerização e computação em nuvem. Houve um crescimento na complexidade dos sistemas de software nos últimos anos, e os sistemas monolíticos estão se tornando cada vez mais complexos para criar e manter.
Os componentes do sistema são produzidos e agrupados como uma única unidade em um sistema monolítico. Todo o sistema teria que ser reimplantado se um único componente fosse alterado. Isso o torna mais difícil de dimensionar e menos versátil. A estrutura interconectada e inter-relacionada de um sistema autônomo pode ser um esforço difícil para os desenvolvedores ao construir aplicativos abrangentes. Os sistemas afetados também dificultam a realização de modificações importantes, a adoção de novas pilhas de tecnologia ou o envio de atualizações e atualizações. Uma arquitetura orientada a serviços, que consiste em uma variedade de serviços que podem se comunicar entre si dentro de um sistema, define a estrutura para a transição da programação monolítica em primeiro lugar.
A arquitetura de microsserviços foi o próximo passo no domínio e foi um meio mais unificado, porém granular, de estabelecer uma estratégia de desenvolvimento de software bem-sucedida. A expressão “Arquitetura de Microsserviços” surgiu nos últimos anos para descrever uma técnica específica de construção de sistemas de software como suítes de serviços implementáveis de forma independente. Embora não haja uma definição específica desse estilo de arquitetura, existem vários traços semelhantes em torno da organização em torno da capacidade de negócios, implantação automatizada, inteligência nos terminais e gerenciamento descentralizado de linguagens e dados.
É uma abordagem de desenvolvimento de software que divide um sistema em seções menores e independentes e, em seguida, as conecta. Os serviços autônomos são reunidos para atender às demandas especializadas de um determinado setor. Spotify, Amazon, PayPal, Netflix e Twitter tomaram nota desta nova descoberta e estão anunciando extensivamente.
Índice
O que é Arquitetura de Microsserviços?
A frase “Arquitetura de Microsserviços” tornou-se mais popular nos últimos anos para se referir a uma abordagem específica à arquitetura de programas de software como conjuntos de serviços que podem ser implantados independentemente uns dos outros. Apesar do fato de que esse estilo arquitetônico não pode ser definido com precisão, ele compartilha certas características com outras abordagens arquitetônicas. Isso inclui organização baseada na capacidade de negócios, implantação automatizada, inteligência em endpoints e controle descentralizado de idiomas e dados. Em outras palavras, a capacidade dos microsserviços de operar de forma independente é a força motriz por trás de sua ascensão ao topo da cena de desenvolvimento de software.
A arquitetura de microsserviços, mais frequentemente chamada simplesmente de microsserviços, é um paradigma de design que é utilizado durante o desenvolvimento de software de aplicativo. Os microsserviços permitem dividir um aplicativo grande em várias partes menores e independentes, cada uma responsável por seu próprio conjunto exclusivo de tarefas. Uma única solicitação de usuário pode fazer com que um aplicativo construído em microsserviços faça muitas chamadas para seus próprios microsserviços internos para construir sua resposta.
Os contêineres são um ótimo exemplo de arquitetura de microsserviços, pois liberam você da necessidade de se preocupar com as dependências dos serviços, permitindo que você se concentre no desenvolvimento dos próprios serviços. Os contêineres costumam ser a ferramenta de escolha para desenvolver aplicativos nativos da nuvem para plataformas contemporâneas na forma de microsserviços. O termo “arquitetura de microsserviços” refere-se a um tipo de arquitetura de aplicativo em que o próprio aplicativo é construído como uma coleção de serviços. Ele oferece uma estrutura para construir, implantar e gerenciar de forma independente diagramas e serviços de arquitetura para microsserviços.
Necessidade do desenvolvimento da arquitetura de microsserviços e limitações da arquitetura monolítica
1. Dimensionamento de aplicativos
Como os negócios bem-sucedidos em escala da Web experimentam uma expansão exponencial, seu software também deve permitir uma grande escalabilidade horizontal. Ocasionalmente, apenas uma parte do software que é pesada em CPU ou E/S deve ser dimensionada e tratada individualmente (implementada com programação poliglota). O software que é monolítico funciona como uma entidade única e é criado utilizando uma única linguagem de programação e Tech Stack. Para realizar o dimensionamento horizontal, é necessário dimensionar todo o aplicativo. Como o software monolítico suporta apenas uma única linguagem de programação, é impossível desenvolver um único módulo em uma linguagem de programação diferente ou Tech Stack.
2. Velocidade de Desenvolvimento
Para reduzir o tempo de colocação no mercado, todos os negócios hoje em dia desejam um desenvolvimento rápido de recursos. Em um aplicativo monolítico grande, complicado e às vezes multimilionário, a adição de novos recursos é extremamente lenta devido à enorme carga cognitiva colocada no desenvolvedor. Módulos de programas monolíticos massivos são fortemente conectados, dificultando o desenvolvimento de novas funcionalidades. Consequentemente, adicionar novas funcionalidades a um programa monolítico é frequentemente lento e caro.
3. Escala de Desenvolvimento
Para ganhar vantagem competitiva ou aproveitar os frutos mais fáceis, as empresas frequentemente procuram paralelizar o desenvolvimento contratando mais desenvolvedores. Os desenvolvedores não podem trabalhar independentemente em uma base de código maciça, monolítica e estreitamente conectada e frequentemente exigem sincronização e vigilância adicionais para evitar interferir no trabalho uns dos outros. Adicionar desenvolvedores adicionais não resulta em um aumento de recursos e, ocasionalmente, pode resultar em menos recursos. Da mesma forma, devido à alta Carga Cognitiva necessária para compreender toda a base de código monolítica, normalmente os novos recrutas ou recém-formados levam um tempo considerável para criar suas primeiras linhas de código produtivo. Em 2008, tive uma entrevista com uma empresa de telecomunicações com sede em Berlim, onde o gerente técnico me disse com um sorriso presunçoso que a base de código C++ da empresa incluía milhões de linhas e que novos engenheiros só podem produzir código produtivo após quatro a seis meses.
4. Ciclo de Liberação
O Ciclo de Liberação de grandes programas monolíticos é tipicamente excessivamente longo, variando de seis a dois anos e meio, com alguns meses adicionais a vários anos de atraso devido ao seu tamanho. Grandes ciclos de lançamento frequentemente colocam uma corporação em desvantagem competitiva nos dias modernos, pois um novo concorrente pode entrar no mercado durante o intervalo de lançamento.
5. Modularização
Na Arquitetura Monolítica, a barreira entre os Módulos é tipicamente uma Interface interna. Assim que o tamanho do programa aumenta, a separação entre os módulos começa a quebrar. Conseqüentemente, os Módulos na Arquitetura Monolítica são frequentemente fortemente amarrados em vez de fracamente acoplados e altamente coesos. Se compararmos o desenvolvimento de software à sociedade, então a modularização monolítica é análoga aos princípios moralistas e religiosos, que não podem garantir a lei e a ordem na sociedade.
6. Modernização
Aplicativos bem-sucedidos existentes exigiram modernização por vários motivos (por exemplo, aproveitar o hardware moderno, navegador, largura de banda de rede, pilha de tecnologia ou atrair bons desenvolvedores). Modernizar um programa monolítico pode ser caro e demorado, pois requer uma modernização Big Bang de todo o aplicativo sem afetar o Serviço.
Tipos de microsserviços
Microsserviços diferenciais e integrais são os dois tipos distintos de microsserviços.
uma. Diferencial
Nesta forma de arquitetura, a arquitetura se decompõe em serviços independentes que são capazes de se separar em transações. Isso resulta na distribuição de uma única transação para muitos serviços.
b. Integrante
Os aplicativos de microsserviços são projetados para combinar uma infinidade de microsserviços em experiências de usuário individualizadas. Esses programas cobrem várias necessidades distintas, incluindo gerenciamento de nível de serviço, provisionamento sob demanda e composição dinâmica.
Características dos microsserviços
1. Autônomo
Uma arquitetura de microsserviços permite que cada componente de serviço seja criado, implantado, gerenciado e dimensionado separadamente dos outros serviços. Os serviços não precisam compartilhar nenhum código ou como fazem as coisas com outros serviços. Toda a comunicação entre as diferentes partes é feita por meio de APIs bem definidas.
2. Especializado
Cada serviço é baseado em um conjunto diferente de habilidades e em um problema diferente. Com o tempo, se os desenvolvedores adicionarem mais código a um serviço, o serviço poderá ser dividido em serviços menores.
3. Componentização via Serviços
Embora as arquiteturas de microsserviços façam uso de bibliotecas, o principal método pelo qual elas irão componentizar seu próprio software é decompô-lo em serviços. As bibliotecas são componentes vinculados a um programa e chamados usando chamadas de função na memória, enquanto os serviços são componentes fora do processo que se comunicam com um mecanismo como uma solicitação de serviço da Web ou uma chamada de procedimento remoto. Definimos bibliotecas como componentes que são vinculados a um programa e chamados usando chamadas de função na memória. (Esta é uma ideia distinta do que é referido como um objeto de serviço em muitos sistemas OO. Ao contrário das bibliotecas, os serviços podem ser implantados independentemente, que é uma das principais razões pelas quais eles são usados como componentes em vez de bibliotecas. O benefício de empregar serviços no lugar de componentes é a geração de uma interface de componente mais transparente.Uma boa técnica para estabelecer uma Interface Publicada explícita não existe na maioria das linguagens de programação.
Documentação e disciplina são normalmente as únicas coisas que impedem os clientes de violar o encapsulamento de um componente, o que resultaria em um acoplamento excessivamente apertado entre os componentes. Ao utilizar protocolos de chamadas remotas explícitos, os serviços facilitam para seus usuários evitar isso. O uso de serviços desse tipo traz algumas desvantagens. Como as chamadas feitas remotamente são mais caras do que as feitas dentro do mesmo processo, as APIs usadas remotamente precisam ter uma granularidade mais fina, o que pode torná-las mais difíceis de utilizar. Quando você transcende as fronteiras de um processo, é mais difícil fazer mudanças comportamentais, o que dificulta se você precisar modificar a forma como as responsabilidades são distribuídas entre os componentes.
4. Produtos não Projetos
A maioria das iniciativas de desenvolvimento de aplicativos que encontramos segue um paradigma chamado projeto, em que o objetivo principal é entregar um software que é considerado finalizado. Após o término do projeto, o software é entregue a uma organização de manutenção e a equipe responsável por construí-lo é desmembrada.
Os proponentes de microsserviços geralmente evitam essa arquitetura em favor do conceito de que uma equipe deve possuir um produto em sua totalidade durante toda a sua vida útil. O conceito da Amazon de “você constrói, você opera”, no qual uma equipe de desenvolvimento assume total responsabilidade pelo programa enquanto ele está sendo usado na produção, é uma fonte proeminente de inspiração para isso. Isso coloca os desenvolvedores em contato diário com a forma como o software funciona na produção e aumenta a comunicação com seus usuários, uma vez que eles são obrigados a assumir pelo menos parte da carga de fornecer suporte ao programa.
5. Governança Descentralizada
Além disso, as equipes de desenvolvimento de microsserviços preferem uma abordagem distinta aos padrões. Eles preferem fornecer ferramentas úteis que outros desenvolvedores possam usar para enfrentar desafios comparáveis aos que estão enfrentando, em vez de confiar em um conjunto de padrões codificados. Normalmente, essas ferramentas são derivadas de implementações e compartilhadas com uma comunidade maior, às vezes, mas nem sempre, utilizando um paradigma interno de código aberto. Agora que o git e o github são o sistema de controle de versão de fato preferido, as técnicas de código aberto estão se tornando cada vez mais predominantes nas organizações.
A Netflix é um ótimo exemplo de empresa que adere a esse princípio. O compartilhamento de código valioso e, mais importante, testado em batalha como bibliotecas ajuda outros desenvolvedores a lidar com problemas comparáveis de maneira semelhante, permitindo que eles escolham um método diferente, se necessário. As bibliotecas compartilhadas tendem a se concentrar nas preocupações comuns de armazenamento de dados, comunicação entre processos e automação de infraestrutura, conforme discutido em mais detalhes abaixo.
Para a comunidade de microsserviços, as despesas são especialmente indesejáveis.
6. Padrões testados em batalha e padrões aplicados
É um pouco paradoxal porque as equipes de microsserviço preferem evitar o tipo de padrões estritamente impostos por grupos de design de negócios, mas utilizam e até defendem padrões abertos como HTTP, ATOM e outros microformatos.
A principal distinção é como os padrões são produzidos e implementados. Padrões controlados por organizações como o IETF não se tornam padrões até que haja várias implementações deles no mundo todo, que são frequentemente o resultado de iniciativas de código aberto bem-sucedidas.
Esses padrões são um mundo diferente da maioria dos padrões de negócios, que são frequentemente produzidos por pessoas com experiência limitada em programação recente ou influência excessiva do fornecedor.
7. Automação de Infraestrutura
Um efeito colateral que vimos de mais automação como consequência da entrega e implantação contínuas é a introdução de ferramentas úteis para ajudar desenvolvedores e pessoal de operações. Ferramentas para produzir artefatos, manter bases de código, iniciar serviços básicos ou adicionar monitoramento e registro padrão são relativamente difundidos atualmente. O melhor exemplo na web é, sem dúvida, a coleção de ferramentas de código aberto da Netflix, embora existam outras, principalmente o Dropwizard, que usamos extensivamente.
Transforme sua ideia de aplicativo em realidade
Vamos construir um novo aplicativo juntos
Visão geral do mecanismo de comunicação em uma arquitetura de microsserviços
Os serviços que compõem uma arquitetura de microsserviços são executados em vários servidores diferentes. Protocolos como HTTP, AMQP e TCP são utilizados para facilitar a comunicação entre esses diversos serviços. Os dois protocolos com maior adoção generalizada são HTTP/REST e mensagens assíncronas. O protocolo HTTP é frequentemente utilizado por uma interface de programação de aplicativos (API) REST para serviços online. Os clientes podem acessar e alterar os recursos de um aplicativo utilizando um localizador de recursos uniforme em conjunto com métodos HTTP como GET, POST, PUT e DELETE (URL). Uma interface de programação de aplicativos (API) REST atua como um ponto de entrada para a funcionalidade de um aplicativo. Os clientes comunicam suas necessidades aos serviços enviando solicitações às APIs. Os clientes têm a opção de se comunicar com os microsserviços diretamente ou por meio de um gateway de API.
Um único ponto de entrada é especificado para todas e quaisquer solicitações feitas aos serviços usando um padrão de gateway de API. O gateway da interface de programação de aplicativos (API), ao receber uma solicitação de um cliente, direciona a solicitação para o serviço adequado.
O padrão de gateway da API tem várias variantes, uma das quais é o padrão de back-end para front-end. Esse design cria um gateway de API distinto para cada tipo de cliente (por exemplo, um gateway para clientes móveis e outro para aplicativos da web).
É aconselhável manter os níveis de comunicação baixos entre os vários serviços. A comunicação assíncrona é superior à comunicação síncrona em situações em que a comunicação é obrigatória. Não é necessário que o serviço que enviou a solicitação aguarde uma resposta antes de continuar suas operações.
Quando incorporados ao banco de dados, as filas de mensagens e os sistemas de streaming são boas maneiras de habilitar a comunicação assíncrona. Além disso, quando esses sistemas fornecem semântica transacional para uma operação de dados e o envio de uma mensagem, eles são capazes de atender a esses dois requisitos. Por isso, a implantação de microsserviços fica mais fácil e escalável. Quando apenas APIs REST são usadas, a comunicação entre os microsserviços é forçada a ser síncrona, o que geralmente impede o crescimento.
Para que serve a arquitetura de microsserviços?
Microsserviços é um estilo de arquitetura moderno que visa projetar sistemas complexos como coleções de artefatos de software de baixa granularidade e fracamente acoplados chamados microsserviços; cada microsserviço implementa uma pequena parte ou até mesmo uma única função da lógica de negócios dos aplicativos. Os microsserviços estão ganhando popularidade porque visam projetar sistemas complexos como coleções de artefatos de software de baixa granularidade e fracamente acoplados. Os microsserviços são frequentemente empregados para acelerar o processo de desenvolvimento de aplicativos.
A ideia de micro foi desenvolvida em resposta à infraestrutura monolítica sobre a qual a maioria das organizações foi inicialmente construída, principalmente se o negócio em questão estiver em operação há pelo menos dez anos. Cada componente de uma arquitetura de microsserviço inclui os seguintes recursos no lugar de um design monolítico:
- CPU exclusivo para ele
- Seu próprio sistema operacional e ambiente de tempo de execução
- Em muitos casos, uma equipe especializada estará trabalhando para garantir que cada serviço seja diferenciado dos demais.
Devido a esse design, cada serviço é capaz de:
- Execute seu próprio procedimento único
- Comunique-se independentemente entre si sem precisar depender da comunicação dos outros microsserviços ou do aplicativo como um todo.
Há uma ampla adoção de arquiteturas de microsserviços baseadas em Java, principalmente aquelas construídas usando Spring Boot. Além disso, microsserviços e arquitetura orientada a serviços são frequentemente comparados entre si. As duas abordagens têm o mesmo objetivo, que é particionar grandes programas de software em partes mais gerenciáveis, mas suas metodologias são diferentes. Além disso, muitas empresas estão sob pressão de seus rivais para fazer ajustes em seus sistemas o mais rápido possível, minimizando o impacto que esses ajustes têm na disponibilidade de seus sistemas. Isso exige projetos adequados, estilos arquitetônicos e técnicas de desenvolvimento. A engenharia de software oferece uma variedade de paradigmas que podem satisfazer parcialmente essas necessidades. Esses paradigmas dividem os sistemas de software em unidades de software de granulação fina, o que melhora a modularidade, a capacidade de manutenção e a reutilização e, como resultado, reduz o tempo necessário para colocar um produto no mercado.
Em poucas palavras, oferece agilidade a longo prazo. Os microsserviços permitem a manutenção aprimorada em sistemas complexos, grandes e altamente escaláveis, permitindo a criação de aplicativos baseados em um grande número de serviços implantáveis de forma independente, cada um com seu próprio ciclo de vida granular e autônomo. Isso é feito permitindo a criação de aplicativos baseados em um grande número de serviços.
Os microsserviços têm a vantagem adicional de serem capazes de expandir por si mesmos. Você não precisa ter um único aplicativo monolítico que precise dimensionar como uma única entidade, pois, em vez disso, você pode dimensionar microsserviços individuais. Você poderá aumentar apenas a região funcional do programa que requer poder de processamento adicional ou largura de banda de rede para atender à demanda dessa maneira, em vez de dimensionar outras partes do aplicativo que não exigem dimensionamento. Isso resulta em economia de custos devido à quantidade reduzida de hardware necessária.
Aqui estão alguns exemplos de arquitetura de microsserviços
uma. Realocação do site
A realocação de um site é possível; por exemplo, um site hospedado em uma plataforma monolítica complexa pode ser realocado para uma plataforma de microsserviços baseada em nuvem e em contêiner.
b. Conteudo de midia
Um sistema de armazenamento de objetos escalável pode ser usado para armazenar imagens e ativos de vídeo, e uma arquitetura de microsserviços pode ser usada para oferecer esses materiais diretamente para a web ou dispositivos móveis.
c. Negociações Financeiras e Faturamento
É possível tratar o processamento de pagamentos e o pedido como dois serviços distintos distintos. Isso torna possível receber pagamentos mesmo se houver um problema com o sistema de cobrança.
d. Processamento de dados
Os serviços modulares de processamento de dados podem ter seu suporte à nuvem aprimorado com o uso de uma plataforma de microsserviços, que também pode ser utilizada para processamento de dados.
Padrões de design para microsserviços
A linguagem padrão é o seu guia!
a) Padrões de decomposição
- Bulkhead separa recursos importantes, como pool de conexões, memória e CPU, para cada carga de trabalho ou serviço. Ao implantar anteparos, uma única carga de trabalho (ou serviço) não pode usar todos os recursos, deixando outros de fome. Essa abordagem aumenta a robustez do sistema eliminando falhas em cascata causadas por um serviço. Este padrão é apelidado de Bulkhead porque se assemelha às partições seccionadas do casco de um navio. Particione instâncias de serviço em grupos distintos, com base na carga do cliente e nas necessidades de disponibilidade. Essa arquitetura ajuda a isolar falhas e permite preservar a capacidade de serviço para alguns usuários, mesmo durante uma avaria.
- O Sidecar instala componentes úteis de um aplicativo como um contêiner ou processo distinto para permitir o isolamento e o encapsulamento. Esse padrão também pode permitir que os aplicativos sejam compostos por componentes e tecnologias diferentes. Este padrão é apelidado de Sidecar porque se assemelha a um sidecar atrelado a uma moto. No design, o sidecar é acoplado a um aplicativo pai e oferece funcionalidades de suporte para o aplicativo. O sidecar também segue o mesmo tempo de vida do aplicativo pai, sendo construído e finalizado junto com o pai. O padrão sidecar é frequentemente chamado de padrão sidekick e é o último padrão de decomposição que mostramos no post.
- O Strangler Fig suporta a refatoração incremental de um aplicativo, substituindo gradualmente partes específicas de funcionalidade por novos serviços.
b) Padrões de Integração
1. Padrão de microsserviço encadeado
Haverá várias dependências para serviços únicos ou microsserviços, por exemplo, a Venda do microsserviço depende dos Produtos e Pedidos dos microsserviços. Um padrão de design de microsserviço encadeado ajudará você a fornecer uma resposta consolidada à sua solicitação. Um microservice-1 recebe a solicitação e se comunica com um microservice-2; ele também pode se comunicar com um microservice-3. Todas essas chamadas de serviço são síncronas.
2. Padrão Agregador
Ao separar a atividade de negócios em muitos pedaços lógicos menores de código, torna-se vital considerar como os dados fornecidos por cada serviço serão mesclados. O cliente não pode ser responsabilizado por isso.
O padrão Aggregator ajuda a resolver esse problema. Ele descreve como podemos combinar dados de várias fontes e fornecer o resultado final ao usuário. Isso é possível de duas maneiras:
- Um microsserviço composto fará chamadas para todos os microsserviços necessários, agregará e alterará os dados e os retornará.
- Além de particionar a solicitação para vários microsserviços, um API Gateway também pode agregar os dados antes de fornecê-los ao consumidor.
3. Padrão de proxy
Apenas oferecemos microsserviços pelo gateway de API. Eu permito que o GW adquira características de API como segurança e classificação de APIs. Nesse caso, o gateway de API é composto por três módulos de API:
- API móvel, que implementa a API para o cliente móvel FTGO
- API do navegador, que implementa a API para o aplicativo JavaScript em execução no navegador
- API pública, que implementa a API para desenvolvedores de terceiros
4. Padrão de Ramificação
É possível que um microsserviço precise obter os dados necessários de várias fontes diferentes, incluindo outros microsserviços. O padrão de microsserviço de ramificação é um híbrido dos padrões de design Aggregator e Chain. Ele permite o processamento simultâneo de solicitação/resposta de dois ou mais microsserviços e combina os benefícios de ambos. O microsserviço que está sendo invocado pode ser composto por vários outros microsserviços. O padrão Brach também pode ser usado para convocar uma única cadeia de microsserviços ou várias cadeias do mesmo tipo, dependendo dos requisitos de sua empresa.
Benefícios da arquitetura de microsserviços
No futuro previsível, a necessidade de microsserviços se expandirá drasticamente. Usando microsserviços, os programas legados são atualizados. Por meio da refatoração, os aplicativos monolíticos podem ser divididos em microsserviços. Isso leva à modernização progressiva de software desatualizado e é preferível a desenvolver o produto do zero usando microsserviços. O desenvolvimento de aplicativos pode se beneficiar muito de um design de microsserviços. Abaixo, listamos alguns de seus principais benefícios:
uma. Produtividade Superior
É mais fácil criar e manter um aplicativo se ele for particionado em seções menores e autossuficientes. Dependendo de seus requisitos, cada serviço pode ser desenvolvido, implantado e mantido de forma independente usando várias linguagens de programação, tecnologias e ambientes de software. Como cada componente modular de um aplicativo tem uma base de código menor, é mais simples liberar, dimensionar, implantar e testar vários serviços, e as tarefas relacionadas podem ser divididas entre as equipes de desenvolvimento e executadas simultaneamente.
b. Melhor resiliência
Cada microsserviço em uma arquitetura de microsserviços é um serviço único projetado para atender a um recurso de um aplicativo e executar tarefas discretas. Cada microsserviço é vinculado a outros serviços usando interfaces simples para lidar com questões de negócios. Depois de estabelecer um design baseado em microsserviços, todo o processo de detecção e tratamento de problemas relacionados ao desempenho se torna bastante simples.
Além disso, como essa forma de projeto fornece um mecanismo de isolamento de falhas aprimorado em comparação com os módulos individuais, aplicativos maiores geralmente não são afetados por uma única falha. Portanto, a longo prazo, o risco de tempo de inatividade futuro diminui consideravelmente, pois os desenvolvedores têm uma janela de tempo para liberar uma atualização ou substituir um módulo sem precisar reiniciar o programa inteiro.
c. Escalabilidade expandida
As equipes de DevOps podem escolher a pilha de tecnologia ideal para cada módulo sem se preocupar com a incompatibilidade se cada serviço for criado usando uma linguagem de programação ou tecnologia diferente. Serviços individuais podem ser desenvolvidos de forma independente e novos componentes podem ser adicionados sem tempo de inatividade do sistema ou reimplantação. Além disso, os serviços podem ser divididos em vários servidores, mitigando o efeito de desempenho de componentes altamente exigentes. Em segundos, os microsserviços podem oferecer escalabilidade horizontal.
Na realidade, é o alto dimensionamento horizontal que obriga organizações como Netflix, Spotify, Uber e Google a fazer a transição da arquitetura monolítica para a arquitetura de microsserviços. Em segundo lugar, se um microsserviço é pesado para a CPU, ele pode ser escrito em uma linguagem de programação otimizada para CPU (C/C++, Rust), enquanto outros microsserviços podem ser escritos em uma linguagem interpretada (Java, PHP).
d. Integração Contínua / Entrega Contínua (CI/CD)
A entrega e a integração contínuas são elementos fundamentais tanto da metodologia ágil quanto da filosofia DevOps. O design de microsserviço permite que uma equipe multifuncional construa, depure, teste, implante e atualize serviços de forma independente, o que resultará em solução de problemas e implantação mais rápidas a longo prazo.
e. Modularização
Na Arquitetura de Microsserviços, a barreira entre os Microsserviços consiste em interfaces físicas (de rede) difíceis de cruzar. Conseqüentemente, microsserviços bem projetados normalmente fornecem Modularização “ligeiramente conectada, altamente coerente”. Se o Desenvolvimento de Software é comparado à sociedade, então a Modulação de Microsserviços é comparável às leis nacionais e internacionais com polícia/punições. Como já sabemos, regras nacionais e internacionais rigorosas muitas vezes podem manter a ordem social.
f. Cronograma de lançamento
O aspecto mais legal da Arquitetura de Microsserviços é que cada Microsserviço pode ser implantado individualmente. Como resultado, o ciclo de lançamento de software para aplicativos de microsserviço é substancialmente mais curto e, com CI/CD, muitos lançamentos podem ser feitos todos os dias.
Desvantagens da Arquitetura de Microsserviços
uma. Increased Complexity of Communication Between the Services
When an application is broken up into smaller parts, it takes more time to send and receive messages. When handling requests between the different modules, developers have to be extra careful. Different systems might talk to each other in different ways, so there might be a need for an interpreter. This can make it harder to set up the whole system all at once. One of the biggest problems with microservices is that it might be hard to switch from a monolith to microservices because it's hard to manage.
This basically means that a lot of services made by a lot of different teams are deployed in a lot of different places, making it very hard to manage them. For example, Monolithic Architecture gives the same answer whether a Web app has a few thousand lines of code or several million lines of code (Enterprise Java or Ruby on Rails or PHP). But in Microservice Architecture, there are many possible solutions depending on the applications and use cases.
So, Microservice Architecture is doomed to fail if the wrong solution is used for the wrong application size or type (like putting a child's clothes on an adult man or the other way around). Also, it's hard to design Microservices because they have a lot more moving parts than Monoliths. Most of the time, a Microservice with bad design is worse than a Monolith.
b. Complex Configuration
Despite being isolated and self-contained, a microservice must be regularly configured, especially when it is moved from development to test to staging to production. This arrangement may be rather intricate. Moreover, if a microservice must utilize other microservices, these bindings must be defined before deployment or even during runtime.
c. Context Boundary Translation
Despite the fact that it would be ideal if all microservices within a MOA used the same data structures and communication protocols to interact with one another, this is typically not the case.
d. More Assets in Return for More Autonomy
MOAs demand a great deal of horsepower. Remember that each MOA microservice has its own runtime environment and data storage. In some instances, even the most streamlined microservice might consume the same amount of resources as a single monolithic program.
e. Unfeasible for Small Applications
Larger applications can benefit from microservices design. However, implementation will likely be more time-consuming and difficult for smaller applications.
f. Relatively Complex Deployment
The deployment might be a difficult and complicated process. During deployment, coordination between numerous services would be required. Deploying a WAR file in a container would not be as straightforward as it sounds.
g. Distributed Debugging
The difficulty of troubleshooting a MOA including hundreds of microservices communicating in concert is one of the downsides of microservices. Tracing the course of a request into and out of a MOA is challenging due to the independence of each container. The MOA is opaque if there is no effective monitoring mechanism in place. Logging the internals of a MOA offers a limited perspective, but MOA monitoring requires a comprehensive view.
h. Contributes to Enhanced Fault Tolerance
Large applications with several services deployed have more fault tolerance in the event that any one module fails. Microservices allow applications to continue functioning even if one service fails. This is because the services are not tightly coupled.
eu. Costly
An improper service partition might be expensive. For instance, if an application is improperly partitioned, the services are connected to a certain degree, and they will create numerous inter-service interactions via the network, which can degrade performance.
j. Greater Security Risks
Lastly, because microservices will reside across several environments, computers, and API requests, they provide a greater number of entry points for an attacker to compromise the system.
k. Communication Complexities
Microservices accomplish rigorous modularity and development independence via process/network barriers, as previously mentioned. The disadvantage is that services may only communicate over the physical network, resulting in increased network latency. Microservices may connect with one another in a variety of methods, including synchronous communication using REST, gRPC, and asynchronous communication using Message Queue and Message Broker, each of which has advantages and disadvantages.
Synchronous communication is simpler to build, but it might result in a Distributed Monolith. Asynchronous Communication via Messaging provides greater flexibility at the expense of increased implementation complexity. In Microservice Architecture, choosing the appropriate Communication channel based on the application is equally tough.
eu. Configuração complexa
Apesar de ser isolado e autocontido, um microsserviço deve ser configurado regularmente, especialmente quando ele é movido do desenvolvimento para teste, preparação para produção. Este arranjo pode ser bastante intrincado. Além disso, se um microsserviço deve utilizar outros microsserviços, essas associações devem ser definidas antes da implantação ou mesmo durante o tempo de execução.
Ferramentas de microsserviços
1. Sistema operacional
O aspecto mais importante do desenvolvimento de um aplicativo é estabelecer uma base sólida para ele, algo que o sistema operacional é responsável por fazer. O Linux é um exemplo desse tipo de sistema operacional que é frequentemente utilizado em todo o processo de desenvolvimento de aplicativos. Você terá acesso a um ambiente de execução independente ao usar contêineres Linux. Isso lhe dá a capacidade de orquestrar uma ampla gama de serviços, desde armazenamento e rede até segurança e autenticação.
2. Linguagens de programação
Com a Emizentech, agora você pode expandir seu repertório de programação sem problemas. Este instrumento é prático e atualizado. Em geral, ele é projetado para uso com todas as linguagens de programação. Além disso, é compatível com o bytecode mostrado no BEAM, também conhecido como Máquina Virtual Erlang.
3. Ferramentas de teste e gerenciamento de API (API Gateways)
O ato de construir e liberar APIs, impor seus padrões de uso, restringir o acesso, cultivar a comunidade de desenvolvedores, coletar e analisar estatísticas de uso e relatar o desempenho são todos componentes da administração da API.
Na verdade, uma plataforma de gerenciamento de API é composta pelos seguintes elementos:
- Ferramentas de desenvolvimento
- Porta de entrada
- Relatórios e análises
4. Ferramentas de mensagens (transmissão de mensagens e eventos)
Para que as comunicações ocorram, o sistema de microsserviços deve fazer uso de serviços independentes. Esse é o principal fator que determina o que a fila de mensagens exige de seus usuários. RabbitMQ e Apache Kafka são duas das soluções mais populares utilizadas para fins de mensagens.
O LinkedIn é responsável pela criação da tecnologia conhecida como Apache Kafka, que mais tarde foi contribuída para a comunidade Apache.
Os padrões são utilizados pela ferramenta RabbitMQ para facilitar a comunicação entre os muitos microsserviços. Além disso, auxilia no processo de dimensionamento de aplicativos simultaneamente.
5. Kits de ferramentas
Para simplificar, um kit de ferramentas é apenas uma coleção de ferramentas que são empregadas durante a execução de um determinado procedimento. O Toolkit é um componente da arquitetura de microsserviços que possibilita a construção de muitos aplicativos. Por causa disso, existe uma grande variedade de kits de ferramentas, cada um servindo a um objetivo distinto em sua aplicação. As muitas ferramentas disponíveis para escolha no Fabric8 e Seneca.
- Fabric8 é uma plataforma como tecnologia de serviço que, com a ajuda do Git, permite que desenvolvedores de software criem um sistema de gerenciamento de configuração para seus aplicativos.
- O Seneca, que opera como um Node, é utilizado no processo de desenvolvimento de microsserviços orientados a mensagens.
6. Estruturas de arquitetura e o kit de ferramentas Js
Como os microsserviços são um estilo de arquitetura, é essencial prestar atenção à estrutura de arquitetura que eles usam. Estes são os frameworks que são utilizados em conjunto com as tecnologias atuais para construir as aplicações mais recentes. Goa e Kong são agora as estruturas arquitetônicas mais populares.
7. Ferramentas de Orquestração
Devido à maneira geral como os contêineres e microsserviços funcionam juntos, a orquestração de contêineres é um tópico muito importante para se pensar. Conductor, Kubernetes e Istio são as três soluções de orquestração de microsserviços mais usadas para orquestração de contêineres. No entanto, existem muitas outras ferramentas disponíveis. Como parte do ecossistema de software de código aberto (OSS) que a Netflix mantém, o maestro serve como mecanismo de orquestração de microsserviços. O condutor é um programa que é executado na nuvem e utiliza uma implementação chamada de orquestrador de fluxo para realizar diversas atividades utilizando microsserviços. Além disso, facilita o controle e a visualização de todas as interações que ocorrem nos microsserviços.
8. Ferramentas de Monitoramento
Após a construção do aplicativo de microsserviço, as tarefas associadas a ele devem ser tratadas. Você precisará de ferramentas de monitoramento para seus microsserviços para realizar o mesmo. Prometheus e Log Stash são as duas tecnologias para monitorar microsserviços que são utilizadas com mais frequência. O Logstash é um excelente software. É uma plataforma que permite consolidar, armazenar e manipular dados e é de código aberto.
9. Ferramentas sem servidor
SA componente significativo de microsserviços é a tecnologia sem servidor, muitas vezes conhecida como função como serviço. Melhora a eficiência do processo de desmontagem de objetos em seus componentes mais fundamentais. Tanto Claudia quanto AWS Lambda são exemplos de ferramentas sem servidor amplamente utilizadas para o desenvolvimento de microsserviços. As instalações do AWS Lambda e do API Gateway também fazem parte das responsabilidades de Claudia. Além disso, Claudia é capaz de automatizar atividades de implantação e configuração propensas a erros, mantendo sua funcionalidade “pronta para uso”.
10. Contêineres, Docker e Kubernetes
- Contêineres: Os contêineres virtualizam essencialmente o sistema operacional do host (ou kernel), isolando as necessidades de um aplicativo daquelas de outros contêineres que estão sendo executados no mesmo computador.
- Docker: o Docker é composto de várias partes diferentes, incluindo um tempo de execução do contêiner conhecido como dockerd, um construtor de imagem de contêiner conhecido como BuildKit e uma interface de linha de comando usada para interagir com o construtor, contêineres e mecanismo (chamado docker).
- O Kubernetes é uma tecnologia de gerenciamento de contêineres gratuita e de código aberto que combina um grupo de computadores em um único pool de recursos de computação. O Kubernetes foi desenvolvido pelo Google. O Kubernetes permite que você estruture seus aplicativos na forma de grupos de contêineres, que são executados pelo mecanismo Docker. O Kubernetes cuida de garantir que seu aplicativo continue funcionando da maneira que você especificar.
Padrões comuns na arquitetura de microsserviços
uma. Padrão de back-end-for-front-end (BFF)
O BFF fornece uma interface direta entre o frontend e os microsserviços. Em um cenário ideal, a equipe de front-end também será responsável pela gestão do BFF. Um único BFF está preocupado apenas com uma única interface do usuário. Como consequência, poderemos simplificar nossos frontends e ter uma visão única dos dados por meio de seu backend.
b. Padrões de entidade e agregados
Uma entidade é uma coisa distinta com base em sua identidade. Em um site de comércio eletrônico, por exemplo, um objeto Produto pode ser identificado pelo nome, tipo e preço do produto. Um agregado é um grupo de coisas que devem ser consideradas como uma única unidade. Portanto, para o site de comércio eletrônico, um Pedido seria a coleção (agregado) de coisas (entidades) que um cliente comprou. Esses padrões são usados para categorizar dados de forma significativa.
c. Padrões de descoberta de serviço
Eles desempenham um papel crucial na facilitação da descoberta de serviços e aplicativos. As instâncias de serviço podem variar no contexto da arquitetura de microsserviço devido a causas como falha de serviço, escalabilidade, encerramento de serviço e atualizações. Esses padrões fornecem ferramentas de descoberta para lidar com essa transitoriedade. Usando verificações de integridade e falhas de serviço como gatilhos de rebalanceamento de tráfego, o balanceamento de carga pode empregar técnicas de descoberta de serviço.
d. Padrões de microsserviços do adaptador
O design do Adapter Microservices se ajusta, se necessário, entre uma API orientada a negócios construída usando técnicas de mensagens RESTful ou leves - usando as mesmas metodologias orientadas por domínio de um microsserviço típico - e uma API herdada ou um serviço SOAP clássico baseado em WS-*. A adaptação é necessária, por exemplo, quando uma equipe de desenvolvimento não tem controle descentralizado sobre a fonte de dados de um aplicativo.
e. Padrão de aplicação Strangler
O Strangler Pattern é um padrão de arquitetura bem conhecido para transformar lentamente um aplicativo monolítico em microsserviços, substituindo uma funcionalidade específica por um novo serviço.
Antipadrões na Arquitetura de Microsserviços
uma. Caos da Coesão
Os serviços devem se alinhar claramente a uma capacidade de negócios e não devem tentar realizar nada fora de seu escopo. A separação funcional de interesses é fundamental para o gerenciamento da arquitetura; caso contrário, arruinaria a agilidade, o desempenho e a escalabilidade, resultando em uma arquitetura fortemente conectada com entropia de entrega e caos de coesão.
b. Arquitetura de serviços em camadas
Um dos erros de SOA mais comuns foi a incompreensão de como realizar a reutilização do serviço. As equipes estavam amplamente preocupadas com a coesão técnica, e não com a reutilização funcional.
c. Complexidade
Outro fator importante de suporte à arquitetura de microsserviços é a maturidade organizacional. As equipes de desenvolvimento devem ser reformadas para assumir maior responsabilidade pela pilha completa, DevOps, em vez de simplesmente enviar tíquetes unidirecionais à equipe de infraestrutura.
d. Estratégia de versionamento ruim
Uma estratégia de controle de versão ineficaz resulta em código e dependências não gerenciáveis. Como resultado, uma abordagem de controle de versão eficiente para a arquitetura de microsserviços deve estar em vigor. Uma das abordagens mais básicas é criar uma versão da API e incluir a versão na URL da rota.
e. Design inadequado de padrões de acesso a dados de carga de trabalho de microsserviços
Padrões impróprios de acesso a dados de carga de trabalho de microsserviços: a arquitetura de um microsserviço depende do banco de dados de uma organização. Os padrões de acesso a dados nos microsserviços devem ser claramente segregados. Muitas vezes, é aceitável utilizar um único banco de dados em várias instâncias de serviço, desde que os dados estejam em tabelas/coleções devidamente particionadas.
f. Transtorno de Dependência
O transtorno de dependência é um antipadrão que se desenvolve quando você está ciente de que os serviços devem ser implantados em uma ordem específica para funcionar corretamente. Quando não há controle sobre a separação funcional das preocupações, pode surgir o caos da coesão.
Uma boa maneira de evitar esse antipadrão é introduzir um API Gateway.
Diferenças entre arquitetura monolítica, microsserviços e orientada a serviços
Microsserviços | SOA | Monolítico | |
Projeto | Os serviços são construídos em pequenas unidades e expressos formalmente com APIs orientadas para negócios. | Os serviços podem variar em tamanho, desde serviços de aplicativos pequenos até serviços corporativos muito grandes, incluindo muito mais funcionalidades de negócios. | Os aplicativos monolíticos evoluem para um tamanho enorme, uma situação em que é difícil entender a totalidade do aplicativo. |
Usabilidade | Os serviços são expostos com um protocolo padrão, como uma API RESTful, e consumidos/reutilizados por outros serviços e aplicativos. | Serviços expostos com um protocolo padrão, como SOAP, e consumidos/reutilizados por outros serviços – aproveite o middleware de mensagens. | A reutilização limitada é realizada em aplicações monolíticas. Limitado |
Escalabilidade | Os serviços existem como artefatos de implementação independentes e podem ser dimensionados independentemente de outros serviços. | As dependências entre serviços e subcomponentes reutilizáveis podem apresentar desafios de dimensionamento. | Dimensionar aplicativos monolíticos muitas vezes pode ser um desafio. |
Agilidade | Unidades implantáveis independentes menores facilitam o gerenciamento de compilação/liberação, aumentando assim a agilidade operacional. | Aprimora o compartilhamento de componentes que aumenta as dependências e limita os recursos de gerenciamento. | Difícil alcançar agilidade operacional na implantação repetida de artefatos de aplicativos monolíticos. |
Desenvolvimento | O desenvolvimento de serviços de forma discreta permite que os desenvolvedores usem a estrutura de desenvolvimento apropriada para a tarefa em questão. | Componentes reutilizáveis e práticas padrão ajudam os desenvolvedores na implementação. | Aplicativos monolíticos são implementados usando uma única pilha de desenvolvimento (ou seja, JEE ou .NET), o que pode limitar a disponibilidade da “ferramenta certa para o trabalho”. |
Principais mercados verticais que exigem microsserviços
Saúde: Prevê-se que o mercado de microsserviços de saúde cresça de US$ 130 milhões em 2015 para US$ 519 milhões em 2025. As necessidades de implantação de serviços mais rápida, aceitação mais rápida de novas tecnologias e melhor eficiência estão impulsionando o desenvolvimento no setor de saúde. O setor de saúde busca respostas para suas necessidades de segurança de dados e conformidade regulatória, além de como superar as dificuldades de implementação.
Bancos, Finanças e Seguros: A Aspen Mesh identifica três importantes benefícios dos microsserviços para serviços financeiros: maior segurança por meio da criação de um serviço de identidade distinto, entrega mais rápida de novas funcionalidades e uma camada de API mais fácil de gerenciar.
Governo: Além dos vários benefícios da arquitetura de microsserviços, as empresas governamentais podem se beneficiar de sua capacidade de projetar funcionalidades que correspondam aos objetivos de negócios, permitindo que as equipes de TI estabeleçam ou melhorem serviços dependendo das demandas dos constituintes.
Varejo: Amazon e eBay provaram os benefícios dos microsserviços para o setor de varejo, incluindo serviços altamente acessíveis e escaláveis e gerenciamento mais eficaz de bugs e erros.
Mídia e entretenimento: em 2009, a Netflix migrou para microsserviços e, atualmente, o serviço processa 2 bilhões de solicitações de borda todos os dias usando mais de 500 microsserviços. A mudança oferece velocidade, escalabilidade e acessibilidade.
Exemplos de empresas que adotaram a arquitetura de microsserviços
Amazon, Coca-Cola e Zalando, entre outras, estão mudando suas infraestruturas de TI para uma arquitetura de microsserviços. Além disso, estão reorganizando suas estruturas organizacionais internas e empurrando suas empresas para a vanguarda do mercado. A implementação da arquitetura de microsserviço é agradável quando você obtém conhecimento dos melhores do setor. Aqui estão algumas das instâncias mais eficazes de microsserviços.
#1. Uber
O conceito de propriedade foi devastado por dependências monolíticas entrelaçadas. A migração tornou-se um desafio. Novos desenvolvedores não puderam contribuir para o monólito. Pequenos erros levaram a resultados catastróficos. A Uber optou por implementar serviços baseados em nuvem. A Uber desenvolveu microsserviços para diversas operações, incluindo faturamento e gerenciamento de passageiros e viagens. Os gateways de API são usados para se comunicar com os serviços.
Além disso, a Uber estabeleceu padrões mundiais para seus microsserviços. Eles fornecem critérios quantitativos para documentação, confiabilidade, tolerância a falhas e assim por diante. Essas características foram monitoradas por meio de indicadores comerciais, como visitas às páginas. Logo, seus serviços atingiram o ápice da excelência.
#2. Netflix
A Netflix então migrou para uma infraestrutura de dados distribuída baseada em nuvem. A AWS foi usada para fornecer sistemas escaláveis horizontalmente e serviços/recursos adicionais. Em 2009, a Netflix iniciou sua transferência, que foi concluída após quase três anos. Em seguida, a Netflix converteu todos os seus aplicativos voltados para o usuário em microsserviços autônomos. Em 2012, a reforma foi concluída. Em 2015, a Netflix eliminou todas as interrupções de serviço e conseguiu processar cerca de 2 bilhões de consultas de API por dia. Atualmente, a Netflix tem mais de 139 milhões de usuários em 190 países. Hoje, a Netflix opera aproximadamente 700 sistemas de microsserviços separadamente.
#3. Amazonas
A Amazon tinha um grande monólito em 2001. Em 2021, praticamente todos estão familiarizados com o Amazon Web Services (AWS) — uma solução interna que se tornou um serviço comercial de computação em nuvem devido à sua superioridade. Os microsserviços são excelentes para o comércio eletrônico porque podem rastrear a atividade do usuário, as compras e todo o funil de vendas. De acordo com o gerente sênior de produtos da Amazon
Em seguida, eles produzem dados úteis para otimizar a apresentação do produto e o próprio processo de vendas. A Amazon é uma das primeiras empresas em que os microsserviços desempenharam um papel significativo na alteração de toda a organização. O gigante mundial alcançou um sucesso incrível durante uma época em que o design de monólitos era “a norma” para a construção de sistemas de tecnologia da informação.
Todas as modificações de código significativas foram paralisadas no processo de implantação por semanas antes de serem disponibilizadas aos usuários. A Amazon empregou microsserviços para simplificar e reduzir a duração do processo. Ao separar as estruturas em aplicativos individuais, os desenvolvedores puderam determinar onde estavam os gargalos, a natureza das lentidão e reconstruir as estruturas como arquiteturas orientadas a serviços, cada uma com uma pequena equipe dedicada a um único serviço.
O que começou como uma limpeza de sistema resultou no crescimento de um dos maiores players online da arquitetura contemporânea. A Amazon foi pioneira no caminho para outras empresas ao lançar uma sucessão de tecnologias de código aberto, como AWS (Amazon Web Services), que agora são difundidas.
#4. eBay
O sistema eBay suporta cerca de mil microsserviços. Experiências de front-end, como a web e aplicativos iOS e Android nativos, contatam os serviços intermediários que coordenam as chamadas, que então se comunicam com os serviços de back-end. Cada um dos serviços tem seu próprio grupo de desenvolvimento autônomo. A maioria dos microsserviços do eBay evoluiu sem um arquiteto, e o sistema sempre foi projetado de baixo para cima. A maioria das grandes empresas, como o eBay, desembarcou em uma coleção de microsserviços poliglotas que funcionam de acordo com os requisitos do cliente e, é claro, estão sempre mudando.
#5. SoundCloud
Cada serviço é desenvolvido e implantado de forma independente, conectando-se a outros serviços por meio da rede usando padrões leves de troca de dados, como JSON ou Thrift. Durante todo o turno, os novos microsserviços não conseguiram alterar o modelo relacional no MySQL ou, pior ainda, utilizar um mecanismo de armazenamento diferente. Para circunstâncias extremas, como mensagens de usuário para usuário em que um modelo baseado em threads foi substituído por um semelhante a bate-papo, a empresa usou cronjobs para sincronizar bancos de dados separados.
#6. Spotify
Para evitar o inferno da sincronização dentro da empresa, o Spotify foi projetado em uma arquitetura de microsserviços com equipes autônomas de pilha completa no comando. O Spotify emprega uma arquitetura de microsserviços na qual todos os desenvolvedores de software escrevem em “territórios” fechados com seus próprios recursos exclusivos. Cada microsserviço tem uma responsabilidade única e direta e, na maioria das circunstâncias, um banco de dados e uma lógica que não podem ser acessados por outro processo.
Que tipo de desafios os microsserviços podem ajudá-lo a superar?
Esta é a solução para a questão “que dificuldades os microsserviços resolvem?”; vamos examinar os obstáculos que as arquiteturas de microsserviços ajudaram a superar.
CASO 1 Recuperação do saldo do eBay
O eBay utiliza quase mil serviços. Muitos serviços de front-end enviam chamadas de API, enquanto os serviços de back-end realizam operações administrativas e relacionadas ao envio. O eBay originalmente utilizou um programa monolítico Perl e C++. O site do eBay é um produto primário, assim como para muitos outros titãs da internet. A necessidade de adicionar vários recursos incrementais ao site do eBay continuou a aumentar. Além disso, esse tipo de site tinha que estar acessível 24 horas por dia, sete dias por semana, mesmo com a adição de novos recursos.
Devido à necessidade de minimizar o tempo de inatividade, o eBay optou por mudar para a arquitetura de microsserviços. Isso permitiu que o site se tornasse mais estável e promovesse a integração assíncrona. Melhorias significativas foram feitas na flexibilidade de implantação e na duração do ciclo de lançamento. Quando os serviços foram isolados, a eficiência do desempenho aumentou e a expansão ficou mais fácil.
CASO 2 Uber e Expansão Rápida
Uber, o serviço de táxi mais popular, começou com um único pacote para atender passageiros em São Francisco, onde foi implementado inicialmente. Esse software intimamente conectado foi capaz de gerenciar a maioria, se não todas, as atividades de negócios, incluindo cobrança, pagamentos e serviços de conexão de motorista. À medida que a empresa se desenvolveu, porém, as coisas começaram a declinar. A Uber vinha ampliando sua área de cobertura e oferecendo outros serviços.
À medida que mais recursos foram adicionados, o pacote ficou mais coeso. Toda a lógica estava contida em um local, e as dificuldades começaram a surgir. Logo, mesmo uma pequena modificação exigia que todo o programa fosse reimplantado. A integração contínua quase imediatamente se torna uma grande responsabilidade.
A ausência do modelo de propriedade deveu-se às muitas dependências interdependentes do monólito. Portanto, a migração foi difícil. Também ocorreu que os desenvolvedores recém-contratados não puderam contribuir para o monólito. Mesmo que ocorresse um pequeno erro, as consequências eram graves. Foi quando eles tomaram a decisão de implementar microsserviços. O movimento deles levou algum tempo. Eles desmontaram todo o serviço e migraram o aplicativo monolítico para uma arquitetura orientada a micro serviços construída usando Python, Node.js e Apache Thrift.
CASO 3 Melhoria do tempo de atividade do Twitter
Era a mesma velha história: o Twitter utilizou pela primeira vez o design monolítico, o que fazia muito sentido. No entanto, quando mais indivíduos se registraram no Twitter, surgiram problemas. O SDLC ficou maior e mais pesado, com tempos de construção mais longos, e sua escalabilidade se deteriorou significativamente, com ocasionais avisos de erro de excesso de capacidade aparecendo.
O Twitter recorreu à mudança da arquitetura para microsserviços para resolver esse problema. Cada microsserviço foi criado para ser modular, bem definido e autônomo. Eles podem testar e implantar individualmente cada componente. Eles também podem ser medidos independentemente. Logo, os avisos de erro desapareceram completamente.
CASO 4 Código KarmaWifi e Espaguete
Há pessoas, gadgets e uma loja no Karma. Em um ponto, com um programa monolítico disponível, o código relacionado ao usuário acabou em partes relacionadas ao dispositivo. Além disso, as APIs da loja seguiram as APIs do dispositivo. Logo, tornou-se difícil determinar o que mudou e quem mudou. Embora o objetivo inicial fosse dividir o monólito em bibliotecas funcionais, descobriu-se que expandir e adaptar a versões de software mais recentes seria um desafio. Além disso, eles seriam incapazes de experimentar inovações futuras que serão introduzidas no mercado.
Naquela época, eles optaram por usar uma arquitetura baseada em microsserviços. Quando consideraram essencial, separaram partes do aplicativo de back-end em serviços individuais. As peças eram inicialmente enormes, mas com o tempo foram divididas em serviços menores. Eventualmente, cada microsserviço tinha uma única tarefa e um tamanho máximo para se preocupar.
CASO 5 Desempenho aprimorado do Walmart
A aventura de microsserviços do Walmart começou com a aquisição de uma plataforma DevOps de uma pequena empresa chamada OneOps. Eles optaram por torná-lo uma iniciativa de código aberto para que pudessem contribuir de volta para a comunidade.
Eles começaram a utilizar tecnologias como bancos de dados Node.js e Cassandra para criar vários microsserviços que poderiam ser acionados dinamicamente por meio de APIs. O objetivo era tornar mais simples para os desenvolvedores que trabalham nas várias divisões de negócios do Walmart a propriedade de seus aplicativos e capacitá-los a fazê-lo. Eles descobriram que isso diminuiu a dependência de um grupo de TI centralizado.
Em última análise, a capacidade dos desenvolvedores de estender os recursos de back-end das ofertas de comércio eletrônico da organização contribuiu para um aumento na agilidade dos negócios.
Como implementar a arquitetura de microsserviços no Android e iOS?
- Passo 1: Decida se é realmente o que sua empresa precisa.
- Etapa 2: Se sim, observe a infraestrutura que já existe.
- Etapa 3: prepare sua equipe para usar o método.
- Etapa 4: se você estiver mudando de um sistema monolítico para um sistema de microsserviços, verifique com seu administrador de dados se ele está bem informado e entende a tarefa.
- Etapa 5: escolha a linguagem e a estrutura para codificação.
- Etapa 6: configurar a arquitetura básica com serviços, contêineres e modelos de máquina virtual.
- Etapa 7: divida o banco de dados em muitos bancos de dados menores se sua arquitetura for um “monólito”.
- Etapa 8: Coloque os gateways de API no lugar.
- Passo 9: Acompanhe o rastreamento e faça um mapa dele.
- Etapa 10: teste usando automação.
Os microsserviços são o futuro?
O objetivo principal deste artigo é explicar os conceitos e princípios fundamentais dos microsserviços. Ao fazer o esforço para conseguir isso, é evidente que consideramos o estilo de arquitetura de microsserviços um conceito essencial – um que os aplicativos corporativos devem examinar cuidadosamente. Recentemente, desenvolvemos vários sistemas que empregam essa maneira e conhecemos outros que apreciam esse método. Amazon, Netflix, The Guardian, Serviço Digital do Governo do Reino Unido, realestate.com.au, Forward e comparethemarket.com estão entre aqueles que conhecemos que são pioneiros no estilo arquitetônico de alguma forma.
Muitas vezes, as ramificações reais das decisões arquitetônicas não são aparentes até vários anos depois. Uma boa equipe com um forte impulso para a modularidade construiu ocasionalmente um design monolítico que se deteriorou ao longo do tempo. Muitas pessoas argumentam que essa deterioração é menos possível com microsserviços, pois os limites de serviço são aparentes e difíceis de corrigir. No entanto, não podemos avaliar com precisão a maturidade das arquiteturas de microsserviços até que tenhamos um número suficiente de sistemas com idade suficiente.
Definitivamente, existem razões para antecipar que os microsserviços se desenvolverão lentamente. O sucesso de qualquer esforço de componentização depende de quão bem o software se encaixa nos componentes. É difícil determinar onde as bordas do componente devem ser colocadas. O design evolutivo reconhece a dificuldade de estabelecer limites corretos e, portanto, a importância de simplificar o retrabalho. No entanto, quando seus componentes são serviços com comunicações externas, a refatoração é muito mais difícil do que quando se trabalha com bibliotecas em processo.
Mover código através das fronteiras de serviço é complexo, quaisquer modificações de interface devem ser organizadas entre os participantes, camadas de compatibilidade adicionais devem ser estabelecidas e o teste é complicado. Se os componentes não forem compostos corretamente, você está apenas movendo a complexidade de dentro de um componente para os links entre os componentes. Isso não apenas desloca a complexidade, mas também a desloca para um local menos explícito e mais difícil de governar. Ao examinar o interior de um componente pequeno e simples, é fácil ignorar as ligações complicadas entre os serviços e concluir que as coisas estão melhores do que realmente são.
Por fim, há a competência da equipe a ser considerada. Equipes habilidosas são mais propensas a adotar novas práticas. Uma abordagem que é mais bem-sucedida para uma equipe altamente qualificada, no entanto, nem sempre pode funcionar para uma equipe menos qualificada. Vimos vários exemplos de equipes incompetentes construindo estruturas monolíticas desleixadas, mas levará tempo para determinar o que acontece quando esse tipo de caos ocorre com microsserviços. Uma equipe ruim sempre produzirá um sistema ruim; é difícil dizer se os microsserviços melhoram ou pioram a situação nesta circunstância.
Então escrevemos isso com otimismo cauteloso. Acreditamos que os microsserviços vieram para ficar!
Por que escolher a EmizenTech?
A Emizentech pode ajudá-lo a migrar sua aplicação de uma arquitetura monolítica para uma arquitetura de microsserviços. Podemos ajudá-lo a tornar seu aplicativo corporativo simples de manter e escalável. Se você quer crescer e desenvolver o seu negócio e está buscando novas formas de fazê-lo, a emizentech pode te ajudar da maneira certa e ao mesmo tempo garantir um crescimento a longo prazo. Você também pode visitar nosso site para saber mais sobre microsserviços, descobrir se sua empresa está pronta para eles e falar sobre como implementar essa arquitetura. É uma maneira de fazer software que se concentra em dividir um aplicativo em módulos que fazem apenas uma coisa e têm interfaces bem definidas.
As características distintivas dos nossos serviços são:
- Uma arquitetura orientada a domínio para evitar falhas de aplicativos
- Garanta um alto grau de escalabilidade
- Design de banco de dados descentralizado
- Habilite o isolamento de falhas simples e
- Habilite a entrega contínua usando a cultura DevOps.
Considerações finais
Dê o próximo passo!
Neste blog, nos esforçamos para investigar as diversas facetas da Arquitetura de Microsserviços e as possibilidades que ela apresenta. A funcionalidade de um sistema de aplicativo pode ser dividida em várias unidades funcionais menores ao usar uma abordagem de arquitetura conhecida como microsserviços. A implementação e gestão dos serviços são tratadas separadamente uma da outra. Quando os sistemas monolíticos são divididos em partes menores usando uma arquitetura de microsserviço, o número de componentes individuais aumenta drasticamente.
Portanto, é necessário ter um gerenciamento eficiente das dependências que existem entre eles. Quando comparada à arquitetura de software monolítica, é verdade que criar e executar uma Arquitetura de Microsserviços apresenta uma série de desafios e exige uma mudança de paradigma. Na mesma linha, a Arquitetura de Microsserviços não é de forma alguma uma bala mágica que pode resolver os problemas de complexidade que surgem em todo e qualquer tipo de sistema.
Quando tudo é levado em consideração, pensamos que a arquitetura de microsserviços é uma ferramenta extremamente útil e conveniente para o desenvolvimento de software contemporâneo. A Arquitetura de Microsserviços é a única estratégia viável para grandes empresas que normalmente geram softwares complicados, pois é o único método para lidar efetivamente com a complexidade e manter uma vantagem competitiva no mercado. A Arquitetura de Microsserviços deve ser utilizada para o desenvolvimento de software sustentável, que pode trazer benefícios de longo prazo, não apenas para grandes corporações, mas também para pequenas e médias empresas.
É importante notar que os primeiros adotantes da Arquitetura de Microsserviços, como Spotify, Netflix, LinkedIn, Amazon e Google, conseguiram obter grandes vantagens competitivas sobre seus rivais como resultado da adoção da Arquitetura de Microsserviços. O desenvolvimento e o exame de um modelo de arquitetura são opções viáveis para auxiliar nessa empreitada. Esse método promete simplificar as coisas e tornar a vida mais simples para os desenvolvedores sem prejudicar negativamente os resultados, o que é especialmente importante agora que as empresas estão entrando em um novo período de concorrência acirrada.
A grande maioria das empresas está interessada em melhorar sua eficiência de custo e, nesse contexto, espera-se que a arquitetura sem servidor adquira maior popularidade ao longo dos próximos anos. O alcance potencial dos microsserviços no futuro do mundo parece bastante promissor.
Os microsserviços podem ajudar sua empresa a avançar? Sinta-se à vontade para entrar em contato conosco para uma consulta desvinculada!
Obrigado por ler!
Perguntas frequentes sobre arquitetura de microsserviços
- Por que você optaria pela Arquitetura de Microsserviços?
O design de microsserviços tem várias vantagens sobre a arquitetura monolítica, incluindo robustez, produtividade, flexibilidade, escalabilidade, velocidade, dinamismo, manutenção mínima, etc.
- Quais são os 5 componentes da arquitetura de microsserviços?
Os cinco componentes básicos da arquitetura de microsserviços são microsserviços, contêineres, malha de serviço, descoberta de serviço e gateway de API.
- A API REST é um microsserviço?
Sim, a API REST é uma das APIs mais populares usadas para criar aplicativos de microsserviços.
- Qual é a diferença entre microsserviços e API?
A principal distinção entre APIs e microsserviços é que os últimos são usados para construir um único aplicativo, enquanto os primeiros são compostos por uma coleção de serviços independentes, porém interconectados. APIs são componentes de um aplicativo que são responsáveis por facilitar a comunicação com outros programas de software. Therefore, APIs may be utilized to facilitate the creation of microservices.
- Is Kubernetes a microservice?
Yes, Kubernetes is an open-source orchestrator for deploying containerized applications (microservices).
- What language is used in microservices?
C++ is a good language for microservices in domains that require the characteristics of C++, such as runtime speed and direct memory access, and C++, like other languages, has a variety of infrastructures available to help you get started with developing microservices. C++ is a good language for microservices in domains that require the attributes of C++, such as runtime speed and direct memory access.
- Por que você optaria pela Arquitetura de Microsserviços?
>> Maior agilidade e rápido time to market
>> Escalabilidade efetiva e atualização de aplicativos
>> Custos de desenvolvimento otimizados
>> Alta confiabilidade, estabilidade e facilidade de manutenção
>> Flexibilidade na escolha de tecnologias
>> Foco a laser em funções de negócios individuais
>> Autonomia da equipe
>> Implantação e teste automatizados
>> Melhor gerenciamento de recursos
>> Dívida técnica reduzida/evitada
Você também pode gostar de ler
- Desenvolvimento de aplicativos Full Stack: guia completo
- Comércio sem cabeça: a solução para o comércio tradicional
- Comércio Componível
- Desenvolvimento de back-end de aplicativos para dispositivos móveis
- Como escolher uma pilha de tecnologia para desenvolver um aplicativo