API Gateway Pattern, Backend for Front-end (BFF) – Parte 1

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:

Quality Characterisctics of ISO 25010

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:

Untitled Diagram

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:

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!

um comentário

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: