Entrada y salida como conjuntos distintos
Grafos bipartitos en la arquitectura de red
Un grafo bipartito divide los nodos en dos conjuntos, permitiendo aristas solo entre conjuntos (nunca dentro de un mismo conjunto).
Los límites de red tienen una estructura bipartita natural:
- Lado de entrada (ingres): clientes externos en un lado, servicios internos en el otro. Aristas: solicitudes externas que entran, respuestas internas que salen.
- Lado de egress (salida): servicios internos en un lado, destinos externos en el otro. Aristas: servicios internos que inician llamadas salientes, respuestas externas que regresan.
La asimetría:
- Ingress (entrada): el conjunto de origen es ilimitado (cualquier persona en internet). El conjunto de destino es pequeño (unos pocos servicios). El volumen escala con los usuarios.
- Egress (salida): el conjunto de origen es pequeño (unos pocos servicios internos). El conjunto de destino es acotado (unos pocos socios conocidos). El volumen escala con la actividad interna.
Diseño de caja única colapsa ambas mitades bipartitas a través de un solo nodo. Ese nodo tiene fan-in desde el exterior (ingress) Y fan-in desde el interior (dirección inversa del egress). La carga del nodo = suma de ambos lados.
Diseño dividido preserva ambas mitades bipartitas en nodos separados. Cada nodo maneja un rol con su eje de escalado apropiado.
Antes de la división: Un vértice de corte en todas partes
Caja única: Un vértice sostiene todo
Antes de la división, una sola caja de proxy se sitúa entre cada par externo/interno. En términos de grafos, es un vértice de corte de alto orden: su eliminación desconecta a todos los clientes de todos los backends Y a todos los servicios internos de todos los socios externos.
La conectividad en este nodo es 1. Cualquier cosa que interrumpa este nodo (crash del proceso, fallo de red, OOM kill) desconecta todas las rutas dependientes.
Después de la división: El vértice de corte se reemplaza por dos nodos más ligeros
Dividir en entrada (ingress) + salida (egress) crea dos nodos de grafo donde antes había uno. Cada nodo ahora se sitúa solo en una mitad bipartita:
- Nodo de entrada (Ingress): vértice de corte para la mitad bipartita de clientes externos a servicios internos
- Nodo de salida (Egress): vértice de corte para la mitad bipartita de servicios internos a socios
El bucle de hairpin desaparece geométricamente: en el grafo de caja única, un servicio interno que intentaba alcanzar un servicio orientado a externos mediante la dirección pública requería atravesar el mismo vértice dos veces (salida por el rol de egress, y luego entrada por el rol de ingress). En el grafo dividido, la atravesamiento toca dos vértices diferentes.
La conectividad por lado se mantiene en 1, pero los dos vértices de corte pueden reemplazarse de forma independiente. Añadir un segundo proxy de entrada aumenta la conectividad del lado de entrada a 2 sin cambiar el lado de salida.
Replicación por lado
Las flotas de producción suelen ejecutar 2 o más proxies de entrada (HA) Y 2 o más proxies de salida (HA). Cada lado alcanza la conectividad 2 de forma independiente. La capacidad escala horizontalmente en cada lado según sea necesario.
Tolerancia a particiones de red
Síntesis
Ahora puedes leer arquitecturas de red como grafos bipartitos, identificar vértices de corte y rastrear la conectividad por cada mitad.
Aplica esto a las particiones de red.
Una partición de red es un corte de grafo: los bordes que cruzan la partición fallan; ambos lados siguen operando, pero no pueden alcanzar al otro.
Un sistema distribuido geográficamente tiene dos centros de datos conectados por un único enlace inter-DC. El tráfico de entrada entra a través del DC1; el de salida pasa por el DC1 hacia socios externos; algunos servicios internos residen en el DC2 y llaman de vuelta al DC1 para operaciones con estado.
Notas complementarias
Notas complementarias
Esta lección de geometría reformula la lección principal de Separación de Ingreso y Salida como un análisis de grafos bipartitos.
El próximo complemento, geometry_of_failure_modes_and_blast_radius, deriva la centralidad de intermediación (identifica nodos cuello de botella) y el corte mínimo (limita el alcance del impacto).
Muy bien.