Voltar para o Blog
Anúncio

Serverless e Edge Computing: O Fim dos Servidores Tradicionais?

Olá HaWkers, lembra quando fazer deploy significava configurar servidores, instalar Node.js, configurar Nginx, gerenciar SSL, escalar horizontalmente, monitorar CPU e RAM? Em 2025, isso parece tão antiquado quanto disquetes.

Serverless e Edge Computing eliminaram 90% dessa complexidade. E não é apenas hype - empresas estão economizando milhões enquanto entregam aplicações mais rápidas e resilientes. Vamos entender essa revolução.

O Que Mudou em 2025?

Serverless não é mais "aquela coisa da AWS Lambda". É mainstream:

  • Vercel processa 10+ bilhões de requests/mês em edge
  • Cloudflare Workers roda em 300+ datacenters globalmente
  • Netlify Edge Functions tem cold start de <10ms
  • Next.js, Nuxt, SvelteKit vêm com edge functions nativas

A velha arquitetura "servidor monolito em região única" está morta para 80% dos casos de uso.

Anúncio

Serverless: Código Sem Servidor

A promessa: você escreve funções, plataforma gerencia tudo - escalabilidade, disponibilidade, infraestrutura.

// api/user.js - Deploy automático como função serverless
export default async function handler(req, res) {
  const { userId } = req.query;

  try {
    // Conecta ao DB (connection pooling automático)
    const user = await db.user.findUnique({
      where: { id: userId }
    });

    if (!user) {
      return res.status(404).json({ error: 'User not found' });
    }

    return res.status(200).json(user);
  } catch (error) {
    console.error('Error fetching user:', error);
    return res.status(500).json({ error: 'Internal server error' });
  }
}

// Deploy: git push origin main
// Resultado: Função roda em 20+ regiões globalmente
// Escala: 0 → 10.000 requests/seg automaticamente
// Custo: Paga apenas pelo que usar

Vantagens Reais

  1. Zero gerenciamento de infra: Sem SSH, sem patches de segurança, sem escalar manualmente
  2. Pay-per-use: Função não roda = custo zero. Não paga servidor ocioso
  3. Auto-scaling: De 1 a 1 milhão de requests sem config
  4. Alta disponibilidade: Built-in, sem configuração

Desafios

// ❌ Cold start pode impactar latência
// Primeira execução após idle: 500ms-2s

// ✅ Solução 1: Warm-up scheduled
export const config = {
  schedule: '*/5 * * * *' // Roda a cada 5 min
};

// ✅ Solução 2: Provisioned concurrency (AWS)
// ✅ Solução 3: Edge functions (cold start <10ms)
Anúncio

Edge Computing: Código Perto do Usuário

Se serverless é "sem servidor", edge é "no servidor mais próximo possível do usuário".

// middleware.ts - Roda no edge, antes do servidor
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  // Detecta localização do usuário
  const country = request.geo?.country || 'US';
  const city = request.geo?.city || 'Unknown';

  // Usuário do Brasil? Redireciona para conteúdo BR
  if (country === 'BR') {
    const url = request.nextUrl.clone();
    url.pathname = `/br${url.pathname}`;
    return NextResponse.rewrite(url);
  }

  // A/B testing no edge (sem backend)
  const bucket = Math.random() < 0.5 ? 'A' : 'B';
  const response = NextResponse.next();
  response.cookies.set('ab-test', bucket);

  // Feature flags no edge
  const features = {
    newCheckout: country === 'US',
    betaFeature: ['US', 'GB', 'BR'].includes(country),
  };

  response.headers.set('x-features', JSON.stringify(features));

  return response;
}

// Esse código roda em 300+ locais globalmente
// Latência: <50ms de qualquer lugar do mundo

Por Que Edge é Revolucionário?

Antes (Servidor Central):

  • Usuário BR → Servidor US (Virgínia)
  • Latência: 200-300ms
  • Todo request viaja 8.000km

Depois (Edge):

  • Usuário BR → Edge em São Paulo
  • Latência: 10-20ms
  • Request viaja <100km

Resultado: 10-15x mais rápido para lógica de edge.

Anúncio

Cloudflare Workers: O Edge Mais Poderoso

// worker.js - Roda em 300+ datacenters da Cloudflare
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);

  // Cache inteligente no edge
  const cacheKey = new Request(url.toString(), request);
  const cache = caches.default;

  let response = await cache.match(cacheKey);

  if (!response) {
    // Não está em cache, busca do origin
    response = await fetch(request);

    // Otimização de imagem no edge
    if (url.pathname.endsWith('.jpg') || url.pathname.endsWith('.png')) {
      response = new Response(response.body, response);
      response.headers.set('Cache-Control', 'public, max-age=86400');

      // Converte para WebP automaticamente
      const accept = request.headers.get('Accept') || '';
      if (accept.includes('image/webp')) {
        // Workers pode transformar imagens no edge!
        response.headers.set('Content-Type', 'image/webp');
      }
    }

    // Armazena em cache edge
    event.waitUntil(cache.put(cacheKey, response.clone()));
  }

  return response;
}

// Deploy: wrangler publish
// Custo: 100k requests/dia GRÁTIS
// Latência global: <50ms

Casos de Uso Edge

  1. Autenticação: Valida JWT no edge, bloqueia requests inválidos antes de chegar ao servidor
  2. Geolocation: Redireciona baseado em país
  3. A/B Testing: Sem backend, decisões no edge
  4. Bot protection: Detecta e bloqueia bots
  5. Image optimization: Transforma imagens on-the-fly
  6. Rate limiting: Limita requests no edge
Anúncio

Vercel Edge Functions: Next.js Nativo

// app/api/personalize/route.ts
import { NextRequest, NextResponse } from 'next/server';

export const config = {
  runtime: 'edge', // Roda no edge!
};

export async function GET(request: NextRequest) {
  // Acesso a geolocation nativo
  const { geo } = request;

  // Personalização baseada em localização
  const content = {
    BR: { currency: 'BRL', language: 'pt-BR', tax: 0.15 },
    US: { currency: 'USD', language: 'en-US', tax: 0.08 },
    GB: { currency: 'GBP', language: 'en-GB', tax: 0.20 },
  }[geo?.country || 'US'];

  // Chama KV storage no edge (Vercel KV)
  const userPrefs = await kv.get(`user:${userId}`);

  return NextResponse.json({
    ...content,
    preferences: userPrefs,
    server: 'edge',
    region: geo?.city,
  });
}

// Latência típica: 10-30ms globalmente

Arquitetura Híbrida: O Melhor dos Dois Mundos

Em 2025, a arquitetura vencedora combina:

┌─────────────────────────────────────────┐
│           Edge Layer (CDN)              │
│  • Static assets                        │
│  • Edge functions (auth, routing)       │
│  • Cache                                │
└──────────────┬──────────────────────────┘
               │
┌──────────────▼──────────────────────────┐
│      Serverless Functions (API)         │
│  • Business logic                       │
│  • DB queries                           │
│  • Third-party integrations             │
└──────────────┬──────────────────────────┘
               │
┌──────────────▼──────────────────────────┐
│        Managed Services                 │
│  • Database (Supabase, PlanetScale)     │
│  • Storage (S3, R2)                     │
│  • Queue (SQS, Inngest)                 │
└─────────────────────────────────────────┘

Exemplo Real: E-commerce

// Edge: Routing e autenticação
// middleware.ts
export function middleware(req: NextRequest) {
  const token = req.cookies.get('auth');

  if (!token && req.nextUrl.pathname.startsWith('/checkout')) {
    return NextResponse.redirect(new URL('/login', req.url));
  }

  return NextResponse.next();
}

// Serverless: Lógica de negócio
// api/checkout/route.ts
export async function POST(req: Request) {
  const { items, paymentMethod } = await req.json();

  // Calcula total
  const total = items.reduce((sum, item) => sum + item.price * item.qty, 0);

  // Processa pagamento (Stripe)
  const payment = await stripe.paymentIntents.create({
    amount: total,
    currency: 'usd',
    payment_method: paymentMethod,
  });

  // Salva pedido no DB
  const order = await db.order.create({
    data: { userId, items, total, paymentId: payment.id },
  });

  return NextResponse.json({ orderId: order.id });
}
Anúncio

Custos: Serverless vs Tradicional

Cenário: API com 10M requests/mês, média 100ms de execução

Tradicional (EC2 t3.medium 24/7):

  • Custo fixo: $30-50/mês
  • Ocioso 80% do tempo
  • Sem auto-scaling

Serverless (AWS Lambda):

  • 10M requests × $0.20/1M = $2
  • 10M × 100ms compute = $0.83
  • Total: ~$3/mês
  • Escala automaticamente

Economia: 90% para tráfego médio/baixo.

Quando NÃO Usar Serverless

  1. Long-running tasks: Funções têm timeout (15 min AWS, 30s Vercel)
  2. WebSockets persistentes: Serverless é stateless
  3. Workloads constantes 24/7: Servidor tradicional pode ser mais barato
  4. Vendor lock-in concerns: Código pode ser específico da plataforma
Anúncio

O Futuro: WASM no Edge

A próxima fronteira é rodar WebAssembly no edge:

// Código Rust compilado para Wasm rodando no edge
import init, { process_image } from './image_processor.wasm';

export default async function handler(req) {
  await init();

  const imageBuffer = await req.arrayBuffer();
  const processed = process_image(new Uint8Array(imageBuffer));

  return new Response(processed, {
    headers: { 'Content-Type': 'image/jpeg' }
  });
}

// Performance nativa + portabilidade + edge = 🔥

Se você quer entender mais sobre performance moderna, leia: Edge Computing e Node.js: O Futuro da Performance Web onde aprofundo estratégias de otimização.

Bora pra cima! 🦅

🎯 Domine JavaScript para Trabalhar com Serverless

Serverless e Edge são JavaScript-first. Dominar JS moderno (async/await, streams, workers) é essencial.

Comece agora:

  • 3x de R$34,54 no cartão
  • ou R$97,90 à vista

🚀 Acessar Guia Completo

"Fundamentos sólidos me prepararam para trabalhar com arquiteturas serverless!" - Carlos, Cloud Engineer

Anúncio
Post anteriorPróximo post

Comentários (0)

Esse artigo ainda não possui comentários 😢. Seja o primeiro! 🚀🦅

Adicionar comentário