Worker exceeded CPU time. Request muere, no hay retry automático.Saber qué primitivas existen es la teoría. Saber cómo fallan, cuánto cuestan, cómo observarlas, cómo migrar hacia ellas es la práctica. Este volumen recoge la operación real del stack — los números, los modos de falla, los playbooks que sólo se aprenden en producción.
Cada primitiva tiene maneras específicas de fallar. Conocerlas no es paranoia — es saber dónde poner monitores, retries, fallbacks.
Worker exceeded CPU time. Request muere, no hay retry automático.read_replication: { mode: 'auto' } mitiga.idFromName(...) debe ser por entidad lógica, no global.Date.now(), Math.random(), o lectura externa no-cacheada → replay genera valores distintos → state divergente. Captura side effects en steps explícitos.step.sleep.refund() → estado inconsistente irrecuperable. Test compensations exhaustively.Precios oficiales por primitiva, más tres ejemplos calculados en escenarios reales. Saber el costo de un diseño antes de construirlo separa al arquitecto del entusiasta.
| Plan | Incluido | Excedente | Notas |
|---|---|---|---|
| Free | 100K req/día | No disponible | 10ms CPU max |
| Paid $5/mes | 10M req/mes | $0.30 / M req | 30s wall, 50ms CPU |
| Standard CPU | 30M CPU-ms/mes | $0.02 / M CPU-ms | Cobra solo CPU activo, no wall |
| Primitiva | Lectura | Escritura | Storage | Notas |
|---|---|---|---|---|
| KV | $0.50 / M reads | $5.00 / M writes | $0.50 / GB-mo | Free: 100K reads, 1K writes/día |
| D1 | $0.001 / M rows read | $1.00 / M rows written | $0.75 / GB-mo | Free: 5M reads, 100K writes/día |
| DO | $0.15 / M req | incluido | $0.20 / GB-mo storage SQLite | + duration $12.50 / M GB-s |
| R2 | Class B $0.36 / M ops | Class A $4.50 / M ops | $0.015 / GB-mo | Egress GRATIS (vs S3 $0.09/GB) |
| Vectorize | $0.04 / M dim queried | $0.04 / M dim stored | incluido en queried | Free: 30M queried/mo |
| Primitiva | Operación | Precio | Notas |
|---|---|---|---|
| Queue | Operations (push + pull + delete) | $0.40 / M ops | Free: 1M ops/mo |
| Workflow | Step invocations | ~Workers pricing | Cobra como Worker req |
| Workers AI | Por modelo, por token | Llama 3.1 8B: ~$0.10 / M tokens | 10K neurons free/día |
| AI Gateway | Proxy | $0 base + storage cache | Cache hit ahorra costo LLM externo |
| Browser Render | Per session | $0.09 per browser-hour | Sessions de pocos segundos típico |
No puedes mejorar lo que no puedes medir. Las herramientas para ver dentro del stack — desde live tail hasta time-series custom.
wrangler tail muestra console.log, errors, requests en tiempo real. Filter por status, sampling rate, predicate.wrangler tail my-worker --status error --sampling-rate 0.1env.AE.writeDataPoint({ blobs: ['user-id'], doubles: [latency], indexes: ['endpoint'] })Playbooks para mover sistemas existentes hacia Cloudflare. Cada migración tiene su orden óptimo — conocerlo evita meses de fricción.
fs, net, child_process). Identifica usos. Reemplaza con Web Standards (fetch, Web Crypto, Streams).req.session in-memory. Workers son stateless. Mueve a JWT en cookie (stateless) o DO con session ID (stateful).setInterval no funciona. Reemplaza con Cron Triggers (Worker corre on schedule) o Queues (jobs reactivos).express.static → Workers Static Assets (nuevo, integrado) o R2 público con custom domain.process.env → env.MY_VAR en handler. Secrets via wrangler secret put. Bindings declarados en wrangler.toml.SERIAL → INTEGER PRIMARY KEY AUTOINCREMENT, JSONB → TEXT con JSON funciones, UUID → TEXT, no arrays.pg_dump --data-only --inserts. Edita schema diffs. Sqlite3-compatible SQL.wrangler d1 execute MY_DB --file=dump.sql. Para datasets grandes (>100K rows), batches de 5K-10K.@prisma/adapter-d1).Los números reales que debes memorizar. Cuando alguien te pregunta "¿escala a X?", la respuesta vive en esta tabla.
| Primitiva | Métrica | Valor Típico | Notas |
|---|---|---|---|
| Worker | Cold start | ~5ms | Up to 50ms con bundle grande |
| CPU time | 10ms free / 50ms paid / 30s standard | Por request | |
| Wall time | 30s default | Configurable hasta 15min | |
| Memory | 128MB | Hard limit | |
| KV | Read p50 | ~10ms | Cache hit edge local |
| Write throughput | 1 / sec / key | Hard rate limit | |
| Propagation | ~60s globalmente | Eventual consistency | |
| D1 | Query p50 | ~5-30ms (read replica) | Primary write ~50-100ms |
| Write throughput | ~1000 / sec primary | Single primary | |
| Database size | 10GB hard limit | Per database | |
| Durable Object | Request rate | ~1000 / sec / DO | Single-writer |
| Wake from hibernation | ~10-50ms | Primera request | |
| SQLite storage | 10GB / DO | Hard limit | |
| In-memory state | ~128MB | Mismo que Worker | |
| Queue | Throughput | 5K msg/sec / queue | Sustained |
| Visibility timeout | 30s default | Configurable | |
| Max retention | 4 días | Antes de DLQ | |
| Workers AI | Llama 3.1 8B TTFT | ~200-500ms | Time to first token |
| Llama 3.3 70B TTFT | ~1-2s | Slower model | |
| R2 | PUT throughput | ~100MB/s / object | Multipart para >5GB |
| Hyperdrive | Pool warm latency | +0-2ms vs direct | Vs ~50-200ms cold connection |
El arquitecto que sólo conoce primitivas y patrones es teórico. El arquitecto que opera sin medir es supersticioso. La maestría completa requiere las tres dimensiones: qué existe (Vol I), cómo componer (Vol II), cómo opera en el mundo real (Vol III).
Los números de este volumen cambian — Cloudflare publica nuevos pricing, sube ceilings, añade primitivas. La disciplina es revisitar. Mide tu sistema cada trimestre contra la tabla de límites. Calcula tu factura proyectada antes de cada nuevo feature. Audita logs después de cada deploy. La operación es ritual, no episodio.
Volumen completado. La trilogía cierra. El arquitecto ahora tiene mapa de territorio (I), gramática de composición (II), y manual de operación (III). Lo que falta no se enseña — se practica.