Tópico 10 de 12
Otimização e Performance
As técnicas que mais aparecem na prática para deixar um sistema rápido: cache, processamento assíncrono, concorrência, SQL eficiente e CDN.
O que estudar
- Cache-Aside Pattern
- Jobs assíncronos
- Concorrência e paralelismo
- Otimização e performance de SQLProblema N+1 · Índices
- CDN
Exemplos visuais
GET /api/v1/products/best-sellers
Sem cache
Toda requisição vai ao banco — a mesma consulta pesada roda milhares de vezes.
Cache-Aside
A API consulta o cache primeiro. Só em caso de miss busca no banco e grava o resultado no cache.
Sem processamento assíncrono
O cliente espera tudo terminar — enviar e-mail, gerar PDF, chamar serviços externos — antes de receber a resposta.
Com processamento assíncrono
A API só publica uma mensagem na fila e responde na hora. Workers processam o trabalho pesado em segundo plano.
Uma consulta para buscar a lista e, depois, uma consulta extra para cada item. Com 500 usuários, são 501 idas ao banco.
❌ N+1 — uma consulta por usuário
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute("SELECT id, name FROM users")
users = cursor.fetchall()
for user_id, name in users:
cursor.execute(
"SELECT title FROM articles WHERE user_id = ?",
(user_id,),
)
articles = cursor.fetchall()
# 1 + N consultas...✅ Uma única consulta com JOIN
cursor.execute("""
SELECT u.id, u.name, a.title
FROM users u
LEFT JOIN articles a ON a.user_id = u.id
""")
rows = cursor.fetchall()
# SQL executado pelo código N+1:
# SELECT id, name, email FROM users;
# SELECT title FROM articles WHERE user_id = 1;
# SELECT title FROM articles WHERE user_id = 2;
# ...
# SELECT title FROM articles WHERE user_id = 500;
Artigos7
- Cache-Aside patternAzure Architecture CenterEN
- An Introduction to Asynchronous Processing and Message QueuesMediumEN
- RabbitMQ DocumentationRabbitMQEN
- Concurrency vs parallelism: the main differencesOxylabsEN
- O que é o problema de N + 1?MediumPT
- SQL Performance TuningGeeksforGeeksEN
- What is a Content Delivery Network (CDN)?GeeksforGeeksEN