wandres.dev
SMART PLACEMENT Y LÍMITES · CPU y subrequests

Smart Placement: ejecutar cerca de los datos

El axioma del edge dice que tu código corre cerca del usuario, y casi siempre es lo que quieres. Pero para el Worker que conversa muchas veces con un backend centralizado, estar cerca del usuario significa cruzar el océano en cada consulta. Smart Placement invierte la decisión: deja que Cloudflare mueva la ejecución cerca de los datos cuando eso reduce el total de viajes de ida y vuelta. Vemos por qué el lugar por defecto penaliza a esos Workers, cómo se activa el modo smart y se afina con pistas, y cuándo colocar cerca de los datos no aporta nada.

⏱ 16 min

El axioma del edge dice que tu código corre cerca del usuario. Es cierto por defecto, y casi siempre es lo que quieres. Pero hay una clase de Worker para la que ese axioma es una trampa: el que conversa muchas veces con un backend que vive en un solo lugar del mundo. Para ese Worker, estar cerca del usuario significa cruzar el planeta en cada consulta. Smart Placement invierte la decisión y deja que Cloudflare mueva la ejecución cerca de los datos, no del usuario, cuando eso recorta el total de viajes de ida y vuelta.

🎯 Al terminar esta lección sabrás
  • Entender por qué el lugar por defecto —cerca del usuario— penaliza al Worker que hace muchos viajes a un backend centralizado.
  • Distinguir la latencia de un solo viaje de la latencia acumulada de varios viajes secuenciales.
  • Activar Smart Placement con mode y afinarlo con pistas explícitas de región o de host.
  • Reconocer los casos en que colocar cerca de los datos no aporta nada, o incluso estorba.

El problema de los viajes de ida y vuelta

Cuando una petición llega a la red, aterriza en el centro de datos más cercano al usuario por anycast, y ahí, por defecto, se ejecuta tu Worker. Para trabajo local o para hablar con almacenamiento distribuido globalmente, es lo óptimo: la respuesta nace a milisegundos de quien la pidió.

El problema aparece cuando tu Worker no es autónomo, sino un intermediario que consulta una y otra vez a un backend que vive en una sola región: una base de datos SQL en Virginia, una API heredada en Fráncfort. Cada consulta es un viaje de ida y vuelta completo, y si el Worker está cerca del usuario pero lejos del backend, cada uno de esos viajes cruza el mundo.

Aquí importa una distinción que mucha gente pasa por alto. Con una sola consulta por petición, el lugar donde corre el Worker es indiferente: el viaje de ida y vuelta al backend cuesta lo mismo tanto si sale desde cerca del usuario como si sale desde cerca de los datos, porque la distancia total recorrida es idéntica.

La cosa cambia por completo cuando las consultas son varias y secuenciales —cada una depende de la anterior—. Un viaje transatlántico ronda los 20 a 30 milisegundos; uno local, de 1 a 3. Cinco consultas secuenciales desde cerca del usuario suman más de cien milisegundos de pura espera de red; las mismas cinco desde cerca de los datos apenas rozan los diez, y solo queda un viaje largo: el de la respuesta final de vuelta al usuario.

ℹ️
La latencia de red no es CPU

El tiempo que tu Worker pasa esperando esos viajes de ida y vuelta no cuenta como CPU time ni te cobra cómputo: es espera de entrada y salida. Smart Placement no acelera tu código, reordena la geografía de esas esperas. Es una optimización de latencia percibida, no de coste de cómputo.

Cómo decide Cloudflare dónde ejecutar

Activar la función es una sola clave en el manifiesto. Con mode puesto en smart, Cloudflare observa la latencia real de los subrequests de tu Worker y, aplicando sus heurísticas, decide si moverlo a un centro de datos más próximo al backend compensa.

{
  // el Worker deja de correr siempre cerca del usuario:
  // Cloudflare mide y decide si acercarlo a tus datos
  "placement": {
    "mode": "smart"
  }
}

El modo smart es la opción correcta cuando no sabes exactamente dónde vive tu backend o cuando hablas con varios. Desde 2026 puedes además dar pistas explícitas si sí lo sabes: region fija una región de las nubes grandes —admite identificadores de AWS, GCP y Azure— y Cloudflare elige el centro de datos con menor latencia hacia ella.

{
  "placement": {
    // pista explicita: coloca el Worker junto a esta region de nube
    "region": "aws:us-east-1"
  }
}

Si tu infraestructura no está en esas nubes, la expones a las sondas de colocación con host para una comprobación de capa 4 o hostname para una de capa 7. Esas sondas están pensadas para localizar infraestructura de un solo hogar, no para recursos anycast o multicast, que por definición no tienen un único lugar al que acercarse.

{
  "placement": {
    // infraestructura propia: sonda de capa 4 hacia un host y puerto
    "host": "mi-base-de-datos.example.com:5432"
  }
}

Una vez que la heurística ha fijado una ubicación óptima, una caída puntual de tráfico ya no la devuelve al lugar por defecto: la colocación es estable, pensada incluso para cargas que solo golpean el backend cada varios días.

Cuándo ayuda y cuándo no

Smart Placement no es un interruptor de rendimiento universal: es una herramienta afilada para un problema concreto. Reconocer su forma exacta te ahorra activarla donde no sirve.

Muchos viajes a una region

Un Worker que hace varias consultas secuenciales a una base de datos o API de una sola región es el caso ideal: los viajes largos se vuelven locales y solo queda uno de vuelta.

Una sola consulta

Si por petición solo haces un viaje al backend, colocar no cambia nada: la distancia total es la misma se ejecute donde se ejecute. No lo actives por reflejo.

🌍

Almacenamiento global

KV y R2 ya viven cerca del usuario. Un Worker que solo los toca está mejor en su lugar por defecto; acercarlo a un backend inexistente no tiene sentido.

🗄️

Contenido cacheado

La caché se consulta antes de considerar la colocación. Si la respuesta sale de caché, tu Worker ni siquiera corre y Smart Placement es irrelevante.

flowchart TB
REQ[Peticion del usuario llega por anycast] --> DEC{Donde ejecutar el Worker}
DEC -- modo por defecto --> NEARU[Cerca del usuario]
DEC -- modo smart --> NEARD[Cerca de los datos]
NEARU -- N viajes largos al origen --> LAT1[Latencia alta si hay muchas consultas]
NEARD -- N viajes cortos al origen --> LAT2[Latencia baja mas un viaje de vuelta]
style NEARD fill:#a6e3a1,color:#11111b
style NEARU fill:#fab387,color:#11111b
style LAT2 fill:#89b4fa,color:#11111b
⚠️
Mueve el Worker, no la caché

Un malentendido caro es creer que Smart Placement acerca la caché al backend. No lo hace: la caché siempre tiene su nivel inferior junto al usuario y su nivel superior agregado en la red, y se consulta antes que la colocación. Smart Placement solo cambia dónde se ejecuta tu código cuando la caché falla y el Worker de verdad tiene que correr.

El edge tiene dos polos, y tú eliges junto a cuál sentarte

La lección profunda de Smart Placement no es una optimización de latencia, sino un cambio en cómo piensas la geografía de tu sistema. El edge no es un solo lugar: es un campo con dos polos de atracción. Uno es el usuario, que quiere respuestas cerca; el otro son los datos, que a menudo viven concentrados en una región heredada. Durante años la arquitectura serverless te obligó a elegir un polo de antemano y para siempre: en una región de nube tradicional, tu cómputo y tus datos comparten domicilio y el usuario paga la distancia; en el edge ingenuo, tu cómputo abraza al usuario y son los datos los que quedan lejos. Smart Placement disuelve esa falsa dicotomía al desacoplar dos cosas que creíamos inseparables: el punto de entrada de la petición, que sigue siendo anycast y aterriza siempre junto al usuario, y el punto de ejecución del código, que ahora es móvil y puede deslizarse hacia donde minimice el trabajo total. La petición entra por la puerta más cercana, pero el cómputo se sienta junto a la conversación más costosa. Y la clave para usarlo bien es entender que lo que se optimiza no es la distancia de un viaje, sino la suma de todos: si tu Worker charla mucho con un backend concentrado, acercarlo convierte una decena de travesías oceánicas en una decena de saltos locales más un único viaje de vuelta; si solo hace una pregunta, no hay nada que reordenar. Interiorizar esto es dejar de preguntar “dónde está mi servidor” y empezar a preguntar “dónde está la conversación más cara de esta petición, y quién debería mudarse para acortarla”.

⚔️ Decide la colocación con cabeza
  1. Toma un Worker que hace tres consultas secuenciales a una base de datos en us-east-1 desde usuarios europeos: estima la latencia de red total con y sin colocación cerca de los datos.
  2. Explica por qué, con una única consulta por petición, activar Smart Placement no mejora la latencia de extremo a extremo.
  3. Activa mode en smart en tu wrangler.jsonc y razona qué observaría Cloudflare de tus subrequests para decidir moverte.
  4. Distingue cuándo usarías una pista region frente a una sonda host, y por qué las sondas no valen para un recurso anycast.
  5. Argumenta por qué un Worker que solo lee de KV y sirve contenido cacheado no gana nada con Smart Placement.