wandres.dev
EL COSTE DEL SERVIDOR · la latencia como diseño

El límite físico: el suelo que fija la luz

La velocidad de la luz en fibra impone un mínimo de ida y vuelta que ninguna arquitectura puede bajar, y ese mínimo decide qué interacciones pueden consultar al servidor y cuáles no.

⏱ 16 min

Hay pocas restricciones en informática que sean realmente absolutas. Casi todo lo que llamamos límite es un límite de la implementación actual, y desaparece con mejor hardware o mejor algoritmo. La propagación de una señal por un cable no es uno de esos casos: es una constante del universo dividida por el índice de refracción de un trozo de vidrio, y multiplicada por un mapa. Vale la pena calcularla una vez y no olvidarla nunca.

🎯 Al terminar esta lección sabrás
  • Derivar el suelo de ida y vuelta a partir de la velocidad de la luz en fibra y la distancia geográfica.
  • Convertir ese suelo en una regla mental utilizable sin calculadora.
  • Contrastar el presupuesto disponible de una interacción por pulsación de tecla con ese suelo.
  • Entender qué compra exactamente acercar el servidor y qué sigue sin comprar.

El suelo que fija el vidrio

La velocidad de la luz en el vacío es una constante cerrada: unos trescientos mil kilómetros por segundo. Dentro de una fibra óptica de sílice la señal viaja más despacio, porque el índice de refracción del vidrio ronda el uno con cuatro o uno con cinco a las longitudes de onda que se usan en telecomunicaciones. Dividiendo, la velocidad efectiva queda del orden de doscientos mil kilómetros por segundo.

const C_VACIO_KM_S = 299792.458;  // constante fisica, no una medida de red
const INDICE_FIBRA = 1.47;        // orden de magnitud del silice monomodo
const V_FIBRA = C_VACIO_KM_S / INDICE_FIBRA;  // unos 204 000 km por segundo

// Suelo teorico de ida y vuelta, en milisegundos, para una distancia recta
const sueloRTT = (km) => (2 * km / V_FIBRA) * 1000;

De ahí sale una regla mental que conviene memorizar: cada mil kilómetros de separación en línea recta añaden del orden de diez milisegundos de ida y vuelta. No importa la tecnología, el proveedor, el protocolo ni el presupuesto. Es un suelo, no una estimación.

Aplicarla a un mapa es aleccionador. Entre Europa occidental y la costa este de Norteamérica hay del orden de cinco o seis mil kilómetros en línea recta, lo que sitúa el suelo de ida y vuelta en torno al medio centenar de milisegundos. Entre Europa y Australia hay del orden de quince o dieciséis mil, y el suelo supera holgadamente el décimo de segundo. Y son suelos optimistas por dos razones: los cables no van en línea recta —siguen costas, fosas y acuerdos comerciales— y cada equipo intermedio añade su propio término de procesamiento y encolado.

flowchart TB
A[Distancia geografica en linea recta] --> B[Dividir por la velocidad en fibra]
B --> C[Suelo teorico de ida y vuelta]
C --> D[Sumar desvio real del cable]
D --> E[Sumar equipos intermedios y encolado]
E --> F[Latencia de red observable]
style C fill:#f9e2af,color:#11111b
style F fill:#f38ba8,color:#11111b
📝
Un suelo no es una predicción

La cifra que sale de esta división no predice lo que vas a medir: acota lo que es posible medir. Si tu herramienta reporta una ida y vuelta transatlántica por debajo del suelo teórico, no has descubierto física nueva: has descubierto una caché, un servidor de borde o un error de medición. Esa capacidad de refutación es justo lo que hace útil al cálculo.

Merece la pena cerrar la puerta a la esperanza tecnológica antes de que se abra. Sí existen medios más rápidos que el vidrio: el vacío del espacio, o una fibra de núcleo hueco cuyo índice se acerca al del aire. Pero fíjate en cuánto pueden dar de sí como máximo. Si el vidrio frena la señal por un factor de aproximadamente uno con cinco, el mejor medio concebible recupera exactamente ese factor y ni un ápice más: el tiempo se reduce en torno a un tercio, y ahí termina la partida para siempre, porque el techo lo pone la constante del vacío. Un tercio es una mejora respetable de ingeniería y es completamente irrelevante frente a la diferencia entre decenas de milisegundos y cero.

El presupuesto de una pulsación de tecla

Ahora enfrentemos el suelo con una interacción concreta y exigente: una aplicación que quiere resolver en el servidor algo que ocurre en cada pulsación de tecla —una búsqueda mientras escribes, una validación, una colaboración carácter a carácter.

¿De cuánto tiempo dispone esa interacción? Escribir a un ritmo de unos pocos cientos de caracteres por minuto sitúa el intervalo entre teclas en el orden de una o dos décimas de segundo. Ese es el presupuesto: si la respuesta a una tecla tarda más que el hueco hasta la siguiente tecla, el sistema nunca se pone al día.

Y aquí el suelo intercontinental se vuelve demoledor: es del mismo orden de magnitud que el intervalo completo entre pulsaciones. No una fracción del presupuesto: el presupuesto entero, consumido por la propagación, antes de que el servidor haya empezado a pensar y sin haber gastado un solo milisegundo en el cliente.

// Regimen estable frente a regimen divergente
// Si el tiempo de respuesta supera el intervalo entre eventos,
// la cola de eventos pendientes no se vacia nunca.
const intervaloEntreTeclas = 150;  // orden de magnitud, en milisegundos
const respuestaRemota = 120;       // suelo intercontinental mas trabajo

const seAcumula = respuestaRemota > intervaloEntreTeclas;
⚠️
El problema no es la espera, es la acumulación

Una latencia alta con eventos esporádicos es molesta pero estable: esperas, llega, sigues. Una latencia alta con eventos generados a mayor ritmo del que se resuelven es cualitativamente distinta: la cola de trabajo pendiente crece, y el sistema entra en un régimen donde cada respuesta que llega ya está obsoleta. Por eso las interfaces que consultan al servidor por pulsación acaban inventando parches de contención —esperar a que dejes de escribir, descartar respuestas viejas, limitar el ritmo—: no son mejoras de rendimiento, son diques contra la divergencia.

Vista así, la ubicua técnica de esperar a que el usuario deje de escribir antes de consultar deja de parecer una optimización y se revela como lo que es: una confesión. El sistema declara que no puede seguir el ritmo de la persona, y negocia un armisticio consistente en atender solo cuando la persona se detiene. Funciona, y es lo correcto dada la restricción, pero conviene nombrarlo con precisión: no es una mejora de la interacción, es una renuncia a que la interacción sea continua.

Y esa renuncia tiene un efecto de segundo orden que rara vez se contabiliza. Al esperar a la pausa, el sistema deja de poder responder durante el pensamiento y solo responde después. La diferencia no es de milisegundos: es la diferencia entre una herramienta que acompaña el razonamiento y una que lo evalúa cuando ya ha terminado.

Acercar el servidor: qué compra y qué no

La respuesta convencional al suelo es reducir la distancia: replicar en varias regiones, desplegar en el borde, poner cachés cerca del usuario. Es una respuesta correcta y con efectos reales, porque ataca directamente el único factor de la fórmula que está bajo control humano.

Pero conviene ser preciso sobre qué compra. Acercar el servidor multiplica el suelo por un factor menor que uno; no lo anula. Y compra menos de lo que parece por tres motivos. El primero es que el término que se elimina es solo el de propagación: el encolado, el procesamiento y el renderizado siguen intactos. El segundo es que la réplica cercana solo sirve si puede responder de forma autónoma; en cuanto necesite coordinarse con una autoridad central para escribir o para leer algo consistente, la distancia larga reaparece justo donde importa. El tercero es que el último tramo hasta el dispositivo —la red móvil, el vecindario, el túnel— no lo controla nadie y suele ser el peor de todos.

🌍

Distancia

El único factor negociable. Replicar y desplegar en el borde lo reduce, pero solo hasta donde llegue tu presencia física.

Velocidad en el medio

Fijada por el índice de refracción del vidrio. No hay proveedor ni protocolo que la modifique.

🔗

Coordinación

Si la réplica cercana necesita permiso de una autoridad lejana, has movido el servidor pero no el camino crítico.

📶

Último tramo

La conexión final al dispositivo suele dominar y no está bajo tu control ni bajo el de tu proveedor.

El único cero disponible

Si el suelo es distancia dividida por velocidad, y la velocidad está fija, solo hay una manera de que el suelo valga cero: que la distancia valga cero. Es decir, que el dato que la interacción necesita ya esté en el dispositivo donde ocurre la interacción.

Esta es, formulada sin retórica, toda la premisa arquitectónica de local-first. No es una preferencia estética ni una moda: es la única solución de una ecuación de una línea. Cualquier otra estrategia —replicar, cachear, predecir, optimizar el protocolo— reduce el término; solo tener el dato localmente lo elimina.

// Las tres estrategias, ordenadas por lo que le hacen al termino
const conServidorLejano = distancia / velocidad;        // suelo alto
const conServidorCercano = distanciaCorta / velocidad;  // suelo bajo
const conDatoEnElDispositivo = 0;                       // el termino desaparece

La tercera línea no es una optimización agresiva de la segunda: es una operación distinta. Las dos primeras producen números, y un número siempre admite discusión sobre si es suficiente. La tercera produce una ausencia, y una ausencia no admite discusión ni degradación: no hay condición de red, hora punta ni incidente de proveedor que pueda empeorarla.

💡
La pregunta que ordena el diseño

Ante cada interacción, pregúntate: ¿el servidor está en el camino crítico o solo en el camino? Si está en el camino crítico, esa interacción hereda el suelo geográfico y no hay optimización que la salve. Si está solo en el camino —sincronizando después, confirmando después, auditando después— la interacción es libre. La misma aplicación puede tener interacciones de las dos clases, y clasificarlas es el trabajo de diseño más rentable que existe.

La única constante física en la pila de software

Merece la pena detenerse en lo raro que es este límite. La informática es una disciplina donde casi ninguna restricción es permanente: los algoritmos mejoran, los transistores encogen, las memorias crecen, y una afirmación del tipo “esto es imposible” suele significar “esto es caro hoy”. La propagación de una señal es la excepción notable. No es un problema abierto ni una limitación de la generación actual de equipos: es la velocidad de la luz, la constante que estructura la causalidad del universo, dividida por una propiedad óptica del vidrio que apenas varía. Ninguna inversión, ninguna investigación y ningún avance en compresión, protocolos o silicio la va a mover. Lo interesante es la consecuencia epistemológica. Significa que, al diseñar una interacción, puedes hacer una afirmación demostrable sobre su rendimiento futuro, algo casi inaudito en esta profesión: si esta interacción requiere consultar a una máquina situada a cinco mil kilómetros, entonces nunca, bajo ninguna tecnología concebible, se sentirá instantánea. No es una predicción sujeta a revisión: es una deducción. Y una deducción de ese calibre no pertenece a la fase de optimización, que ocurre tarde y sobre código ya escrito, sino a la fase de arquitectura, que ocurre antes y decide qué código se escribe. Tratar la latencia como un asunto de rendimiento es un error de categoría; la latencia intercontinental es un asunto de topología, y la topología se elige el primer día o no se elige.

⚔️ Calcula tu propio suelo
  1. Estima la distancia en línea recta entre tu ubicación y la región donde crees que vive tu servicio habitual, y calcula el suelo de ida y vuelta con la regla de los diez milisegundos por mil kilómetros.
  2. Compara ese suelo con la latencia real que observes y razona a qué se debe la diferencia, término a término.
  3. Toma una interacción por pulsación de tecla y decide si su presupuesto cabe en tu suelo. Si no cabe, enumera los parches que la aplicación tendría que inventar.
  4. Explica por qué desplegar en el borde no elimina el suelo cuando la operación necesita coordinarse con una autoridad central.
  5. Argumenta por qué la distancia cero es la única solución exacta de la ecuación, y en qué se distingue de una caché muy buena.