Capítulo 36 — Arquitetura e engenharia de segurança: desempenho e escala
Mapa da aula
Aula 36 publicada. Mapa, exemplo, EX106.
flowchart TD
N0["36.1 O custo dos controles"]
N1["36.2 Dimensionar o token bucket"]
N2["Laboratório — Tratamento de rajadas com token bucket"]
N3["36.3 Projetar para escala"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX106"]
Desenho lógico
flowchart LR
N0["36.1 O custo dos controles"]
N1["36.2 Dimensionar o token bucket"]
N2["Laboratório — Tratamento de rajadas com token bucket"]
N3["36.3 Projetar para escala"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX106"]
[36.1 O custo dos controles]
|
v
[36.2 Dimensionar o token bucket]
|
v
[Laboratório — Tratamento de rajadas com token bucket]
|
v
[36.3 Projetar para escala]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX106]
Objetivos de aprendizagem
Você vai (1) analisar o custo de desempenho dos controles de segurança; (2) dimensionar o rate limiting com um token bucket; (3) projetar controles que escalem com a demanda.
36.1 O custo dos controles
Todo controle consome recursos. Os handshakes de TLS custam CPU; a verificação de assinaturas acrescenta latência a cada registro; o logging consome armazenamento e banda de rede; a inspeção profunda deixa o tráfego mais lento. Em pequena escala, esses custos são invisíveis, mas a bilhetagem baseada em conta vai processar milhões de validações por dia. Sofia mede o custo de cada controle num laboratório e estima os totais no pico. Ela descobre que a verificação de assinaturas é barata por registro, mas se acumula, enquanto um logging de debug verboso excederia os orçamentos de armazenamento em semanas. Medir os custos cedo evita pressões futuras para desligar controles quando o desempenho sofre.
36.2 Dimensionar o token bucket
O gateway de parceiros do capítulo 34 precisa limitar as taxas de requisição sem bloquear picos legítimos, como muitas compras de passagens antes de um show. Sofia modela um token bucket: os tokens são repostos a uma taxa constante, cada requisição consome um, e a capacidade do bucket permite rajadas curtas. O laboratório abaixo simula uma rajada sintética de requisições contra dois tamanhos de bucket com a mesma taxa de reposição. O bucket pequeno rejeita muitas requisições legítimas durante a rajada; o maior absorve quase toda ela e ainda limita o abuso prolongado. O dimensionamento vem do tráfego observado, e não de palpites.
Laboratório — Tratamento de rajadas com token bucket
# Token bucket vs synthetic burst: 20 req/s refill, burst of 300 requests over 5 s.
def run(capacity, refill=20.0, seconds=20):
tokens, rejected = capacity, 0
for t in range(seconds):
tokens = min(capacity, tokens + refill)
demand = 60 if 5 <= t < 10 else 10
ok = min(demand, int(tokens)); tokens -= ok; rejected += demand - ok
return rejected
for cap in (20, 200):
print(f"capacity {cap:3d}: rejected {run(cap)} of {5*60 + 15*10} requests")
Execute com python3 lab_bucket.py. Saída verificada:
capacity 20: rejected 200 of 450 requests
capacity 200: rejected 20 of 450 requests
36.3 Projetar para escala
Controles que funcionam para um servidor podem não escalar. Um serviço central de autorização chamado a cada validação vira um gargalo e um ponto único de falha. Sofia propõe guardar em cache as decisões de autorização com vida curta, distribuir a verificação aos nós de ingestão com chaves públicas compartilhadas e particionar os logs por tempo e região. Cada mudança mantém a propriedade de segurança e melhora a escala, e cada uma introduz uma nova consideração, como a rapidez com que as decisões em cache refletem as revogações. Ela documenta esses tradeoffs para que a equipe de operações entenda por que, por exemplo, um token de parceiro revogado pode funcionar por até um minuto.
Exemplo resolvido
Sofia mede os custos dos controles, dimensiona um token bucket para as rajadas de shows e redesenha a autorização e o logging para escalar, documentando os atrasos de revogação ligados ao cache.
Caso sintético. O tráfego, os custos e os parâmetros do bucket são sintéticos.
Erros e limites
As medições de laboratório podem não refletir o hardware de produção. Os caches criam janelas em que direitos revogados ainda funcionam.
Exercícios
-
EX106 — Custo oculto. Que controle excederia os orçamentos de armazenamento em semanas? Rubrica: 3 = logging de debug verboso;; 2 = logging;; 1 = TLS;; 0 = nenhuma.
-
EX107 — Comparação dos buckets. Como os dois tamanhos de bucket lidaram com a rajada sintética? Rubrica: 3 = capacidade 20 rejeitou 200 de 450; capacidade 200 rejeitou 20;; 2 = os dois;; 1 = iguais;; 0 = nenhuma.
-
EX108 — Tradeoff do cache. Que tradeoff o cache das decisões de autorização introduz? Rubrica: 3 = direitos revogados podem continuar funcionando até o cache expirar;; 2 = atraso na revogação;; 1 = vago;; 0 = nenhuma.
Síntese
Medidas de segurança escaláveis controlam custos, dimensionam limites a partir do tráfego real e documentam os trade-offs de distribuir os controles.
Continue estudando — aula 36 (capítulo 36 de 50)
← Capítulo 35 · Índice das aulas · Capítulo 37 →
Continue para a próxima aula já escrita.