Desconecta el cable. Pulsa el interruptor de emergencia. Estos instintos funcionan cuando estás junto a una única máquina. Fallan cuando tu sistema de IA se extiende por cincuenta nodos a través de tres zonas de disponibilidad. La mayoría de los equipos de ingeniería aprenden esto por las malas. Actualizan una base de datos central, cambian un booleano de verdadero a falso y asumen que el sistema se detiene. No es así. La base de datos parece limpia. El servicio sigue en ejecución.
La ilusión del interruptor único
Imagina un controlador que registra una revocación en la época (epoch) 12. Escribe el cambio en un almacén persistente y respira aliviado. Mientras tanto, el worker B está funcionando con una concesión en caché de la época 11. El worker nunca recibió el aviso. Treinta segundos después, inicia una tarea de inferencia de modelo, levanta un clúster de GPU o llama a una API externa. El registro de auditoría dice que el acceso fue revocado. La acción ocurrió de todos modos.
Esta es la brecha entre la persistencia y la propagación. Una escritura en la base de datos no es un estado del sistema. Es una fila en una tabla, y muchos actores en tu sistema nunca consultan esa tabla en el momento exacto en que lo necesitan. Si tratas una parada de emergencia como un interruptor de luz, descubrirás que la oscuridad nunca llega a algunos rincones de la habitación.
La dura realidad de los sistemas distribuidos
Tienes que diseñar para el fallo. No para fallos ocasionales. Para fallos constantes, caóticos e independientes. Los workers se reinician en medio de una tarea. Los consumidores de la cola se retrasan minutos. Los servicios de autorización devuelven datos obsoletos porque una réplica está bloqueada. Los mensajes se duplican. Los mensajes desaparecen. Los mensajes llegan fuera de orden. Tu daemon NTP se desvía y, de repente, un nodo cree que lleva diez segundos de retraso respecto a los demás. Los relojes tienen errores y no puedes confiar en el tiempo real (wall time) para ordenar eventos a través de límites.
Si tu protocolo de emergencia asume redes fiables, entrega de mensajes ordenada o relojes sincronizados, no tienes un protocolo. Tienes un deseo. Los workers, los consumidores de la cola y los servicios de autorización fallan de forma independiente. Tus reglas de seguridad deben mantenerse incluso cuando la infraestructura parece activamente hostil.
Cinco reglas que realmente funcionan
La seguridad proviene de invariantes que sobreviven al caos. Aquí están las reglas que evitan que una revocación se convierta en una ficción.
Ninguna acción comienza con una época de concesión inferior a la época de revocación.
Este es tu guardarraíl principal. Cada concesión de permiso lleva un número de época. Cada revocación lleva uno más nuevo. Antes de que cualquier worker actúe, compara los números. Si la concesión del worker es más antigua que la última revocación que ha visto, el worker se detiene. Las épocas te proporcionan un reloj lógico que no depende del reloj del sistema. Un worker que posee la época 11 debe negarse a empezar a trabajar una vez que sepa que la época 12 ha revocado la autoridad subyacente.
Las concesiones en caché caducan dentro de un límite de tiempo establecido.
Un permiso nunca debe vivir para siempre en la memoria. Los workers necesitan revalidar o abandonar sus derechos tras un intervalo acotado. Sin esto, un nodo que se desconecte podría despertarse días o semanas después y ejecutar acciones utilizando una concesión fosilizada. Establece un lease. Aplícalo estrictamente. El tiempo se convierte en tu equipo de limpieza automático.
Un reinicio del sistema no puede reducir una época guardada.
La persistencia importa. Si un controlador falla y se reinicia, debe recuperar la época más alta que haya emitido. Volver a una época anterior resucitaría los permisos revocados como si la parada de emergencia nunca hubiera ocurrido. Almacena la época de forma duradera antes de transmitirla. Utiliza un write-ahead log, un fsync confirmado o un grupo de consenso replicado. La historia solo avanza hacia adelante.
**Revocaciones dupl
