MR
Configurar Load Balancer + Redis na AWS com o Adianti Framework
Se você utiliza o Adianti Framework e deseja escalar o seu sistema para suportar mais usuários ou melhorar o desempenho, uma excelente solução é configurar múltiplas instâncias (servidores) rodando na AWS, usando:
- Load Balancer (ALB da AWS) para distribuir os acessos
- Redis (ElastiCache AWS) para gerenciar as sessões de usuários de forma compartilhada
- S3 para armazenar arquivos temporários e documentos
- RDS Aurora MySQL para o banco de dados
Recentemente implementei essa arquitetura para meu sistema rodando na AWS, e notei uma melhora clara no desempenho. Principalmente no tempo de resposta e na estabilidade durante acessos simultâneos.
Aqui vou explicar como fizemos, por que isso melhora o desempenho, e como configurar de maneira prática na AWS.
- Load Balancer (ALB) da AWS distribui automaticamente as requisições entre duas ou mais instâncias EC2 (servidores).
- Redis (ElastiCache AWS) armazena as sessões dos usuários de forma centralizada e compartilhada.
- S3 AWS permite armazenar arquivos temporários e documentos, sem depender do disco das instâncias.
- RDS Aurora MySQL provê alta disponibilidade e escalabilidade para o banco de dados.
Além disso:
- Usamos instâncias EC2 ARM (AWS t4g ou m7g), que além de terem ótimo desempenho, ainda são mais econômicas que instâncias x86 tradicionais.
- 2 Instâncias EC2 AWS (Ubuntu 22.04, PHP 8.2, Apache)
- Redis ElastiCache AWS (modo Tradicional, não Serverless)
- Application Load Balancer AWS (ALB)
- Bucket S3 AWS para armazenamento de arquivos temporários
- RDS Aurora MySQL AWS para banco de dados
- Sistema rodando o Adianti Framework 7.5.1 (ou superior)
Toda a infraestrutura foi provisionada e configurada dentro da Amazon Web Services (AWS).
1. Criar o Redis (ElastiCache AWS)
- No console da AWS, vá em ElastiCache > Redis e crie um cluster.
- Importante: escolha o modo Tradicional (não Serverless).
- Configure o Security Group liberando a porta 6379 para as suas instâncias EC2.
2. Preparar as instâncias EC2 AWS
Em cada instância EC2 (Ubuntu 22.04), instale o Redis PHP extension:
Ajustar o PHP para usar o Redis
No php.ini da sua instância EC2:
session.save_handler = redis
session.save_path = "tcp://ENDPOINT_DO_REDIS:6379"
4. Configurar o Load Balancer (ALB AWS)
- No console da AWS, vá em EC2 > Load Balancers > Criar Load Balancer.
- Escolha o tipo Application Load Balancer (ALB).
- Configure listeners para HTTP ou HTTPS.
- No Target Group, associe suas instâncias EC2.
5. Configurar o Bucket S3 para arquivos temporários
- No console da AWS, crie um Bucket S3 para armazenar arquivos gerados temporariamente pelo sistema (PDFs, documentos, imagens).
- Garanta que as permissões estejam configuradas corretamente.
- Integre o sistema Adianti para salvar e ler diretamente do S3 ao invés de gravar em disco local.
6. Banco de Dados RDS Aurora MySQL
- No console da AWS, vá em RDS > Criar Banco de Dados e selecione o Aurora MySQL.
- Configure instâncias com Multi-AZ para alta disponibilidade.
- Defina segurança de acesso permitindo apenas conexões internas (via VPC e VPN).
No arquivo app/config/application.ini do seu projeto:
[general]
session_name = MSGESTOR
No caso de uso do S3, ajuste também o local de salvamento/armazenamento de arquivos no código PHP conforme necessidade (usando SDK AWS S3).
Nenhuma outra modificação grande é necessária no Adianti, pois ele já trabalha normalmente com sessões PHP e banco de dados MySQL compatível.
Além da alta disponibilidade, a segurança também foi uma prioridade nesta configuração na AWS:
- Apenas via HTTPS (porta 443) com certificado SSL válido.
- A porta 80 (HTTP) está bloqueada para evitar acessos inseguros.
- Nenhuma conexão direta exposta ao público.
- SSH (acesso ao terminal) e acesso ao banco de dados só podem ser feitos através de uma VPN privada (OpenVPN) configurada na AWS.
- As instâncias EC2 não possuem IP público fixo.
- O acesso externo é feito exclusivamente através do Load Balancer e VPN.
- Com essa arquitetura, é possível ligar e desligar instâncias de acordo com o horário de trabalho.
- Exemplo: duas instâncias durante o expediente e apenas uma no período da noite.
- Reduzindo custos conforme a demanda do sistema.
Com a infraestrutura completa na AWS, obtivemos:
- Melhor tempo de resposta nas telas
- Mais estabilidade e menos travamentos em horários de pico
- Capacidade para muito mais conexões simultâneas
- Facilidade para escalar adicionando ou removendo instâncias EC2
- Economia de custos com instâncias ARM e escalabilidade inteligente
- Segurança reforçada com acesso apenas VPN + HTTPS
- Arquivos protegidos e armazenados no S3
- Banco de dados confiável no RDS Aurora MySQL
Se você deseja escalar seu sistema Adianti Framework com estabilidade, segurança, performance e ótimo custo-benefício, montar essa estrutura na AWS usando Load Balancer + Redis + RDS + S3 é uma solução extremamente eficaz.
Mesmo para sistemas de pequeno ou médio porte, essa arquitetura já se paga em segurança, velocidade e preparo para o crescimento.
- Adianti Framework 7.5.1
- PHP 8.2
- Redis (ElastiCache AWS)
- Load Balancer (ALB AWS)
- RDS Aurora MySQL AWS
- Armazenamento de arquivos no S3 AWS
- Instâncias EC2 ARM (m7g.medium AWS)
Infraestrutura 100% em AWS, focada em alta disponibilidade, segurança, escalabilidade e performance.
- Nosso próximo objetivo é realizar testes de compatibilidade e desempenho com o Adianti Framework 8.1, para aproveitar as novas melhorias e recursos da nova versão.
- Load Balancer (ALB da AWS) para distribuir os acessos
- Redis (ElastiCache AWS) para gerenciar as sessões de usuários de forma compartilhada
- S3 para armazenar arquivos temporários e documentos
- RDS Aurora MySQL para o banco de dados
Recentemente implementei essa arquitetura para meu sistema rodando na AWS, e notei uma melhora clara no desempenho. Principalmente no tempo de resposta e na estabilidade durante acessos simultâneos.
Aqui vou explicar como fizemos, por que isso melhora o desempenho, e como configurar de maneira prática na AWS.
Por que usar Load Balancer + Redis na AWS
- Load Balancer (ALB) da AWS distribui automaticamente as requisições entre duas ou mais instâncias EC2 (servidores).
- Redis (ElastiCache AWS) armazena as sessões dos usuários de forma centralizada e compartilhada.
- S3 AWS permite armazenar arquivos temporários e documentos, sem depender do disco das instâncias.
- RDS Aurora MySQL provê alta disponibilidade e escalabilidade para o banco de dados.
Além disso:
- Usamos instâncias EC2 ARM (AWS t4g ou m7g), que além de terem ótimo desempenho, ainda são mais econômicas que instâncias x86 tradicionais.
Estrutura Montada (na AWS)
- 2 Instâncias EC2 AWS (Ubuntu 22.04, PHP 8.2, Apache)
- Redis ElastiCache AWS (modo Tradicional, não Serverless)
- Application Load Balancer AWS (ALB)
- Bucket S3 AWS para armazenamento de arquivos temporários
- RDS Aurora MySQL AWS para banco de dados
- Sistema rodando o Adianti Framework 7.5.1 (ou superior)
Toda a infraestrutura foi provisionada e configurada dentro da Amazon Web Services (AWS).
Passo a Passo de Configuração
1. Criar o Redis (ElastiCache AWS)
- No console da AWS, vá em ElastiCache > Redis e crie um cluster.
- Importante: escolha o modo Tradicional (não Serverless).
- Configure o Security Group liberando a porta 6379 para as suas instâncias EC2.
2. Preparar as instâncias EC2 AWS
Em cada instância EC2 (Ubuntu 22.04), instale o Redis PHP extension:
Ajustar o PHP para usar o Redis
No php.ini da sua instância EC2:
session.save_handler = redis
session.save_path = "tcp://ENDPOINT_DO_REDIS:6379"
4. Configurar o Load Balancer (ALB AWS)
- No console da AWS, vá em EC2 > Load Balancers > Criar Load Balancer.
- Escolha o tipo Application Load Balancer (ALB).
- Configure listeners para HTTP ou HTTPS.
- No Target Group, associe suas instâncias EC2.
5. Configurar o Bucket S3 para arquivos temporários
- No console da AWS, crie um Bucket S3 para armazenar arquivos gerados temporariamente pelo sistema (PDFs, documentos, imagens).
- Garanta que as permissões estejam configuradas corretamente.
- Integre o sistema Adianti para salvar e ler diretamente do S3 ao invés de gravar em disco local.
6. Banco de Dados RDS Aurora MySQL
- No console da AWS, vá em RDS > Criar Banco de Dados e selecione o Aurora MySQL.
- Configure instâncias com Multi-AZ para alta disponibilidade.
- Defina segurança de acesso permitindo apenas conexões internas (via VPC e VPN).
Ajustes no Adianti Framework
No arquivo app/config/application.ini do seu projeto:
[general]
session_name = MSGESTOR
No caso de uso do S3, ajuste também o local de salvamento/armazenamento de arquivos no código PHP conforme necessidade (usando SDK AWS S3).
Nenhuma outra modificação grande é necessária no Adianti, pois ele já trabalha normalmente com sessões PHP e banco de dados MySQL compatível.
Segurança da Infraestrutura
Além da alta disponibilidade, a segurança também foi uma prioridade nesta configuração na AWS:
Acesso web:
- Apenas via HTTPS (porta 443) com certificado SSL válido.
- A porta 80 (HTTP) está bloqueada para evitar acessos inseguros.
Acesso administrativo (manutenção de banco e servidor):
- Nenhuma conexão direta exposta ao público.
- SSH (acesso ao terminal) e acesso ao banco de dados só podem ser feitos através de uma VPN privada (OpenVPN) configurada na AWS.
Instâncias EC2 sem IP público fixo:
- As instâncias EC2 não possuem IP público fixo.
- O acesso externo é feito exclusivamente através do Load Balancer e VPN.
Escalabilidade dinâmica:
- Com essa arquitetura, é possível ligar e desligar instâncias de acordo com o horário de trabalho.
- Exemplo: duas instâncias durante o expediente e apenas uma no período da noite.
- Reduzindo custos conforme a demanda do sistema.
Resultados Observados
Com a infraestrutura completa na AWS, obtivemos:
- Melhor tempo de resposta nas telas
- Mais estabilidade e menos travamentos em horários de pico
- Capacidade para muito mais conexões simultâneas
- Facilidade para escalar adicionando ou removendo instâncias EC2
- Economia de custos com instâncias ARM e escalabilidade inteligente
- Segurança reforçada com acesso apenas VPN + HTTPS
- Arquivos protegidos e armazenados no S3
- Banco de dados confiável no RDS Aurora MySQL
Conclusão
Se você deseja escalar seu sistema Adianti Framework com estabilidade, segurança, performance e ótimo custo-benefício, montar essa estrutura na AWS usando Load Balancer + Redis + RDS + S3 é uma solução extremamente eficaz.
Mesmo para sistemas de pequeno ou médio porte, essa arquitetura já se paga em segurança, velocidade e preparo para o crescimento.
Implementação real no sistema MS Gestor, utilizando:
- Adianti Framework 7.5.1
- PHP 8.2
- Redis (ElastiCache AWS)
- Load Balancer (ALB AWS)
- RDS Aurora MySQL AWS
- Armazenamento de arquivos no S3 AWS
- Instâncias EC2 ARM (m7g.medium AWS)
Infraestrutura 100% em AWS, focada em alta disponibilidade, segurança, escalabilidade e performance.
- Nosso próximo objetivo é realizar testes de compatibilidade e desempenho com o Adianti Framework 8.1, para aproveitar as novas melhorias e recursos da nova versão.
Editado 02/05/2025 (há 6 dias) - Clique para ver alterações