Entenda os Microsserviços: A Revolução no Desenvolvimento de Softwares
Vivemos em tempos onde a evolução das tecnologias e dos tipos de serviços com os quais estamos acostumados se transformam e mudam em uma velocidade impressionante. E isso tem sido um desafio tanto para profissionais em formação que buscam estar em dia com as tendências do mercado, quanto para as empresas que buscam ter sempre o que há de mais recente no que diz respeito à tecnologia e nas formas de realizar seu trabalho.
Um dos conceitos que estão em constante evolução no mercado e têm mudado o rumo da tecnologia, quando falamos no desenvolvimento de soluções de softwares são os microsserviços, termo que tem se tornado muito popular entre os profissionais de TI desde sua aparição em 2011.
Um passo atrás …
Antes de falarmos de como funciona as “aplicações modernas”, precisamos voltar um pouco no tempo para entender o que elas estão substituindo e demonstrar porque esse novo conceito de arquitetura tem revolucionado o mercado de software.
Tradicionalmente as aplicações corporativas eram compostos por um único e grande bloco de software, que representava todos os serviços a serem disponibilizados aos usuários, sendo altamente acoplados e complexos, o que chamamos de “aplicação monolítica”, hoje carinhosamente apelidado de “Legado”. Este tipo de arquitetura costuma possuir 3 componentes principais: a interface do usuário, um aplicativo do lado do servidor – que lida com todas as requisições – e um banco de dados.
Toda inteligência operacional fica centralizada na aplicação do lado servidor, que dentre outros, executa a lógica de negócio no software, recupera e atualiza as informações do banco de dados, tudo isso através da execução de um único processo, por isso caracterizado como MONOlítico. Toda e qualquer alteração necessária no sistema envolveria a criação de uma nova versão para a aplicação toda e um processo de deploy, geralmente realizado através de uma “janela de manutenção”, que poderia ser amedrontadora para os profissionais envolvidos e perdurar por uma longa madrugada ou um extenso final de semana.
Este tipo de arquitetura era o caminho natural para todas as organizações que de alguma forma desenvolvia soluções de software, pois permitia a utilização de recursos básicos da linguagem adotada para “dividir” a aplicação em classes, funções e namespaces, podendo ainda ser escalado de forma horizontal – com a execução de diversas instâncias em paralelo atrás de um balanceador de carga. Apesar de ainda funcionarem muito bem, as organizações e seus profissionais estão se sentindo cada vez mais frustrados com eles, especialmente quando pensam em uma migração para Cloud, um desenvolvimento ágil e DevOps. Uma vez que seus ciclos de alterações são vinculados ao conjunto todo da solução – uma pequena alteração feita no monolito necessita de uma reconstrução inteira para que o deploy possa ser realizado.
Então, o que de fato são esses microsserviços ?
Apesar do termo ter surgido em uma conferência realizada por arquitetos de software há 9 anos atrás (2011), a proposta em si não é nova, ainda em 1978 já estava enraizado este conceito com os princípios de design e desenvolvimento do UNIX, conforme publicação de McIlroy, Pinsen e Tague com um contexto de maior flexibilidade em escalas diversas.
A arquitetura de sistemas orientada por microsserviços tem chamado a atenção dos desenvolvedores e consecutivamente das organizações por trazer uma maior facilidade na administração dos sistemas de informação, se tornando um padrão de desenvolvimento mais flexível, com manutenção simplificada, escalável e descomplicada. Diferente da arquitetura “tradicional” que comentamos acima.
Uma das grandes vantagens dos microsserviços é justamente simplificar a implementação e a atualização dos sistemas – o que era (e ainda é) sempre tratado com um evento grandioso nas empresas, mobilizando diversas áreas da TI e que muitas vezes causava um grande caos e stress com os colaboradores envolvidos no processo (podendo render algumas pizzas para essas equipes hehe).
Como funcionam através de partes independentes, o sistema pode ser facilmente modificado, pois a alteração em um serviço não afetará outras partes e/ou funcionalidades do sistema, este comportamento também trás uma maior resiliência para a aplicação, afinal, caso aconteça algum tipo de problema ou incidente em um dos microsserviços, apenas aquele microsserviço é prejudicado podendo até ficar indisponível, no entanto o restante do sistema como um todo permanece em pleno funcionamento e acessível pelo usuário/cliente. Isso nos permite criar, testar e ajustar os serviços de maneira simultânea, eliminando os grandes ciclos de desenvolvimento monolíticos.
Apesar de não ser um conceito totalmente inovador, como já citamos anteriormente, por tratar cada microsserviço como um processo isolado, estes se tornaram mais viáveis e conhecidos devido aos avanços de algumas tecnologias, como as ferramentas para automação de infraestrutura e a conteinerização de aplicações com seus devidos orquestradores, que nos permitem executar e administrar uma infinidade de microsserviços de maneira organizada, centralizada e automatizada, onde podemos destacar também a popularização do Docker, que com certeza impulsionou o uso de containers, influenciando – mesmo que indiretamente – a adoção de uma arquitetura de microsserviços.
Quais são as vantagens de se trabalhar com microsserviços?
Ao adotar essa arquitetura, seja para um desenvolvimento totalmente novo ou para migrar o “legado monolítico”, é possível notar que as tarefas de rotina se tornarão muito mais simples, como por exemplo aquele “grande evento” que era conhecido como “Deploy”, além de trazer para maior eficiência para as equipes através de um desenvolvimento distribuídos, onde é possível tratar cada serviço com um produto e segmentar estes times para tomarem suas próprias (e melhores) decisões que cabem para aquele fragmento da aplicação, o que possibilita também desenvolver vários microsserviços ao mesmo tempo, com profissionais trabalhando de forma simultânea, reduzindo “custos” de desenvolvimento, que nem sempre são apenas financeiros, mas também temos o tempo como fator crucial para atender o “Time to Market”.
Agora que você já entendeu mais profundamente o que são os tão famosos “microsserviços”, acreditamos ser importante também destacar as principais vantagens de se trabalhar com eles:
- Mais agilidade
Diferente das aplicações tradicionais, trabalhar com microsserviços significa trabalhar com serviços independentes, onde cada um pode ter seu próprio ciclo de vida e consecutivamente de desenvolvimento, facilitando a manutenção, atualização e implantação, sendo totalmente compatível com a metodologia ágil e DevOps.
Escalabilidade e Resiliência
Como já citamos acima, o uso de tecnologias de containers, como o Docker e a clusterização de seus orquestradores: Kubernetes, Rancher e Openshift, além da dar flexibilidade e possibilita a criação de ambientes transitórios, trazendo a possibilidade de escalar os microsserviços dentro do cluster de forma horizontal sob demanda, onde este pode estar em um mesmo local ou trabalhando entre os principais provedores de nuvem. Tudo isso deixa sua infraestrutura e sua aplicação mais resiliente, uma vez que os serviços são independentes e se construídos corretamente não afetam uns aos outros, diferentemente da estrutura monolítica “tradicional”.
Equipes reduzidas
Como cada um dos serviços é tratado de maneira independente, cada um pode possuir uma equipe própria e dedicada, o que resulta naturalmente em equipes mais enxutas, o que facilita a comunicação e o entendimento de seus membros. Isso acaba sendo uma das principais vantagens de se trabalhar com microsserviços porque uma equipe em sintonia não apenas consegue realizar trabalhos com mais agilidade, como também consegue entregar mais qualidade. E no fim do dia, todos queremos a união dessas duas coisas, não é mesmo ?.
Diversidade de tecnologias
Como cada pequeno serviço é independente um do outro, se faz necessário a utilização intensiva das APIs para que todos possam estar em sintonia, onde se torna quase uma obrigação que essas sejam mais genéricas quanto possível, fazendo com que os arquitetos e desenvolvedores tenham a liberdade de escolher que tipo de tecnologia e linguagem utilizar para seu problema específico. Se tornando um conceito mais aberto e empoderando as equipes, onde podemos ressaltar o uso em massa de tecnologias open source.
Quais os desafios de se trabalhar com microsserviços ?
Apesar de muito benéfica uma arquitetura de microsserviços vai muito além de apenas realizar a integração de funções essenciais de um software que são executados isoladamente, pois assim como outros movimentos, como a corrida pela transformação digital e adoção do DevOps, possui um importante aspecto cultural e organizacional, onde se faz necessário passar um processo de restruturação das equipes de desenvolvimento, uma vez que cada equipe terá um ritmo próprio de implantação e será dedicada à um serviço exclusivo, possuindo um conjunto próprio de clientes e usuários. Estes são alguns pontos cruciais para se obter sucesso em uma arquitetura de microsserviços e nem sempre são ponderadas pelos times de desenvolvimento ou até mesmo pelos seus coordenadores e gestores.
Normalmente estes estarão muito mais preocupados em cobrir dívidas técnicas que certamente irão aparecer, referente a comunicação entre os serviços, preparar a aplicação para falhas (sim, elas continuarão à ocorrer), escalabilidade, integração de novas funcionalidades futuras, identificar os problemas em um cenário distribuído, etc.
Como você pôde perceber, trabalhar com microsserviços traz muitos desafios, como a própria gestão das equipes autossuficientes, a complexidade de lidar com uma diversidade maior de tecnologias (e muitas vezes essas podem ser novas para os times), além de manter o controle de tudo isso para que o projeto realmente aconteça. Mas é para que você possa superar esses desafios e fazer com que desfrute ao máximo de todas as vantagens que nós oferecemos nossos serviços, dos quais podemos destacar:
Controle de versão: ao trabalhar com equipes distribuídas, com ritmo e fluxos próprios é primordial que se obtenha um repositório de código único e centralizado, onde podemos destacar aqui o uso de ferramentas como Git, GitLab e Gogs.
Infraestrutura: como citamos, o uso de containers foi o que impulsionou a arquitetura de microsserviços e para garantir seus benefícios de escalabilidade e resiliência é necessário ter um infraestrutura adequada com recursos de orquestração que nos garantem isso, como Kubernetes, Rancher e Openshift (OKD), seja ela, on premise ou em cloud.
Implantação: sim, isso também é um grande desafio aqui, ao menos no início para provisionar e definir o processo, uma vez que se faz necessário investir pesado em processos automatizados e em ferramentas que possibilite isso, como Ansible e Terraform, pois os microsserviços podem trazer inúmeras complexidades que inviabiliza qualquer processo manual.
Pipeline CI/CD: Conhecendo todos os processos para uma implantação eficiente e com atividades já automatizadas, é possível pensar na criação de uma Pipeline totalmente automatizada, abrangendo etapas de compilação, integração de software, teste e enfim a entrega em produção. Nesta etapa o Jenkins costuma ser a principal opção.
Telemetria e Monitoramento: em um ambiente de microsserviços é essencial ter métricas e controle de tudo que esta acontecendo em sua infraestrutura e nos próprios serviços, através de uma visualização centralizada para identificar qualquer fonte de problema. Para isso é possível utilizarmos ferramentas como Zabbix, Prometheus e Grafana, além da Elastic Stack.
Centralização de logs: se tratando de um cenário distribuído com containers – que são efêmeros – é primordial (e praticamente obrigatório) que os logs do ambiente sejam externalizados e centralizados em uma única solução para diagnóstico rápido de incidentes e problemas. Caso contrário, é impossível gerenciar todos microsserviços, ainda mais quando escalarem. Apesar de desafiador, conseguimos atender essa necessidade através do GrayLog ou do próprio Elastic Stack.
Espero ter clareado um pouco o entendimento desse tipo de arquitetura que tem iniciado diversos movimentos dentro das companhias por uma insaciável corrida de “transformação digital” para “matar o legado”, indo em busca de uma estrutura mais moderna e flexível.
Até a próxima!
Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:
About author
Você pode gostar também
Prepare sua empresa para 2022 com a Consultoria e Cursos 4Linux
Sua empresa está preparada para 2022? Em um mercado cada vez mais competitivo, e principalmente após uma pandemia, a inovação e tecnologia são fundamentais para a sobrevivência e podem ser
Por que aprender Python pode impulsionar sua carreira em programação
Você que já automatiza suas rotinas com shell script precisa aprender Python. Dizem que se você quer trabalhar no Google o caminho mais fácil é aprender Python. Será que este
Graylog – Gerenciando todos os seus Logs
Este post tem como objetivo apresentar um guia para instalação e configuração do Graylog em Debian 8 (Jessie), suportado pelos bancos de dados noSQL MongoDB e ElasticSearch e com alta