I used to deploy everything to traditional serverless.
It worked.
Until it didn’t.
Cold starts.
Regional latency.
Users far from my deployment region waiting longer than they should.
Then I tried deploying at the edge.
Not multi-region.
Not auto-scaling.
Actually at the edge.
And that’s when I started using Cloudflare Workers.
If you want sub-millisecond global execution without managing infrastructure, here’s what worked for me — including Durable Objects and KV.
In this post, I’ll walk you through building and deploying a real API on Cloudflare Workers, using KV for caching and Durable Objects for state — plus how it compares to traditional serverless.
🎯 What We’re Building
Workers + KV + Durable Objects = Global Edge API
We’ll:
• Deploy a Worker
• Add KV caching
• Use Durable Objects for state
• Compare latency vs traditional serverless
• Understand when edge makes sense
🧠 First: What “Edge” Actually Means
With traditional serverless (e.g., AWS Lambda), your function runs in a specific region.
If your region is:
us-east-1
And your user is in Africa or Asia?
Latency increases.
With Cloudflare Workers:
Your code runs in data centers close to the user.
Same code.
Executed globally.
That’s a major architectural shift.
🛠️ Step 1: Create a Worker
Install Wrangler:
npm install -g wrangler
Login:
wrangler login
Create a new Worker:
wrangler init edge-api
cd edge-api
Basic Worker:
export default {
async fetch(request: Request) {
return new Response("Hello from the edge 🚀");
}
};
Deploy:
wrangler deploy
That’s it.
Your API is now running globally.
No region configuration.
No scaling config.
No cold start provisioning.
⚡ Performance Comparison: Edge vs Traditional Serverless
Traditional Serverless:
• Region-bound
• Cold starts possible
• Network hops to user
• VPC complexity
Edge Workers:
• Globally distributed
• No traditional cold starts
• Lower latency
• Runs in V8 isolates
Workers don’t spin up containers.
They use lightweight isolates.
This is why startup time is extremely fast.
For latency-sensitive APIs?
This difference is noticeable.
📦 Step 2: Add KV for Global Caching
Cloudflare KV is a globally distributed key-value store.
Use it for:
• Caching API responses
• Feature flags
• Config data
Bind KV in wrangler.toml:
[[kv_namespaces]]
binding = "CACHE"
id = "your_kv_id"
Then in your Worker:
export default {
async fetch(request: Request, env: any) {
const cacheKey = "homepage_data";
const cached = await env.CACHE.get(cacheKey);
if (cached) {
return new Response(cached);
}
const freshData = JSON.stringify({ message: "Fresh data" });
await env.CACHE.put(cacheKey, freshData, {
expirationTtl: 60
});
return new Response(freshData);
}
};
Now:
• First request = compute
• Next requests = edge cached
• Globally replicated
KV is eventually consistent.
So don’t use it for strict transactional data.
🧠 Step 3: Durable Objects for Stateful Logic
Workers are stateless by default.
Durable Objects give you:
• Strong consistency
• Per-instance state
• Coordination logic
Use cases:
• Real-time rooms
• Rate limiting
• Game sessions
• Counters
Define a Durable Object:
export class Counter {
value: number = 0;
async fetch() {
this.value++;
return new Response(this.value.toString());
}
}
Register in wrangler.toml:
[[durable_objects.bindings]]
name = "COUNTER"
class_name = "Counter"
Use it in your Worker:
export default {
async fetch(request: Request, env: any) {
const id = env.COUNTER.idFromName("global");
const obj = env.COUNTER.get(id);
return obj.fetch(request);
}
};
Now you have:
A globally addressable, stateful object.
That’s powerful.
Traditional serverless needs external databases for this.
🌍 When Edge Wins
Use Workers when:
• You need global low latency
• You’re building APIs for worldwide users
• You want simple deployment
• You need fast startup times
• You’re building real-time coordination
🧱 When Traditional Serverless Still Makes Sense
Use regional serverless when:
• You need heavy CPU tasks
• Long-running background jobs
• Deep integration with cloud-native services
• Massive memory workloads
Edge is not a replacement for everything.
It’s a precision tool.
🧩 What About Cloudflare Pages?
Cloudflare Pages is great for static + frontend hosting.
You can combine:
Pages (frontend)
Workers (API logic)
But for backend logic, Workers are the real engine.
⚠️ Mistakes I Made
• Treating KV like a relational database
• Forgetting eventual consistency
• Storing large blobs unnecessarily
• Not understanding Durable Object locality
Understand your consistency model.
Edge is fast — but it has architectural tradeoffs.
🏁 Final Thoughts
Deploying at the edge changed how I think about backend architecture.
Instead of asking:
“What region should I deploy to?”
You ask:
“How close can I get to my users?”
Cloudflare Workers remove friction.
But you still need to design carefully.
Edge computing isn’t hype.
It’s architectural leverage.
If you’re building globally distributed apps, this is worth exploring.
Next, we could dive into:
• Building a full real-time app with Durable Objects
• Workers + AI inference at the edge
• Benchmarking edge vs regional APIs
Let me know which direction you want next.
Check my portfolio out TheACJ
Top comments (0)