Voltar para o Blog

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

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

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.