Em 8 semanas, postei no linkedIn sobre as vantagens e desvantagens de montarmos sistemas em arquitetura distribuída em microsserviços. foi uma série de posts mais técnica, mas em uma linguagem bacana para todos poderem entender. Virou esse artigo, esta bem grandeeee… boa leitura!!!

Convido todos a entender o que é o microsserviço e ver que algumas coisas ja podem existir em algum sistema que você trabalhe ou utilize, se você não é da área de tecnologia, fique calmo, vou explicar tudo.

O termo “arquitetura de microsserviço” surgiu nos últimos anos para descrever uma maneira específica de projetar aplicativos de software como conjuntos de serviços implementáveis de forma independente. Embora não exista uma definição precisa, existem certas características comuns em torno dessa organização, relacionadas à capacidade de negócios, implantação automatizada, inteligência nos terminais e controles descentralizados de idiomas e dados.

Microsserviço é o desenho de software que permite que um sistema seja dividido em vários serviços menores, individuais e independentes. Cada serviço é flexível, compacto e tende a ser completo em sua função. Eles são executados como processos autônomos e se comunicam entre si por meio de APIs.

2 – Como funciona a arquitetura de microsserviços?

Não foi fornecido texto alternativo para esta imagem

Arquiteturas de microsserviços são tipicamente organizadas para que cada um tenha um trabalho muito específico, bem definido e sirva a um único propósito. Eles permitem deployment (subida em produção) independentes, ou seja, caso você precise subir uma nova versão de um serviço, isso não deveria afetar a disponibilidade dos outros serviços.

Cada microsserviço pode ser implementado em uma linguagem de programação e em uma plataforma diferentes. Quase qualquer infraestrutura pode ser executada em um contêiner que contenha serviços encapsulados. Como esses contêineres podem ser operados em paralelo, a infraestrutura existente é mais fácil de manter.

Os microsserviços são nada mais do que outra solução arquitetônica para projetar aplicações complexas. Eles tornaram-se cada vez mais populares nos últimos anos como uma evolução do SOA (Service Oriented Architecture). Embora já existam há algum tempo, estão ganhando popularidade em sistemas implantados continuamente. Muitos gigantes da web, incluindo Amazon, Netflix, Twitter, adotaram essa arquitetura. Seguindo seus passos, outras empresas estão indo na mesma direção: longe do monólito rígido para a arquitetura flexível baseada em microsserviço.

3 – Como funciona a arquitetura monolítica?

Não foi fornecido texto alternativo para esta imagem

Antes de seguirmos entendendo a arquitetura de micro serviço, temos que entender a arquitetura monolítica, do que ela defende e fala.

As principais linguagens de desenvolvimento de aplicações oferecem abstrações para quebrar a complexidade dos sistemas em módulos menores. Entretanto, são projetadas para a criação de um único executável monolítico, onde todo o processo, regra de negocio e modularização utilizada é executada em um mesmo contexto. Os módulos normalmente compartilham recursos de processamento, memória, bancos de dados e arquivos.

Ao longo do tempo o sistema vai crescendo e tornando-se cada vez mais complexo, consumindo cada vez mais recursos. Surgem também alguns desafios substanciais para sua manutenção:

3.1. Aumento de complexidade e tamanho ao longo do tempo: O sistema torna-se tão complexo que a manutenção fica cada vez mais cara e lenta, pois os desenvolvedores têm que navegar em uma infinidade de código. Quando existe a necessidade de mudar o desenvolvedor, perde-se dias em analise de código ate descobrir o correto lugar onde alterar!

3.2. Alta dependência de componentes de código: Muitas funções são interdependentes e entrelaçadas, de forma que a inclusão ou manutenção de componentes do sistema podem causar inconsistências ou comportamentos inesperados. Necessitando de um teste regressivo de toda a aplicação a cada pequena alteração, para garantir integridade do sistema.

3.3. Escalabilidade do sistema é limitada: Exige que todo o sistema seja replicado mesmo que apenas parte de suas funcionalidades sejam necessárias na nova instância, ocasionando custos de recursos de maquina, memoria, link e etc; maiores que o esperado.

3.5. Falta de flexibilidade: Restringe bastante a que os desenvolvedores fiquem amarrados à tecnologia originalmente escolhida para o sistema, mesmo que em algumas situações não seja a melhor escolha. Em alguns casos, limitando performance, ou a nives extremos limitando funcionalidade.

3.6. Dificuldade para colocar alterações em produção: Qualquer mudança, por menor que seja, requer a reinicialização do sistema, incorrendo em riscos operacionais e necessitando de acompanhamento da equipe de desenvolvimento, de testes e de manutenção do sistema como um todo.

Essa tipo de arquitetura deve ser utilizada quando o time não tem experiência com microsserviços; Se seu projeto for de curto prazo para entrega e você não tem tempo para gastar com automatização de deploy e orquestração dos serviços; você está criando um produto com nível alto de incerteza, tipo um MVP

4 – Por que os microsserviços são importantes para os negócios?

Não foi fornecido texto alternativo para esta imagem

Somente esse tópico daria um artigo inteiro, mas vou resumir nesse post, para não sermos maçantes.

Personalização. Bem configurados, todas as interações do usuário são facilmente mapeadas e guardadas em tempo real. É com base nessas interações que o sistema irá aplicar a lógica de negócios para personalizar a experiência.

Sempre atualizado. Por rodarem de forma independente, e conferem à aplicação a habilidade de estar frequentemente atualizada para acrescentar novas características ou ser modificada para ajustar a experiência com base nos dados de interação. O negócio não vai mais prever o futuro com 12-18 meses de antecedência. Em vez disso, ele deve ser capaz de se ajustar rapidamente às mudanças nas expectativas do cliente. Uma vez que o aplicativo foi construído (ou atualizado) e testado, é fundamental poder entregá-lo ao cliente de forma rápida e frequente.

Tecnologia e negócio caminhando juntos. Tanto os times de tecnologia quando os de negócios têm visibilidade. Essa é uma “experiência digital” em que os líderes do negócio devem trabalhar perto dos líderes de tecnologia para partir da “ideia” até a “execução”.

Para um produto ou serviço digital, os custos operacionais em curso são equivalentes aos custos de mercadorias vendidas. Ser capaz de otimizar esses custos é um elemento crítico para tornar o produto digital um sucesso. As empresas podem diferenciar seus serviços digitais na experiência do usuário, bem como controlar de perto o custo para operar esses serviços.

5 – Bons motivos para trabalhar com microsserviço

Não foi fornecido texto alternativo para esta imagem

Como vimos até aqui, A arquitetura de microserviços é baseada em uma abordagem modular. Na prática isto significa desenvolver um sistema em pequenas partes, os chamados microsserviços, que geralmente são colocados dentro de containers. Cada container é um ambiente isolado e independente, contendo códigos, binários, bibliotecas e o que mais for necessário. Isto permite, por exemplo, que o desenvolvedor trabalhe de maneira mais fácil com diferentes tipos de linguagens de programação dentro de um mesmo sistema.

As Vantagens de trabalhar nesse modelo, são varias, mas condensando algumas até que já falamos:

5.1 – Aumento da resiliência Com microsserviços, toda a sua aplicação é descentralizada e desacoplada em serviços que atuam como entidades separadas. Ao contrário da arquitetura monolítica, em que uma falha no código afeta mais de um serviço ou função, há um impacto mínimo em caso de falhas. Mesmo quando vários sistemas são reduzidos para manutenção, seus usuários não perceberão isso.

5.2 – Escalabilidade aprimorada e Alta disponibilidade A escalabilidade é o aspecto-chave dos microsserviços. Como cada serviço é um componente separado, você pode expandir uma única função ou serviço sem ter que dimensionar todo o aplicativo. Os serviços críticos para o negócio podem ser implantados em vários servidores para aumentar a disponibilidade e o desempenho de um serviço sem impactar o desempenho de outros serviços.

5.3 – Capacidade de usar a ferramenta certa para a tarefa certa Com microsserviços, você não precisa se amarrar a um único fornecedor. Em vez disso, você tem a flexibilidade de usar a ferramenta certa para a tarefa certa. Cada serviço pode usar seu próprio idioma, estrutura ou serviços auxiliares e ainda se comunicar facilmente com os outros serviços em sua aplicação.

5.4 – Time to market mais rápido Como microsserviços funcionam com serviços acoplados, você não precisa reescrever sua base de código inteira para adicionar ou modificar um recurso. Você faz alterações apenas em um serviço específico. Ao desenvolver aplicativos em incrementos menores que são independentemente testáveis e implantáveis, você pode disponibilizar sua aplicação e serviços mais rapidamente.

5.5 – Depuração e manutenção mais fáceis A arquitetura de microsserviços também facilita a depuração e teste de aplicativos. Com módulos menores passando por um processo contínuo de teste e entrega, sua capacidade de fornecer aplicativos sem erros é muito melhorada.

5.6 – ROI melhorado com TCO reduzido O uso de microsserviços também permite otimizar recursos. Várias equipes podem trabalhar em serviços independentes, permitindo que você implante mais rapidamente – e mude mais facilmente quando você precisa. O tempo de desenvolvimento é reduzido e o código de suas equipes será mais reutilizável. Ao desacoplar os serviços, você não terá que operar em máquinas caras. Máquinas básicas x86 irão fazê-lo. A maior eficiência dos microsserviços não só reduz os custos de infraestrutura, mas também minimiza o tempo de inatividade.

5.7 – Entrega contínua Ao contrário das aplicações monolíticas, em que equipes dedicadas trabalham em funções discretas, como UX, banco de dados, lógica do lado do servidor e camadas tecnológicas, a arquitetura de microsserviços faz uso de equipes multifuncionais para lidar com todo o ciclo de vida de uma aplicação em um modelo de entrega contínua. Quando os desenvolvedores, as operações e as equipes de teste trabalham simultaneamente em um único serviço, teste e depuração tornam-se fáceis e instantâneos. Com esta abordagem de desenvolvimento incremental, o código é continuamente desenvolvido, testado e implantado, e você pode usar bibliotecas existentes em vez de reinventar a roda.

6 – “Desvantagens” do microsserviço!

Não foi fornecido texto alternativo para esta imagem

Como toda tecnologia, no entanto, os microsserviços também trazem uma série de desafios. Sua utilização requer um alto nível de automação e uma coordenação maior entre as equipes de desenvolvimento, segurança e infraestrutura (DevSecOps).

Apesar de ser mais segura do que estruturas monolíticas tradicionais, a arquitetura em microsserviços apresenta algumas exigências, antes da implementação deste tipo de abordagem, é necessário compreender alguns pontos e conhecer as melhores estratégias/ferramentas para garantir que a proteção dos microsserviços seja configurada de maneira apropriada.

Aqui estão algumas advertências organizacionais.

6.1 – Você precisará estar equipado para provisionamento rápido e implantação de aplicativos. O pessoal deve poder providenciar recursos instantaneamente para acompanhar o ritmo necessário para aproveitar ao máximo os microsserviços. Se demorar dias ou meses para conseguir providenciar um servidor, você terá sérios problemas. Da mesma forma, você deve rapidamente implantar novos serviços ou aplicativos.

6.2 – Um monitoramento robusto é obrigatório. Como cada serviço depende do seu próprio idioma, plataforma e API, e você estará orquestrando várias equipes trabalhando simultaneamente em diferentes entidades do seu projeto de microsserviços, você precisa de um monitoramento robusto para gerenciar efetivamente toda a infraestrutura, porque se você não fizer isso, pode ficar impossível rastrear problemas, como saber quando um serviço falhar ou uma máquina cair. Monitoramento deve saber como e onde atuar precisamente, pois se não nada vale o microsserviço, nem o monitoramento.

6.3 – Você deve abraçar a cultura DevOps. Para trabalhar em equipes multifuncionais, sua empresa deve incorporar práticas e cultura DevOps. Em uma configuração tradicional, os desenvolvedores estão focados em recursos e funcionalidades, e a equipe de operações está no alcance de desafios de produção. Em DevOps, todos são responsáveis pelo provisionamento de serviços – e as falhas.

6.4 – Os testes podem ser bastante complexos. Com microsserviços, o teste não é direto. Cada serviço possui suas próprias dependências, algumas diretas, outras transitivas. À medida que os recursos são adicionados, novas dependências aparecerão. Manter controle de tudo isso rapidamente torna-se impraticável. Além disso, à medida que seu número de serviços aumenta, a complexidade aumenta também. Quer se trate de erros de banco de dados, latência de rede, problemas de cache ou indisponibilidade de serviço, sua arquitetura de microsserviços pode ser capaz de lidar com um nível razoável de falhas. Assim, o teste de resiliência e a injeção de falhas são indispensáveis.

6.5 – Você precisa projetar com falhas em mente. Projetar o fracasso é essencial. Você deve estar preparado para lidar com vários tipos de falha, como tempo de inatividade do sistema, serviço lento e respostas inesperadas. Aqui, o balanceamento de carga é importante, mas ter um plano B é outra opção importante. Quando ocorre uma falha, o serviço com problemas ainda deve ser executado em uma funcionalidade degradada sem afetar demais todo o sistema. Por isso o time de arquitetura deve projetar o serviço e o ambiente para um eventual acionamento do plano B.

7- Microsserviço é cultura Devops na veia

Não foi fornecido texto alternativo para esta imagem

Sobre DEVOPS publicarei ainda esse ano, um artigo só sobre esse assunto, mas enquanto isso vamos entender minimamente o tema.

Em um mercado de TI cada vez mais atuante junto ao negócio, a realidade da TI Bimodal se faz cada vez mais presente, aliando padrões tradicionais a novos paradigmas. Gestores de TI interessados em otimizar a governança e em ampliar os resultados da área precisam estar atentos a essas inovações, e é relevante conhecer melhor o que é DevOps.

Segundo Rahim Bhatia, líder de negócios para soluções de API Management da CA Technologies, microsserviços e APIs, por sua vez, estão relacionados a metodologia DevOps, uma prática de engenharia de software que possui o intuito de unificar o desenvolvimento de software e a operação de software. “É uma forma de investir no desenvolvimento de software de maneira holística”

Implantação Contínua e Entrega Contínua (IC / EC) são muito importantes para que os microsserviços possam ter sucesso. Essas práticas são necessárias para que os erros possam ser identificados, cedo por meio de testes automatizados e pipelines de implantação.

8 – Conclusão

Não foi fornecido texto alternativo para esta imagem

Para obter sucesso na estratégia de microsserviços, veja algumas recomendações importantes:

  1. Tenha um objetivo de mente. Pergunte-se: o que quero atingir? Onde quero chegar?
  2. Comece pequeno. “Empresas que dão o primeiro passo em transformação digital começam a ver benefícios que não imaginavam. O mais difícil é dar o primeiro passo, mas é isso que mostrará as vantagens”, alerta ele.
  3. Alinhe a organização, a cultura e a arquitetura.

Se a sua organização pretende migrar para a arquitetura de microsserviços, tenha em mente que será necessário implementar mudanças não somente nas aplicações, mas também no modo como as pessoas trabalham. As mudanças organizacionais e culturais podem ser, em parte, consideradas como desafio, porque cada equipe terá um ritmo próprio de implantação e será responsável por um serviço exclusivo, com um conjunto próprio de clientes. Talvez essas não sejam preocupações típicas para os desenvolvedores, mas elas serão essenciais para o sucesso da arquitetura de microsserviços.

Portanto, para obter sucesso na adoção da arquitetura, esses fatores devem ser bem planejados, e sua adequada execução deve passar a fazer parte da agenda da área de tecnologia da organização.

_____________________________________________________________

Texto redigido por mim: Eduardo Silveira

Imagens: https://is.gd/wLCp3r | https://is.gd/wLCp3r |