Introdução
Estamos vivendo em uma Era Digital onde muitas empresas (isso inclui, também, clientes onde atuei), estão buscando aplicar o estilo arquitetural de Microsserviços, visando alavancar a estratégia de negócio. Mas a Hype NÃO vai resolver os seus problemas, sem conhecer e entender como aplicar técnicas de engenharia de software e conceitos computacionais!
Foi observado através dos cursos que a emerging code tem ministrado e, também, através da realização de consultorias de arquitetura de software e soluções, que existe um cenário um tanto descompassado do ponto de vista da aplicação das técnicas de engenharia de software, com pouco conhecimento relacionados a quais Atributos de Qualidade devem ser (como engenheiros de software temos esse dever de conhecê-los) analisados e levados em consideração em projeto de software e quais premissas computacionais não podem ser ignoradas em nenhuma das fases do desenvolvimento de um projeto.
Abaixo é apresentado um diagrama da ISO/IEC 25010, onde são listados Atributos de Qualidade a serem levados em consideração, quando se está modelando um projeto de software:

Ainda relacionado aos atributos de qualidade citados acima, é importante levar em consideração o Teorema CAP, muito relevante do ponto de vista de entender os Trade-Offs que temos que lidar, devido as escolhas necessárias para resolver um problema do negócio da companhia.
Apesar de toda a carência encontrada relacionadas ao entendimento e conhecimento das técnicas de engenharia de software, observada nos projetos que tenho particpado; os cenários que os clientes que atendo atuam, me deu a oportunidade de entender as razões pelas quais as equipes de desenvolvimento dessas empresas, estão em busca do Santo Graal da Indústria de Software: Microsserviços!
Com o mercado de T.I aquecido e a concorrência, cada vez mais se aperfeiçoando e se fortalecendo com o advento de novos termos, para explicar velhos conceitos, com a diversidade de ferramentas e a necessidade de escalar o negócio de uma companhia, leva à uma tomada de decisão estratégica urgente, e o termo Microsserviços, traduz toda essa necessidade de alta escalabilidade, tanto em termos técnicos e tecnológicos, quanto de negócio. Implementar Microsserviços, hoje, é quase um Mantra dentro das empresas, e em quase todos os projetos de software que tenho tido contato, nos últimos 3 anos.
Implementar o conceito de serviços e microsserviços em um projeto, nos leva a uma série de benefícios (fáceis de serem vendidos e comprados), mas também temos um aumento das preocupações (Dificeis de serem faladas, mas necessárias para saber tomas a decisão certa para o projeto), uma delas recai sobre a Composição dos Serviços! E a partir deste ponto, uma outra chuva de questionamentos começam a aparecer dentro do time de engenheiros, os quais terão a responsabilidade de encontrar uma solução para resolver essa necessidade técnica e que afeta, diretamente, o negócio.
SOA Pattern: Composite UI Front-end
Desenvolver a capacidade de Composição de Serviços, nos exige o conhecimento de técnicas e padrões, os quais podemos encontrar nos Padrões SOA e, aplicar como solução de um sistema computacional, uma delas é a UI Composition ou Composite UI Front-end.
Problema
Vamos tentar imaginar uma situação onde é necessário desenvolver uma plataforma de comércio Online. Nessa plataforma, possibilitará aumentar a escalabilidade e a conversão de usuários. Para isso, será necessário desenvolver serviços, em formato de Api REST, com o objetivo que o time WEB e o time Mobile possam consumir essas mesmas APIs, conforme apresentado na imagem abaixo:

A imagem acima trata de um cenário bem comum em aplicações web e que estão buscando impelmentar serviços web. As aplicações Web e Mobile tem a capacidade de requisitar informações “diretamente” (Omiti o servidor de autenticação e autorização, por questões didáticas) as APIs. Outro ponto que pode ser observado, na arquitetura acima, é a responsabilidade que, as aplicações Web e Mobile, assumem do ponto de vista de composição de dados (Composite UI Front-end). Uma arquitetura interessante e bem comum de ser encontrada, não acha? Funciona bem na maioria dos casos. Mas infelizmente, no mundo real, essa arquitetura não oferece um desenho arquitetural que facilite a alta escalabilidade de uma plataforma web, tendo em consideração as perspectivas abaixo:
- Dificuldade em fornecer Roteamento;
- Composição realizada na UI;
- Autenticação/Autorização executada separadamente, em cada uma das APIs;
- Dificuldade em implementar Resiliência através da UI;
- Baixa Tolerância a falha;
- Rastreabilidade distribuída em cada um dos serviços;
- Responsabilidade do monitoramento é delegado aos serviços;
- Dificuldade de garantir o Rate Limit;
- Dificuldade de implementação de programação reativa.
Conclusão
Implementar uma arquitetura orientada a serviços, segue um caminho que vai além de criar uma API e publica-la em um servidor com capacidade de escala horizontal ou vertival. Inferir um Microsserviço, dentro de um serviço, é uma tarefa ainda mais desafiador, tendo em vista a necessidade de medir as métricas do monitoramento de um serviço e entender as necessidades estratégicas de uma parte específica do negócio de uma companhia.
Portanto, desenhar uma arquitetura de solução, seja para atender a uma migração de sistemas legados ou mesmo para trabalhar em um projeto Green Field (começando do zero e usando tecnologias atuais), nos exige um conhecimento muito especializado em engenharia de software e padrões de serviços e infraestrutura.
Em um próximo artigo, vou mostrar como podemos solucionar o problema exposto aqui.
O que achou? Deixe um comentário e compartilhe sua experiência em seus projetos!
Referências:
- http://iso25000.com/index.php/en/iso-25000-standards/iso-25010
- https://microservices.io/patterns/apigateway.html
- https://www.nginx.com/blog/building-microservices-using-an-api-gateway
- https://docs.microsoft.com/en-us/azure/architecture/microservices/gateway
Está interessado em desenvolver Arquitetura de Serviço em seus projetos ou melhorar o desenho de sua arquitetura?
A Emerging Code pode te ajudar. Entre em contato conosco, teremos prazer em realizar mentoria em seus projetos!
1 comentário