wandres.dev
QUÉ ES EL EDGE · la red global

Edge frente a región

El modelo tradicional de una VM o una lambda en una sola region frente al modelo edge que corre en todas partes. Qué supuestos de la nube regional dejan de aplicar y cómo cambia el diseno de un sistema.

⏱ 12 min

La forma clásica de desplegar un backend empieza por una pregunta: en qué región. Eliges un centro de datos, colocas ahí tu servidor y tu base de datos, y el mundo entero paga la distancia hasta ese punto. El edge borra esa primera pregunta y, con ella, una lista entera de supuestos que dábamos por eternos. Esta lección los pone cara a cara —supuesto por supuesto— para que veas exactamente qué cambia al pasar de una región al borde, y qué problema nuevo aparece en el camino.

🎯 Al terminar esta lección sabrás
  • Describir el modelo regional clásico y sus supuestos implícitos.
  • Contrastarlo con el modelo edge punto por punto.
  • Identificar qué deja de ser cierto: región, cold start, conexión a la base de datos.
  • Entender qué problema nuevo aparece: la distancia a los datos.

El modelo regional

Durante dos décadas, la nube significó alquilar máquinas en una región. Levantas una VM o defines una función serverless, eliges us-east-1 o eu-west-1, y ahí vive tu aplicación. Cerca despliegas la base de datos, y el conjunto funciona como una unidad en un punto concreto del mapa.

Ese modelo no es malo —ha sostenido internet durante años— pero trae consigo una serie de supuestos que casi nunca cuestionamos porque venían de fábrica:

📍

Hay una región

Tu app vive en un lugar. Los usuarios lejanos pagan la latencia de viajar hasta él en cada petición.

🧊

Existen los cold starts

Si la función lleva rato inactiva, arrancar su contenedor tarda cientos de milisegundos o segundos.

🔗

Hay una conexión persistente

El servidor abre un pool de conexiones a la base de datos y lo mantiene vivo, porque ambos están juntos.

📈

Escalar es replicar

Llegar a otro continente significa montar toda la pila en otra región y sincronizarla a mano.

El supuesto más silencioso, y el que más nos costará soltar, es que el compute y los datos están juntos. En una región, el servidor y la base de datos comparten centro de datos: hablar con la base de datos es casi gratis, cuestión de menos de un milisegundo. Todo el diseño tradicional se apoya, sin decirlo, en esa cercanía.

En código, ese supuesto se ve en cada backend regional: una cadena de conexión que apunta a un host concreto y un pool que se mantiene abierto.

// El patron regional: un host fijo y un pool persistente,
// que solo tiene sentido si el compute vive junto a la base de datos.
const pool = new Pool({
  host: "db.us-east-1.internal",
  max: 20,
  idleTimeoutMillis: 30000,
});
📝
El pool es cómodo hasta que te mueves

Ese pool persistente es una de las razones por las que los backends regionales son tan rápidos hablando con su base de datos, y también una de las que más cuesta llevar al edge. Depende de un proceso que vive indefinidamente en el mismo sitio que la base. En cuanto el compute se reparte por el mundo, esa comodidad se convierte en el problema central a resolver.

El modelo edge

En el edge, la unidad de despliegue no es una máquina en una región: es una función que existe en toda la red a la vez. No hay región que elegir, no hay contenedor que arrancar, no hay servidor que mantener encendido.

Ese cambio de unidad reordena el ciclo de vida entero:

  • Nace por petición: el isolate se activa cuando llega una request y puede descartarse después.
  • Vive en todas partes: no en una zona, sino en cada PoP que reciba tráfico.
  • No guarda estado en memoria entre peticiones: el estado va a un binding, no a una variable global.
  • No se administra: ni tamaño de instancia, ni parches, ni escalado manual.
flowchart TB
subgraph Modelo_regional
  A[Usuario lejano] --> B[Viaje largo hasta la region]
  B --> C[Un servidor y una base de datos]
end
subgraph Modelo_edge
  D[Usuario] --> E[PoP mas cercano]
  E --> F[Tu Worker ya esta aqui]
end
style C fill:#f38ba8,color:#11111b
style F fill:#a6e3a1,color:#11111b

Puesto frente a los cuatro supuestos anteriores, el contraste es limpio:

  • No hay una región: el Worker corre en el PoP de cada usuario. La cercanía es el estado por defecto, no una configuración.
  • No hay cold starts: un isolate de V8 arranca en cero milisegundos sobre un proceso ya caliente; no hay contenedor que levantar.
  • No hay conexión persistente al uso: un Worker es efímero y global, así que no puede sostener un pool clásico; el acceso a datos se repiensa con bindings, KV, D1 o Hyperdrive.
  • Escalar es gratis y geográfico: ya estás en todas partes desde el primer despliegue; no replicas a mano.
// No hay region ni pool persistente que configurar.
// El Worker recibe sus recursos por 'env', ya conectados y globales.
export default {
  async fetch(request, env) {
    const valor = await env.MI_KV.get("clave");
    return new Response(valor ?? "sin datos");
  },
};

Fíjate en que no aparece ninguna cadena de conexión, ninguna región, ningún host: solo env.MI_KV, un binding declarado en la configuración. El recurso llega ya resuelto y disponible en cada PoP. Esa ausencia de fontanería no es azar: es la forma que toma el edge cuando ninguna de las suposiciones regionales sigue en pie.

📝
Por qué un Worker no mantiene un pool

Un pool de conexiones vive en un proceso de larga duración: abre conexiones caras una vez y las reutiliza. Un Worker no encaja en ese modelo: es efímero, se crea y se destruye por petición, y existe en cientos de PoPs a la vez, así que un pool clásico multiplicaría conexiones sin control contra una base regional. Por eso el edge ofrece alternativas —bindings a almacenes nativos, o Hyperdrive, que agrupa las conexiones del lado de Cloudflare— en vez de un pool en tu código.

Qué supuesto nace en el edge

Cambiar de modelo no elimina los problemas: los mueve. Recordemos el supuesto silencioso de la región —compute y datos juntos—. El edge lo rompe de raíz. Si tu Worker corre en cientos de ciudades pero tu base de datos sigue en una sola región, cada consulta vuelve a cruzar el planeta. Has acercado el compute al usuario y, sin querer, has alejado el compute de los datos.

⚠️
El error clásico al llegar al edge

Mover el compute al borde y dejar la base de datos en una única región lejana es la trampa número uno. El Worker responde en 5 milisegundos lo suyo, pero cada consulta a la base de datos paga 120 de ida y vuelta, y si hace varias consultas en serie, las suma todas. El resultado a veces es peor que el backend regional que tenías, porque ahora el viaje a los datos ocurre desde un compute que ya no está junto a ellos. El edge exige pensar dónde viven los datos, no solo dónde vive el código.

Por eso el catálogo de almacenamiento de Cloudflare no es una lista de productos redundantes, sino un conjunto de respuestas distintas a la misma pregunta nueva:

🌍

KV

Lecturas replicadas globalmente: el dato se cachea cerca de quien lo pide. Ideal para leer mucho y escribir poco.

🗃️

D1

SQLite en el edge con réplicas de lectura, para acercar también las consultas relacionales al usuario.

🎯

Durable Objects

Estado coordinado con una única ubicación por objeto: consistencia fuerte donde la necesitas.

🚀

Hyperdrive

Acelera una base de datos regional que no puedes mover, agrupando conexiones y cacheando desde el edge.

No hay que elegir uno para siempre: una misma app puede usar KV para configuración global, D1 para sus tablas y Durable Objects para sesiones en vivo. La pregunta deja de ser cuál es el mejor almacén y pasa a ser cuál acerca estos datos a estos accesos.

El cambio de mentalidad

Resumido en una tabla, el salto mental es este:

El modelo regional preguntaba El edge pregunta
¿En qué región despliego? Ya estás en todas
¿Cómo replico a otra zona? Ya está replicado
¿Dónde pongo el servidor? ¿Dónde pongo los datos?
La región optimizaba un eje; el edge te obliga a optimizar dos

La diferencia esencial entre los dos modelos no es la velocidad, es el número de variables que gobiernas. En el mundo regional solo había un eje que optimizar y venía resuelto: pon el compute y los datos juntos en una región, y acepta que los usuarios lejanos sufran. Un único punto, una única decisión, y toda la ingeniería giraba en torno a exprimir ese punto. El edge parte ese eje en dos que hay que optimizar a la vez: la distancia del código al usuario y la distancia del código a los datos. Acercar el primero es automático —la red lo hace por ti sin que muevas un dedo—; acercar el segundo es el arte que define este track. Por eso Cloudflare no ofrece solo compute distribuido, sino un catálogo entero de almacenamiento pensado para el borde, y cada pieza es una respuesta distinta a la pregunta que la región nunca te obligó a hacerte: dónde deben vivir estos datos para estar cerca de quien los usa. A veces la respuesta es replicarlos globalmente (KV), a veces acercar solo las lecturas (D1), a veces fijar el estado en un punto único y coordinado (Durable Objects), a veces acelerar una base que no puedes mover (Hyperdrive). No hay una respuesta universal, y esa es justo la señal de que has pasado de administrar servidores a diseñar sistemas. Interiorizar que el edge no elimina la latencia sino que la reparte en dos frentes, y que tu trabajo es cerrarlos los dos, es exactamente lo que separa a quien despliega un Worker de quien diseña en el edge. La región te daba una respuesta cómoda; el edge te da un problema mejor y las herramientas para resolverlo.

⚔️ Traduce tu arquitectura al edge
  1. Piensa en un backend regional que conozcas —una VM o una lambda con su base de datos— y localiza en qué región vive todo.
  2. Marca cuáles de los cuatro supuestos (región, cold start, conexión persistente, replicar a mano) dejan de aplicar al pasarlo al edge.
  3. Identifica el eje nuevo: si movieras el compute al borde, ¿dónde quedaría la base de datos y cuánto costaría cada consulta?
  4. Elige, para tu caso, cuál de las cuatro respuestas de almacenamiento (KV, D1, Durable Objects, Hyperdrive) acercaría también los datos.