Conceitos de Alta Disponibilidade
O que é Alta Disponibilidade?
A Alta Disponibilidade (HA) é a capacidade de um sistema permanecer operacional e acessível mesmo em caso de falha de um ou mais de seus componentes.
┌─────────────────────────────────────────────────────────────┐
│ ALTA DISPONIBILIDADE │
├─────────────────────────────────────────────────────────────┤
│ │
│ Objetivo: O serviço permanece acessível apesar das falhas │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Falha de servidor? → Outro servidor assume │ │
│ │ Falha de zona (AZ)? → Outra AZ assume │ │
│ │ Falha de região? → Outra região (DR) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Medida: Percentual de disponibilidade (uptime) │
│ │
│ 99% = 3,65 dias de downtime/ano (não aceitável) │
│ 99,9% = 8,76 horas de downtime/ano (padrão) │
│ 99,99% = 52,6 minutos de downtime/ano (alta dispo) │
│ 99,999% = 5,26 minutos de downtime/ano (muito alta) │
│ │
└─────────────────────────────────────────────────────────────┘
SPOF - Single Point of Failure
Um SPOF é um componente cuja falha causa a parada completa do sistema.
┌─────────────────────────────────────────────────────────────┐
│ IDENTIFICANDO OS SPOF │
├─────────────────────────────────────────────────────────────┤
│ │
│ ARQUITETURA COM SPOF │
│ ────────────────────── │
│ │
│ Usuários │
│ │ │
│ ▼ │
│ ┌─────────┐ │
│ │ Servidor│ ← SPOF! Se este servidor cair, tudo para │
│ │ Web │ │
│ └────┬────┘ │
│ │ │
│ ▼ │
│ ┌─────────┐ │
│ │ BDD │ ← SPOF! Apenas um banco de dados │
│ │ │ │
│ └─────────┘ │
│ │
│ SPOF identificados: │
│ ❌ 1 único servidor web │
│ ❌ 1 único banco de dados │
│ ❌ 1 única zona de disponibilidade │
│ │
└─────────────────────────────────────────────────────────────┘
Eliminando os SPOF
┌─────────────────────────────────────────────────────────────┐
│ ARQUITETURA SEM SPOF │
├─────────────────────────────────────────────────────────────┤
│ │
│ Usuários │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Load Balancer│ ← Gerenciado pela AWS (alta dispo nativa)│
│ └──────┬──────┘ │
│ │ │
│ ┌─────┼─────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──┐ ┌──┐ ┌──┐ │
│ │S1│ │S2│ │S3│ ← 3 servidores em 3 AZ diferentes │
│ └┬─┘ └┬─┘ └┬─┘ │
│ │ │ │ │
│ └─────┼─────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ RDS Multi-AZ│ ← Banco de dados com standby automático │
│ │ Primary │ │
│ │ ↓ │ │
│ │ Standby │ │
│ └─────────────┘ │
│ │
│ SPOF eliminados: │
│ ✅ Múltiplos servidores web │
│ ✅ Banco de dados Multi-AZ │
│ ✅ Distribuição em várias AZ │
│ │
└─────────────────────────────────────────────────────────────┘
Arquitetura Multi-AZ
Zonas de Disponibilidade AWS
┌─────────────────────────────────────────────────────────────┐
│ ZONAS DE DISPONIBILIDADE (AZ) │
├─────────────────────────────────────────────────────────────┤
│ │
│ Região AWS (ex: us-east-1) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ │ AZ-a │ │ AZ-b │ │ AZ-c │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ Datacenter│ │ Datacenter│ │ Datacenter│ │ │
│ │ │ isolado │ │ isolado │ │ isolado │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │
│ │ │ │ │ │ │
│ │ └──────────────┼──────────────┘ │ │
│ │ │ │ │
│ │ Rede de alta velocidade │ │
│ │ (baixa latência entre AZ) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Características: │
│ • Cada AZ = 1+ datacenters fisicamente separados │
│ • Energia, rede, refrigeração independentes │
│ • Distância suficiente para evitar desastre comum │
│ • Latência < 2ms entre AZ da mesma região │
│ │
└─────────────────────────────────────────────────────────────┘
Cálculo de Disponibilidade
┌─────────────────────────────────────────────────────────────┐
│ CÁLCULO DE DISPONIBILIDADE │
├─────────────────────────────────────────────────────────────┤
│ │
│ Fórmula: Dispo_total = 1 - (1 - Dispo_componente)^n │
│ │
│ Exemplo: Um servidor tem 99% de disponibilidade │
│ │
│ 1 servidor: │
│ Dispo = 99% = 0,99 │
│ Downtime = 3,65 dias/ano │
│ │
│ 2 servidores (em paralelo): │
│ Dispo = 1 - (1-0,99)² = 1 - 0,0001 = 99,99% │
│ Downtime = 52 minutos/ano │
│ │
│ 3 servidores (em paralelo): │
│ Dispo = 1 - (1-0,99)³ = 1 - 0,000001 = 99,9999% │
│ Downtime = 32 segundos/ano │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Número de servidores Disponibilidade Downtime │ │
│ │ ──────────────────── ────────────── ───────── │ │
│ │ 1 99% 3,65 dias │ │
│ │ 2 99,99% 52 minutos │ │
│ │ 3 99,9999% 32 segundos │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ⚠️ Atenção: Isso supõe falhas independentes! │
│ Se os servidores estão na mesma AZ, uma falha na AZ │
│ afeta todos → use Multi-AZ │
│ │
└─────────────────────────────────────────────────────────────┘
Padrões de Alta Disponibilidade
Padrão 1: Active-Passive
┌─────────────────────────────────────────────────────────────┐
│ ACTIVE-PASSIVE (Standby) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ ATIVO │ │ PASSIVO │ │ │
│ │ │ (Primário) │───────►│ (Standby) │ │ │
│ │ │ │ sync │ │ │ │
│ │ │ Processa │ │ Aguarda │ │ │
│ │ │ o tráfego │ │ sua vez │ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ │ │ │ │
│ │ │ Se falhar │ │
│ │ ▼ │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ (down) │ │ ATIVO │ │ │
│ │ │ │ │ (novo) │ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ Vantagens: Desvantagens: │
│ ✅ Simples ❌ Recursos subutilizados │
│ ✅ Dados sincronizados ❌ Failover não instantâneo │
│ ✅ Custo moderado │
│ │
│ Caso de uso: RDS Multi-AZ, bancos de dados │
│ │
└─────────────────────────────────────────────────────────────┘
Padrão 2: Active-Active
┌─────────────────────────────────────────────────────────────┐
│ ACTIVE-ACTIVE │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ Load Balancer │ │ │
│ │ └────────┬────────┘ │ │
│ │ │ │ │
│ │ ┌───────────┼───────────┐ │ │
│ │ │ │ │ │ │
│ │ ▼ ▼ ▼ │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ ATIVO │ │ ATIVO │ │ ATIVO │ │ │
│ │ │ (1) │ │ (2) │ │ (3) │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │Processa│ │Processa│ │Processa│ │ │
│ │ │tráfego │ │tráfego │ │tráfego │ │ │
│ │ └────────┘ └────────┘ └────────┘ │ │
│ │ AZ-a AZ-b AZ-c │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ Vantagens: Desvantagens: │
│ ✅ Todos recursos usados ❌ Mais complexo │
│ ✅ Melhor desempenho ❌ Sync de dados difícil │
│ ✅ Failover transparente │
│ │
│ Caso de uso: Servidores web stateless, APIs │
│ │
└─────────────────────────────────────────────────────────────┘
Serviços AWS Alta Disponibilidade
| Serviço | HA Nativa | Configuração Necessária |
|---|---|---|
| S3 | ✅ 99.999999999% | Nenhuma |
| DynamoDB | ✅ Multi-AZ auto | Nenhuma |
| ALB/NLB | ✅ Multi-AZ | Especificar 2+ subnets |
| RDS | ⚠️ Opcional | Ativar Multi-AZ |
| EC2 | ❌ Não | Projetar com ASG |
| Lambda | ✅ Multi-AZ auto | Nenhuma |
| Aurora | ✅ Multi-AZ | Ativar réplicas |
Exercício: Identificar os SPOF
Cenário
Analise esta arquitetura e identifique os SPOF:
┌─────────────────────────────────────────────────────────────┐
│ ARQUITETURA PARA ANÁLISE │
├─────────────────────────────────────────────────────────────┤
│ │
│ Internet │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ ALB │ │
│ └────┬─────┘ │
│ │ │
│ ┌──────────┴──────────┐ │
│ │ │ │
│ ▼ ▼ │
│ ┌────────┐ ┌────────┐ │
│ │ EC2 │ │ EC2 │ │
│ │ AZ-a │ │ AZ-a │ │
│ └────┬───┘ └────┬───┘ │
│ │ │ │
│ └──────────┬──────────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ RDS │ │
│ │ Single │ │
│ │ AZ │ │
│ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
💡 Solução
SPOF identificados:
-
❌ Todas as EC2 na mesma AZ (AZ-a)
- Se a AZ-a cair, todos os servidores ficam indisponíveis
- Solução: Distribuir entre AZ-a e AZ-b no mínimo
-
❌ RDS Single-AZ
- Se a AZ do banco cair, possível perda de dados
- Solução: Ativar RDS Multi-AZ
-
✅ ALB está OK (Multi-AZ por padrão se 2+ subnets)
Arquitetura corrigida:
- EC2 em AZ-a E AZ-b
- RDS com Multi-AZ ativado
- ALB com subnets em 2+ AZ
Resumo
| Conceito | Descrição |
|---|---|
| HA | Sistema permanece acessível apesar de falhas |
| SPOF | Componente único cuja falha para tudo |
| Multi-AZ | Distribuição em várias zonas |
| 99,9% | ~8h downtime/ano (padrão) |
| Active-Passive | Um ativo, outro em espera |
| Active-Active | Todos processam o tráfego |
Próxima seção: Load Balancers