Arquitetura de soluções: o que priorizar?

Samuel Matioli
4 min readDec 28, 2022

--

A definição da arquitetura de soluções passa necessariamente por decisões estratégicas que devem ser pensadas para não gerar débito técnico futuro e propiciar o crescimento da solução (e do negócio, consequentemente).

Por isso, com o objetivo de criar (ou reconstruir) soluções, é importante basear o processo de decisão em critérios claros vinculados à estratégia de negócio.

Objetivos de uma arquitetura para ecommerce

Por exemplo, tomemos a criação de um e-commerce, um segmento que tem características muito voltadas ao alto volume de consumidores, competitividade do mercado e agilidade de inovação.

Ainda é um segmento que demanda a integração de diversos sistemas, como estoques, recomendação, monitoramento de comportamento, programas de fidelidade, em tempo real, pois a experiência do cliente é uma vantagem competitiva importante e definitiva.

Por isso, num desenho de arquitetura, alguns critérios devem ser prioritários.

Solução sempre no ar

Alta disponibilidade e Confiabilidade

Ter o ambiente 100% do tempo no ar, sem downtime, especialmente nestas datas críticas, também se mostra como fator obrigatório no desenho da solução.

Se esta aplicação de e-commerce ficar fora do ar, por menor que seja o tempo, haverá perda de receita.

Para aumentar a resiliência do ambiente, o ideal é basear a solução em microsserviços executados em, ao menos, dois data centers ou duas zonas diferentes dentro de uma mesma região. Quanto aos dados, da mesma forma o ideal é utilizar armazenamento capaz de ser executado de maneira ativo-ativo em mais de uma zona. Se o objetivo for a altíssima disponibilidade, o ideal é distribuir em duas regiões ou dois provedores de nuvem. O banco de dados também deve operar neste cenário deployment híbrido (uma sugestão aqui).

Pronto para crescer

Escalabilidade

As campanhas de marketing, as datas especiais (como Natal e Black Friday) geram picos de acesso e consumo de recursos. Por isso, estes ambientes devem ser auto-escaláveis, com capacidade de reagir a demanda.

Imagine que sua empresa fará propaganda num episódio final de uma série, novela ou campeonato de futebol. Nesta ocasiões há um grande investimento em publicidade que precisa dar retorno, que se dá principalmente pela conversão de vendas. Então, todo este público alvo começa a acessar o site, que precisa responder ao aumento de consumo com os mesmo níveis de performance para converter todas as vendas.

Se algum dos componentes falha, ou não é escalável, este investimento em publicidade não gerará todo o retorno possível e você está deixando dinheiro na mesa.

Respostas rápidas ao usuário

Velocidade

Um relatório do Google mostra que sites mais rápidos aumentam a conversão de vendas. Por isso, a performance é condição fundamental, principalmente quando o volume de dados e transações são muito grandes.

A entrega das informações ao usuário deve ser muito rápida, então informações como a lista de produtos por categoria, seus preços, detalhes e variações de produtos e disponibilidade de estoque devem utilizar armazenamento com muita capacidade de dados e, ainda assim, muito veloz, com uma mistura de conteúdo pré gerado (server side generated) e dinâmico.

Processos e soluções coordenadas

Integração

Hoje é natural que as empresas utilizem soluções diversas para atender os requisitos de cada área da aplicação. Então é comum encontrarmos mais de uma linguagem ou bancos de dados e ainda soluções de terceiros, como ERPs ou Marketing Analytics.

A integração disso tudo passa por dois pontos: Streaming e protocolos comuns.

Protocolos comuns

É natural que diversos bancos de dados sejam utilizados, mas o mais importante é que a disponibilização e acesso aos dados sejam feitas por protocolos comuns e padrões conhecidos, que desacoplem os consumidores do banco de dados. Por exemplo, digamos que a base de produtos esteja no banco de dados X. O acesso a este dado não deve ser feito por uma query executada através de um driver e sim através de uma API REST, uma consulta GraphQL ou mesmo gRPC (um exemplo aqui).

Assim, pouco importa qual linguagem, localização, modo de conexão ou mesmo conhecimento do desenvolvedor sobre como interagir com cada banco de dados. Importa que exista permissão e que seja utilizado um protocolo comum, como os citados. Isto acelera a inovação, simplifica a arquitetura e distribui o dado a quem precisa, integrando os silos de dados.

Streaming

Arquiteturas orientadas a eventos viabilizam processos em tempo real, assim quando uma compra acontece, diversos processos devem ocorrer, que vão desde as notificações e comunicação com o cliente, pagamento, reserva de estoque, planejamento da logística de entrega. Uma boa parte destes processos será realizada em soluções de terceiros, então a mensageria vai realizar o papel de acionar serviços e receber novos eventos, redistribuindo-os até que tudo se complete.

Assim como os demais componentes da arquitetura, a solução de streaming deve ser escalável e multi-cloud, para que se aumente a confiabilidade. Este é um componente crítico, uma vez que será o responsável pelo registro e coordenação de processos (um exemplo aqui).

Tão importante quanto o que fazer é o que não fazer. Na próxima parte deste artigo, cito o que não deve ser prioridade no desenho de solução.

--

--