principletypescriptMajor
Edge Function Patterns: Stateless, fast cold starts, and global consistency tradeoffs
Viewed 0 times
edgestatelesscold-startconsistencykvd1serverless-db
cloudflare-workersvercel-edgedeno-deploy
Problem
Teams move to edge functions expecting both low latency and stateful behavior (sessions, DB connections), but edge runtimes have no persistent memory between invocations and geographic distribution creates consistency challenges.
Solution
Design edge functions as pure request handlers with no persistent in-memory state. Use edge-compatible data stores (D1, KV, Upstash Redis) for state. Place data geographically close to compute or use globally replicated stores. Accept eventual consistency or coordinate via a central region for strong consistency.
Why
Edge runtimes execute in isolated micro-VMs. Any in-memory state is scoped to that invocation. Treating edge functions as stateless forces correct patterns and prevents subtle bugs from assumed persistent state.
Gotchas
- Node.js database drivers (pg, mysql2) do not work on edge runtimes — use HTTP-based drivers (Neon serverless, PlanetScale serverless).
- Cold start time varies significantly by runtime — Cloudflare Workers have sub-millisecond cold starts; others do not.
- Edge functions behind a CDN may receive stale cache entries — always set appropriate Cache-Control headers.
Code Snippets
Edge-compatible database access via HTTP driver
// Works on Cloudflare Workers — uses fetch() not TCP sockets
import { neon } from '@neondatabase/serverless'
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const sql = neon(env.DATABASE_URL)
const users = await sql`SELECT id, name FROM users LIMIT 10`
return Response.json(users)
}
}Revisions (0)
No revisions yet.