Nodos, Aristas, Direcciones
Una Solicitud como un Paseo por un Gráfico
Cada componente que toca una solicitud es un nodo: cliente, resolutor de DNS, borde de CDN, inverso proxy, réplica de backend, base de datos, caché.
Cada conexión entre dos nodos es una arista dirigida: las solicitudes fluyen hacia adelante, las respuestas fluyen hacia atrás. La arista hacia adelante representa una conexión TCP abierta más el protocolo que hay encima.
Una sola solicitud es un camino a través de este gráfico. El trabajo total que realiza el sistema para responder a la solicitud es igual a la suma del trabajo en cada nodo, más la latencia de cada arista.
¿Por qué importa? Una vez que dibuje el gráfico, las propiedades saltarán que son invisibles en el código:
- Recuento de saltos: el número de aristas en el camino. Cada salto agrega latencia (giro de red + procesamiento de nodo). Menos saltos = piso más bajo en latencia.
- Grado de entrada: el número de aristas que apuntan HACIA un nodo. Alto grado de entrada significa que el nodo recibe solicitudes de muchos orígenes y debe escalar o protegerse.
- Grado de salida: el número de aristas que apuntan DESDE un nodo. Alto grado de salida significa que el nodo depende de muchos downstreams y tiene muchas formas de fallar.
- Vértice de corte: un solo nodo cuya eliminación desconecta el gráfico. Un inverso proxy sin compañero es un vértice de corte; eliminándolo se elimina todo el acceso a sus orígenes.
Dónde se Concentra el Tráfico
Fan-In = Concentración
Grado de entrada de un nodo = número de aristas que apuntan a él. En un gráfico de solicitudes, el grado de entrada = número de fuentes de arriba que envían solicitudes.
Patrón de fan-in: muchos clientes -> uno CDN; muchas aristas CDN -> pocas proxies de origen; muchos proxies -> menos réplicas de backend; muchos backends -> una base de datos única.
La concentración importa porque el nodo de mayor grado de entrada ve el mayor cargamiento en conjunto. La BD al final de la cadena puede ver consultas de todas las solicitudes activas en todo el sistema, incluso si ninguna generada por un solo usuario.
Fan-Out = Dependencia
Grado de salida de un nodo = número de aristas que salen de él. Alto grado de salida significa muchas dependencias downstream.
Un backend que llama a una base de datos, dos cachés, tres APIs externos y una cola tiene un grado de salida de 7. Su probabilidad de éxito es aproximadamente el producto de la probabilidad de éxito de cada downstream (si todos son necesarios para una respuesta exitosa).
0.999 ^ 7 ≈ 0.993: un backend con 7 downstreams cada uno con un 99,9% de confiabilidad solo puede lograr un ~99,3% de confiabilidad, incluso sin errores propios.
Reducir el grado de salida por: cachear resultados downstream, hacer que los downstreams no críticos sean opcionales (degradación graciosa), paralelizar lo que se pueda.
La Asimetría
El fan-in concentra la carga; el fan-out multiplica el riesgo. Un gráfico bien formado minimiza ambos en los nodos de mayor impacto.
La base de datos (más alto fan-in): cachear agresivamente para reducir la carga. Replicas de lectura para esparcir el fan-in entre múltiples nodos.
El servicio de orchestrator (más alto fan-out): interruptores de circuito por dependencia, degradación graciosa, bulkheads.
Una nodo insertada compra flexibilidad
Indirecta = Agregar un Nodo Intermedio
Sin un proxy, el gráfico es: cliente -> backend. El cliente debe saber sobre la dirección del backend. Mover el backend requiere actualizar el cliente (a través de DNS o configuración). Esto es una unión estrecha.
Con un proxy, el gráfico se convierte en: cliente -> proxy -> backend. El cliente sabe solo sobre el proxy. Mover el backend requiere actualizar la configuración de upstream del proxy, no el cliente.
La operación del gráfico: insertar un nodo a lo largo de una ruta existente. La nueva ruta cliente -> proxy es estable; la nueva ruta proxy -> backend ahora es responsabilidad del equipo.
Lectura geométrica: la indirecta agrega una capa que desacopla el cambio upstream del cambio downstream. Cada capa puede reconfigurarse independientemente.
Costo de la Indirecta
Cada capa agrega:
- Un salto de latencia (el nodo desde cliente a proxy)
- Un corte de vértice adicional en la ruta (el proxy mismo)
- Un lugar más donde pueda ocurrir una configuración incorrecta
Los beneficios (reconfigurar, escalar, proteger, terminar TLS, distribuir carga) suelen superar los costos para cualquier sistema no trivial. Pero hay un límite: cada capa de indirecta agrega otro salto y otro candidato a Punto de Fallo de Sistema.
La regla popular: cualquier problema se puede resolver agregando una capa de indirecta (excepto el problema de tener demasiadas capas de indirecta).
Lea una Arquitectura como un Gráfico
Sinthesis
Ahora puedes leer una arquitectura de sistema como un gráfico: contar saltos, identificar vértices de corte, medir la concentración de fan-in, calcular techo de disponibilidad a partir de fan-out y evaluar las compensaciones de indirecta.
Aplica todos los cuatro.
Un nuevo servicio tiene esta arquitectura: clientes -> CDN -> inversor de proxy (2 réplicas) -> capa de back-end (8 réplicas) -> { base de datos principal, cluster de caché (3 nodos), API externa }.
Companion Notes
Companion Notes
Esta lección de geometría-vista recuesta la lección principal Proxies & Origins como un análisis de gráficos dirigidos.
La próxima compañera en este curso, geometry_of_stateless_horizontal_scaling, toma la matemática de réplicas de la lección de escalabilidad principal y deriva la curva de cola, la ley de Little y la rodilla geométrica del 80% de utilización.
Bien hecho.