272 lines
7.1 KiB
Markdown
272 lines
7.1 KiB
Markdown
# Cloudflare Platform Overview
|
|
|
|
Cloudflare Developer Platform: comprehensive edge computing ecosystem for full-stack applications on global network across 300+ cities.
|
|
|
|
## Core Concepts
|
|
|
|
### Edge Computing Model
|
|
|
|
**Global Network:**
|
|
- Code runs on servers in 300+ cities globally
|
|
- Requests execute from nearest location
|
|
- Ultra-low latency (<50ms typical)
|
|
- Automatic failover and redundancy
|
|
|
|
**V8 Isolates:**
|
|
- Lightweight execution environments (faster than containers)
|
|
- Millisecond cold starts
|
|
- Zero infrastructure management
|
|
- Automatic scaling
|
|
- Pay-per-request pricing
|
|
|
|
### Key Components
|
|
|
|
**Workers** - Serverless functions on edge
|
|
- HTTP/scheduled/queue/email handlers
|
|
- JavaScript/TypeScript/Python/Rust support
|
|
- Max 50ms CPU (free), 30s (paid)
|
|
- 128MB memory limit
|
|
|
|
**D1** - SQLite database with global read replication
|
|
- Standard SQLite syntax
|
|
- Single-writer consistency
|
|
- Global read replication
|
|
- 25GB database size limit
|
|
- Batch operations for transactions
|
|
|
|
**KV** - Distributed key-value store
|
|
- Sub-millisecond reads (edge-cached)
|
|
- Eventual consistency (~60s globally)
|
|
- 25MB value size limit
|
|
- Automatic TTL expiration
|
|
- Best for: cache, sessions, feature flags
|
|
|
|
**R2** - Object storage (S3-compatible)
|
|
- Zero egress fees (huge cost advantage)
|
|
- Unlimited storage
|
|
- 5TB object size limit
|
|
- S3-compatible API
|
|
- Multipart upload support
|
|
|
|
**Durable Objects** - Stateful compute with WebSockets
|
|
- Single-instance coordination (strong consistency)
|
|
- Persistent storage (1GB limit paid)
|
|
- WebSocket support
|
|
- Automatic hibernation
|
|
|
|
**Queues** - Message queue system
|
|
- At-least-once delivery
|
|
- Automatic retries (exponential backoff)
|
|
- Dead-letter queue support
|
|
- Batch processing
|
|
|
|
**Pages** - Static site hosting + serverless functions
|
|
- Git integration (auto-deploy)
|
|
- Directory-based routing
|
|
- Framework support (Next.js, Remix, Astro, SvelteKit)
|
|
- Built-in preview deployments
|
|
|
|
**Workers AI** - Run AI models on edge
|
|
- LLMs (Llama 3, Mistral, Gemma, Qwen)
|
|
- Image generation (Stable Diffusion, DALL-E)
|
|
- Embeddings (BGE, GTE)
|
|
- Speech recognition (Whisper)
|
|
- No GPU management required
|
|
|
|
**Browser Rendering** - Headless browser automation
|
|
- Puppeteer/Playwright support
|
|
- Screenshots, PDFs, web scraping
|
|
- Session reuse for cost optimization
|
|
- MCP server support for AI agents
|
|
|
|
## Architecture Patterns
|
|
|
|
### Full-Stack Application
|
|
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Cloudflare Pages (Frontend) │
|
|
│ Next.js / Remix / Astro │
|
|
└──────────────────┬──────────────────────┘
|
|
│
|
|
┌──────────────────▼──────────────────────┐
|
|
│ Workers (API Layer) │
|
|
│ - Routing │
|
|
│ - Authentication │
|
|
│ - Business logic │
|
|
└─┬──────┬──────┬──────┬──────┬───────────┘
|
|
│ │ │ │ │
|
|
▼ ▼ ▼ ▼ ▼
|
|
┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────────────┐
|
|
│ D1 │ │ KV │ │ R2 │ │ DO │ │ Workers AI │
|
|
└────┘ └────┘ └────┘ └────┘ └────────────┘
|
|
```
|
|
|
|
### Polyglot Storage Pattern
|
|
|
|
```typescript
|
|
export default {
|
|
async fetch(request: Request, env: Env) {
|
|
// KV: Fast cache
|
|
const cached = await env.KV.get(key);
|
|
if (cached) return new Response(cached);
|
|
|
|
// D1: Structured data
|
|
const user = await env.DB.prepare(
|
|
"SELECT * FROM users WHERE id = ?"
|
|
).bind(userId).first();
|
|
|
|
// R2: Media files
|
|
const avatar = await env.R2_BUCKET.get(`avatars/${user.id}.jpg`);
|
|
|
|
// Durable Objects: Real-time
|
|
const chat = env.CHAT_ROOM.get(env.CHAT_ROOM.idFromName(roomId));
|
|
|
|
// Queue: Async processing
|
|
await env.EMAIL_QUEUE.send({ to: user.email, template: 'welcome' });
|
|
|
|
return new Response(JSON.stringify({ user }));
|
|
}
|
|
};
|
|
```
|
|
|
|
## Wrangler CLI Essentials
|
|
|
|
### Installation
|
|
```bash
|
|
npm install -g wrangler
|
|
wrangler login
|
|
wrangler init my-worker
|
|
```
|
|
|
|
### Core Commands
|
|
```bash
|
|
# Development
|
|
wrangler dev # Local dev server
|
|
wrangler dev --remote # Dev on real edge
|
|
|
|
# Deployment
|
|
wrangler deploy # Deploy to production
|
|
wrangler deploy --dry-run # Preview changes
|
|
|
|
# Logs
|
|
wrangler tail # Real-time logs
|
|
wrangler tail --format pretty # Formatted logs
|
|
|
|
# Versions
|
|
wrangler deployments list # List deployments
|
|
wrangler rollback [version] # Rollback
|
|
|
|
# Secrets
|
|
wrangler secret put SECRET_NAME
|
|
wrangler secret list
|
|
```
|
|
|
|
### Resource Management
|
|
```bash
|
|
# D1
|
|
wrangler d1 create my-db
|
|
wrangler d1 execute my-db --file=schema.sql
|
|
|
|
# KV
|
|
wrangler kv:namespace create MY_KV
|
|
wrangler kv:key put --binding=MY_KV "key" "value"
|
|
|
|
# R2
|
|
wrangler r2 bucket create my-bucket
|
|
wrangler r2 object put my-bucket/file.txt --file=./file.txt
|
|
```
|
|
|
|
## Configuration (wrangler.toml)
|
|
|
|
```toml
|
|
name = "my-worker"
|
|
main = "src/index.ts"
|
|
compatibility_date = "2024-01-01"
|
|
|
|
# Environment variables
|
|
[vars]
|
|
ENVIRONMENT = "production"
|
|
|
|
# D1 Database
|
|
[[d1_databases]]
|
|
binding = "DB"
|
|
database_name = "my-database"
|
|
database_id = "YOUR_DATABASE_ID"
|
|
|
|
# KV Namespace
|
|
[[kv_namespaces]]
|
|
binding = "KV"
|
|
id = "YOUR_NAMESPACE_ID"
|
|
|
|
# R2 Bucket
|
|
[[r2_buckets]]
|
|
binding = "R2_BUCKET"
|
|
bucket_name = "my-bucket"
|
|
|
|
# Durable Objects
|
|
[[durable_objects.bindings]]
|
|
name = "COUNTER"
|
|
class_name = "Counter"
|
|
script_name = "my-worker"
|
|
|
|
# Queues
|
|
[[queues.producers]]
|
|
binding = "MY_QUEUE"
|
|
queue = "my-queue"
|
|
|
|
# Workers AI
|
|
[ai]
|
|
binding = "AI"
|
|
|
|
# Cron triggers
|
|
[triggers]
|
|
crons = ["0 0 * * *"]
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### Performance
|
|
- Keep Workers lightweight (<1MB bundled)
|
|
- Use bindings over fetch (faster than HTTP)
|
|
- Leverage KV and Cache API for frequently accessed data
|
|
- Use D1 batch for multiple queries
|
|
- Stream large responses
|
|
|
|
### Security
|
|
- Use `wrangler secret` for API keys
|
|
- Separate production/staging/development environments
|
|
- Validate user input
|
|
- Implement rate limiting (KV or Durable Objects)
|
|
- Configure proper CORS headers
|
|
|
|
### Cost Optimization
|
|
- R2 for large files (zero egress fees vs S3)
|
|
- KV for caching (reduce D1/R2 requests)
|
|
- Request deduplication with caching
|
|
- Efficient D1 queries (proper indexing)
|
|
- Monitor usage via Cloudflare Analytics
|
|
|
|
## Decision Matrix
|
|
|
|
| Need | Choose |
|
|
|------|--------|
|
|
| Sub-millisecond reads | KV |
|
|
| SQL queries | D1 |
|
|
| Large files (>25MB) | R2 |
|
|
| Real-time WebSockets | Durable Objects |
|
|
| Async background jobs | Queues |
|
|
| ACID transactions | D1 |
|
|
| Strong consistency | Durable Objects |
|
|
| Zero egress costs | R2 |
|
|
| AI inference | Workers AI |
|
|
| Static site hosting | Pages |
|
|
|
|
## Resources
|
|
|
|
- Docs: https://developers.cloudflare.com
|
|
- Wrangler: https://developers.cloudflare.com/workers/wrangler/
|
|
- Discord: https://discord.cloudflare.com
|
|
- Examples: https://developers.cloudflare.com/workers/examples/
|
|
- Status: https://www.cloudflarestatus.com
|