Participei de um novo projeto que tinha um objetivo relativamente comum em empresas que cresceram rápido:
modernizar uma aplicação que já não acompanhava mais a necessidade operacional.
O cenário original era simples.
Toda a aplicação estava concentrada em um único servidor:
- front-end
- back-end
- banco de dados
- servidor de arquivos
- transferência de arquivos
Tudo coexistindo na mesma máquina.
Durante muito tempo isso funcionou.
O problema é que esse tipo de arquitetura normalmente cresce sem separação clara de responsabilidades.
Com o aumento da demanda, começam os problemas:
- dificuldade de escalabilidade
- dependência excessiva de uma única VM
- risco operacional elevado
- manutenção complexa
- baixa flexibilidade para evolução
- dificuldade de padronização entre ambientes
O pedido era claro:
criar uma nova arquitetura em Azure utilizando serviços homologados internamente e alinhados às boas práticas da empresa.
O cenário original #
Além do risco técnico, qualquer atualização da aplicação exigia maior cuidado operacional porque todos os componentes dependiam da mesma estrutura.
Uma única estrutura centralizava toda a operação.
Isso criava alguns problemas importantes:
- qualquer indisponibilidade afetava o ambiente inteiro
- atualização da aplicação exigia maior janela de manutenção
- crescimento horizontal praticamente inexistente
- componentes fortemente acoplados
- dificuldade de segregação entre desenvolvimento, homologação e produção
Além disso, existia um ponto importante:
a aplicação precisava continuar suportando arquivos estáticos, upload de conteúdo e persistência de dados sem alterar completamente o funcionamento esperado pelos usuários.
Ou seja:
não era apenas uma migração.
Era uma modernização controlada, sem interromper completamente a operação existente.
O objetivo da nova arquitetura #
A proposta da nova solução precisava atender alguns pilares:
- separação clara de responsabilidades
- ambientes independentes
- escalabilidade
- maior segurança
- serviços gerenciados
- redução de dependência operacional
- padronização de deployment
Além disso, a arquitetura precisava seguir padrões internos de rede, segurança e conectividade corporativa.
Arquitetura proposta #
A solução foi desenhada utilizando serviços nativos do Azure com foco em desacoplamento da aplicação.
Os ambientes passaram a ser separados em:
- desenvolvimento
- homologação
- produção
Cada ambiente possuindo sua própria segmentação lógica.
Ambiente de desenvolvimento #

Ambiente de homologação #

Ambiente de produção #

Componentes principais da solução #
Azure Kubernetes Service (AKS) #
O AKS foi utilizado como base principal para execução da aplicação.
O AKS também permitiu criar uma estrutura mais preparada para crescimento futuro da aplicação, mantendo padronização entre ambientes e melhor controle operacional.
A escolha aconteceu por alguns motivos importantes:
- padronização de deployment
- escalabilidade horizontal
- separação por namespaces
- melhor gerenciamento de workloads
- aderência às práticas modernas de aplicação
A aplicação foi segmentada dentro do cluster utilizando namespaces dedicados.
Isso permitiu isolar componentes e organizar melhor os deployments.
Blob Storage para conteúdo estático #
Parte do front-end e arquivos estáticos foram movidos para Azure Blob Storage.
Separar arquivos estáticos da aplicação principal reduziu acoplamento entre os componentes e simplificou futuras atualizações da plataforma.
Isso resolveu alguns problemas importantes:
- redução de dependência da aplicação principal
- distribuição simplificada de arquivos
- menor consumo do ambiente computacional
- armazenamento desacoplado
Além disso, o uso de Static Website Hosting facilitou a publicação dos arquivos HTML, CSS e mídia.
Azure Database for PostgreSQL #
O banco de dados deixou de existir dentro da mesma VM da aplicação.
A utilização do PostgreSQL gerenciado trouxe vantagens importantes:
- backups automatizados
- maior resiliência
- redução de administração operacional
- gerenciamento simplificado
- integração nativa com serviços Azure
Esse é um dos pontos que normalmente gera maior ganho operacional em modernizações.
Azure Key Vault #
Credenciais e segredos passaram a ser armazenados de forma centralizada.
Isso eliminou o uso de informações sensíveis diretamente na aplicação ou em arquivos locais.
Na prática:
- melhora segurança
- reduz exposição de credenciais
- facilita rotação de segredos
- melhora governança
File Share #
O ambiente também precisava manter compatibilidade com compartilhamento de arquivos.
Para isso foi utilizado Azure File Share.
Esse ponto foi importante porque permitiu modernizar a aplicação sem exigir mudança completa do comportamento operacional existente.
Segurança e conectividade #
A nova arquitetura também criou uma base mais preparada para integração futura com monitoramento centralizado, observabilidade e análise operacional da aplicação.
O ambiente de produção foi desenhado considerando:
- VPN corporativa
- acesso privado
- Azure Firewall
- segmentação de rede
- controle de tráfego interno
Além disso, os ambientes foram organizados em VNets e subnets específicas.
Isso permitiu maior controle de comunicação entre os componentes.
O ganho real da modernização #
O principal ganho não foi apenas tecnológico.
Foi operacional.
Antes da modernização:
- existia alta dependência de servidor único
- baixa flexibilidade de crescimento
- manutenção mais complexa
- maior risco operacional
Depois da modernização:
- workloads desacoplados
- serviços gerenciados
- melhor organização dos ambientes
- maior capacidade de escalabilidade
- segurança centralizada
- arquitetura preparada para evolução
O que foi anonimizado #
As imagens utilizadas neste artigo foram adaptadas para preservar informações internas.
Foram removidos ou alterados:
- nomes de aplicações
- nomenclaturas internas
- nomes de subscriptions
- padrões corporativos de identificação
- informações específicas de infraestrutura
O objetivo foi manter o contexto técnico da solução sem expor dados internos da empresa.
Conclusão #
Modernização de aplicação não significa apenas mover workloads para cloud.
Na prática, o desafio está em:
- separar responsabilidades
- reduzir acoplamento
- melhorar operação
- criar capacidade de evolução
- aumentar resiliência
Em muitos cenários, o maior problema não é a tecnologia.
É a arquitetura que cresceu sem planejamento ao longo do tempo.
Quando a modernização é feita da forma correta, o ambiente deixa de ser apenas funcional.
Ele passa a ser sustentável.
Em muitos cenários, modernizar uma aplicação não significa reconstruir tudo do zero.
O principal objetivo normalmente é reduzir dependências, separar responsabilidades e preparar o ambiente para evolução contínua.