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:
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
- **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, documentos e imagens
- **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.
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.
Aqui vou explicar **como fizemos**, **por que isso melhora o desempenho**, e **como configurar** de maneira prática na AWS.
---
<h4>Por que usar Load Balancer + Redis na AWS</h4>
## 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**, documentos e imagensdocumentos, 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.
---
## <h4>Estrutura Montada (na AWS)</h4>
- **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)**.
---
## <h4>Passo a Passo de Configuração</h4>
### 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:
```bash
sudo apt update
sudo apt install php-redis
sudo systemctl restart apache2
```
Ajustar o PHP para usar o Redis
### 3. Ajustar o PHP para usar o Redis
No php.ini da sua instância EC2:
No `php.ini` da sua instância EC2:
```ini
session.save_handler = redis
session.save_path = "tcp://ENDPOINT_DO_REDIS:6379"
```
Depois reinicie o Apache:
4. Configurar o Load Balancer (ALB AWS)
```bash
sudo systemctl restart apache2
```

### 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
### 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).
---
## <h4>Ajustes no Adianti Framework</h4>
No arquivo `appapp/config/application.ini`ini do seu projeto:
```ini
[general]
session_name = MSGESTOR ; exemplo, defina um nome único para a sessão
```
No caso de uso do S3, ajuste também o local de salvamento/armazenamento de arquivos no código PHP conforme necessidade (ex.: 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.

## <h4>Segurança da Infraestrutura</h4>
Além da alta disponibilidade, a segurança também foi uma prioridade nesta configuração na AWS:
- **<h5>Acesso web:**</h5>
- Apenas via **HTTPS (porta 443)** com certificado SSL válido.
- A **porta 80 (HTTP)** está **bloqueada** para evitar acessos inseguros.
- **<h5>Acesso administrativo (manutenção de banco e servidor):**</h5>
- 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.
- **<h5>Instâncias EC2 sem IP público fixo:**</h5>
- As instâncias EC2 **não possuem IP público fixo**.
- O acesso externo é feito **exclusivamente** através do Load Balancer e VPN.
- **<h5>Escalabilidade dinâmica:**</h5>
- 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.
---
## <h4>Resultados Observados</h4>
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
---
## <h4>Conclusão</h4>
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.
---
<h4>Implementação real no sistema MS Gestor, utilizando: </h4>
- 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)
## Assinatura
Infraestrutura 100% em AWS, focada em alta disponibilidade, segurança, escalabilidade e performance.
> **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.
---

## Próximo Passo


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!.