Vercel KV e Edge Config: Como implementar Rate Limiting e Feature Flags globais

Se o seu sistema cresceu ao ponto de atrair tráfego massivo ou usuários mal-intencionados, você já deve saber que o seu banco de dados principal (PostgreSQL, MySQL) não foi feito para segurar todos os socos.
Quando um exército de bots tenta adivinhar senhas na sua tela de login milhares de vezes por segundo, cada requisição que bate no seu banco de dados custa dinheiro, consome CPU e deixa o sistema mais lento para os seus clientes reais e pagantes.
Para resolver problemas de alta frequência como esse, nós utilizamos Bancos de Dados em Memória na camada de borda (Edge). Neste artigo técnico, vou mostrar como utilizar duas ferramentas poderosas do ecossistema da Vercel — Vercel KV e Edge Config — para blindar o seu SaaS e controlar funcionalidades em tempo real, antes mesmo da requisição chegar ao seu backend.
1. Vercel KV: O Redis Sem Dor de Cabeça
Tradicionalmente, para implementar cache rápido ou bloqueios temporários, nós configurávamos um servidor Redis (como o AWS ElastiCache). O problema é que manter um servidor Redis rodando 24/7 não é barato e exige manutenção.
A Vercel lançou o Vercel KV, que nada mais é do que um banco de dados Redis totalmente Serverless. Você não gerencia servidores; você apenas salva e lê dados na velocidade da luz, pagando frações de centavo apenas pelo que usar. E o mais importante: ele é otimizado para ser acessado de dentro das Edge Functions.
Mão no Código: Implementando Rate Limiting no Edge
Rate Limiting é a técnica de limitar quantas requisições um usuário (ou IP) pode fazer em um determinado tempo. Vamos construir um Middleware que bloqueia IPs que tentarem fazer mais de 5 requisições por minuto na nossa API de autenticação.
// src/middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { kv } from '@vercel/kv';
export const runtime = 'edge';
export async function middleware(request: NextRequest) {
// Aplicamos a regra de bloqueio apenas nas rotas críticas (ex: login)
if (request.nextUrl.pathname.startsWith('/api/auth')) {
// Pegamos o IP do cliente através dos headers injetados pela Vercel
const clientIp = request.headers.get('x-real-ip') || 'unknown';
const rateLimitKey = `rate_limit_${clientIp}`;
// Incrementa o número de tentativas deste IP
const currentRequests = await kv.incr(rateLimitKey);
// Se for a primeira requisição, define a chave para expirar em 60 segundos
if (currentRequests === 1) {
await kv.expire(rateLimitKey, 60);
}
// Se ultrapassou 5 tentativas, bloqueia imediatamente no Edge
if (currentRequests > 5) {
console.warn(`[Rate Limit] IP bloqueado: ${clientIp}`);
return new NextResponse(
JSON.stringify({
error: 'Too Many Requests. Tente em um minuto.'
}),
{
status: 429,
headers: { 'Content-Type': 'application/json' }
}
);
}
}
// Fluxo normal permitido
return NextResponse.next();
}
O poder absoluto desse código é que ele roda na borda da rede (no servidor da Vercel mais próximo do atacante). O atacante recebe o bloqueio em menos de 10 milissegundos e a requisição nunca toca no seu servidor principal de banco de dados. Você acaba de economizar centenas de dólares em infraestrutura e garantiu que o sistema continue rápido e escalável.
2. Vercel Edge Config: Feature Flags Globais (Instantâneas)
Imagine que você desenvolveu um módulo novo de "Exportação de Relatórios PDF" no seu SaaS, mas ele começou a travar o sistema em horário de pico. O que você faz? No passado, você precisaria abrir o código, comentar a funcionalidade, criar um novo commit, aguardar 5 minutos de deploy e rezar para o sistema não cair enquanto isso.
Hoje, nós usamos Edge Config para construir Feature Flags (Bandeiras de Funcionalidade). O Edge Config é um pequeno armazenamento JSON global que é propagado para todos os servidores da Vercel no mundo inteiro quase que instantaneamente (sem nenhum Cold Start ou Delay de rede, pois o dado mora no mesmo lugar onde a Edge Function roda).
Mão no Código: Desligando Recursos em Milissegundos
Sem precisar fazer um novo deploy, você pode entrar no painel da Vercel (ou usar a API) e alterar um JSON no Edge Config. O nosso código no Next.js lê esse valor em zero latência.
// src/app/dashboard/reports/page.tsx
import { get } from '@vercel/edge-config';
// Forçamos a página a renderizar dinamicamente para ler a flag em tempo real
export const dynamic = 'force-dynamic';
export default async function ReportsPage() {
// Lemos a chave do JSON global no Edge Config
// Se retornar false, desativamos o botão na hora
const isPdfExportEnabled = await get<boolean>(
'feature_pdf_export_enabled'
);
return (
<div className="p-8">
<h1>Relatórios Financeiros</h1>
{isPdfExportEnabled ? (
<button className="bg-primary text-white p-4 rounded">
Gerar Relatório em PDF
</button>
) : (
<div className="bg-red-900/50 p-4 rounded text-red-200">
⚠️ O recurso de Exportação de PDF está temporariamente em manutenção.
</div>
)}
</div>
);
}
Essa arquitetura permite que CEO e Product Managers liguem e desliguem features diretamente pelo painel, protejam funcionalidades exclusivas para clientes Enterprise e façam lançamentos graduais de novas telas (Canary Releases) sem depender de um engenheiro para reescrever código.
Escalando com Maturidade
Para empresas que tratam seu software com seriedade, ignorar o poder do KV e do Edge Config é como ter um carro esportivo e andar com o freio de mão puxado. Desafogar o banco de dados principal de tarefas repetitivas e ter o poder de desligar rotas críticas em milissegundos é a diferença entre uma Black Friday lucrativa e um final de semana apagando incêndios.

Albanir Neves
Especialista em Sistemas e Integrações
Com mais de 12 anos de experiência técnica, ajudo empresas a escalar e digitalizar processos através de sistemas sob medida, automação avançada e integrações B2B com Inteligência Artificial.
Artigos Relacionados

Integração IA e Banco de Dados: Acessando o PostgreSQL com Segurança
Descubra como transformar modelos de linguagem genéricos em funcionários virtuais que consomem e analisam os dados privados do seu banco PostgreSQL.

O Ciclo de Vida do Código: Ambientes Permanentes de Homologação e Sandbox
Aprenda por que o fluxo de desenvolvimento B2B nunca termina na branch main e como estruturar ambientes imortais de testes (Sandbox) no Supabase e Vercel.

Observabilidade Avançada: Monitorando Vitals e Tráfego com Vercel Analytics
Por que o Google Analytics está defasado para performance técnica e como a Vercel coleta dados reais de carregamento direto da borda.