Planteamiento y contexto
Un sistema cuenta con múltiples nodos que almacenan los mismos datos de negocio, y dichos nodos pueden sufrir una partición. Explica Consistencia, Disponibilidad y Tolerancia a particiones, y luego aplícalas a órdenes, inventario o feeds de redes sociales. No te limites a "elegir dos"; describe qué ven los usuarios, qué escrituras se aceptan y cómo converge el sistema tras la recuperación.
Qué evalúa el entrevistador
El entrevistador espera que sitúes el balance durante una partición, definas la consistencia como una garantía de lectura y la disponibilidad como una garantía de respuesta oportuna, y que trates la tolerancia a particiones como una restricción real de las redes distribuidas. Las respuestas sólidas conectan el riesgo de negocio, la degradación, el manejo de conflictos, la observabilidad y la recuperación en lugar de sustituir el razonamiento por una etiqueta de base de datos.
Preguntas para aclarar
- ¿La consistencia es linealizable, a nivel de sesión o brevemente desactualizada?
- ¿La disponibilidad permite un error explícito reintentable?
- ¿Qué operaciones deben detenerse durante una partición, como pagos, inventario o cancelaciones?
- ¿Se permiten colas locales, reintentos idempotentes, fusión de conflictos o revisión humana?
- ¿El objetivo de recuperación es cero pérdida, convergencia monotónica o una ventana de compensación delimitada?
Respuesta de 30 segundos
El teorema CAP establece que, durante una partición de red, un sistema no puede garantizar al mismo tiempo consistencia fuerte y una respuesta disponible para cada solicitud; P es la restricción de seguir funcionando a través de la partición. Primero clasificaría los errores de negocio inaceptables: los pagos y el inventario pueden devolver un error reintentable, mientras que un feed social puede servir datos desactualizados. Luego explicaría la idempotencia, los registros de conflictos, la reproducción (replay), la recuperación y las métricas, en lugar de afirmar que una base de datos es permanentemente "tanto CP como AP".
Respuesta detallada paso a paso
Paso 1: Definir los tres términos
La consistencia es una garantía de lectura; la consistencia fuerte comúnmente se describe como la lectura de la última escritura completada. La disponibilidad significa que cada solicitud recibe una respuesta dentro del contrato del sistema. La tolerancia a particiones significa que el sistema puede manejar la comunicación perdida o retrasada de forma ilimitada entre nodos. El caso decisivo de CAP es cuando ha ocurrido P.
Paso 2: Dibujar una línea de tiempo de la partición
Supongamos que Tokio y Singapur no pueden comunicarse. Si ambos aceptan escrituras opuestas para una misma cuenta y responden de inmediato, puede producirse un conflicto y se pierde la consistencia fuerte. Si solo un lado escribe o ambos rechazan operaciones inciertas, se sacrifica algo de disponibilidad. Dibuja la línea de tiempo antes de nombrar un almacén de datos.
Paso 3: Elegir el comportamiento según el riesgo del negocio
El inventario, la autorización de pagos y los identificadores únicos deben evitar las escrituras dobles; durante una partición pueden devolver un estado reintentable o encolar el trabajo. Los "me gusta", los conteos de vistas y las recomendaciones a menudo pueden tolerar lecturas desactualizadas y fusiones asíncronas. La elección depende del costo de un error, no de un eslogan AP/CP.
partitioned:
if operation == payment_or_inventory:
reject_or_queue_with_idempotency_key()
else:
serve_stale_read_and_record_reconciliation()Paso 4: Definir escrituras y conflictos
Las escrituras reintentables llevan una clave de idempotencia y una versión. Las escrituras multirregión registran el origen, el tiempo lógico y la evidencia; la recuperación fusiona, compensa o envía los conflictos a revisión de acuerdo con las reglas de negocio. La estrategia de "el último escritor gana" (last-write-wins) no debe ocultar conflictos irreversibles de pago o inventario.
Paso 5: Explicar la recuperación
Una vez que se restablece la comunicación, intercambia registros y versiones, detecta brechas y duplicados, y reproduce los eventos reintentables en orden. Asigna a las órdenes no resueltas un estado explícito para que los usuarios no paguen dos veces. Aplica límites de tasa (rate-limit) a la recuperación y utiliza colas de mensajes fallidos (dead-letter) y manuales para los registros excepcionales.
Paso 6: Conectar con la validación
Rastrea la duración de la partición, la tasa de rechazo, la antigüedad de las lecturas desactualizadas, el recuento de conflictos, el éxito de las compensaciones y las solicitudes duplicadas. Inyecta fallas en lecturas, escrituras, reintentos, recuperación y latencia interregional; luego verifica que los mensajes mostrados al usuario coincidan con el estado real.
Compensaciones y límites
CAP no es una etiqueta permanente de base de datos de dos letras
La elección es de comportamiento durante una partición; fuera de ella, la latencia, el costo, la durabilidad y las operaciones siguen importando. Llamar a un sistema "AP" o "CP" sin garantías a nivel de solicitud oculta el diseño.
Especificar la fuerza de la consistencia
"Consistente" puede significar linealizable, causal, de sesión o convergencia eventual. Define el contrato de lectura y escritura antes de debatir sobre nodos y protocolos.
Plan de implementación y evidencias
Mapear requisitos con políticas
Para pagos, inventario, estado de órdenes, búsqueda y contadores sociales, redacta el comportamiento ante particiones, los textos para el usuario, el límite de reintentos y las acciones de recuperación. Mapea cada promesa a una API y a un modelo de datos.
Ejecutar simulacros de fallas
Ejercita la pérdida unidireccional, retrasos, mensajes duplicados y recuperación parcial. Verifica las respuestas finales, los registros de idempotencia, las colas de conflictos, la contabilidad de compensaciones y las alertas; limpia los datos de prueba y revisa los registros de auditoría posteriormente.
Errores comunes y preguntas de seguimiento
Error: afirmar que CA sobrevive a las particiones
CA describe la consistencia y la disponibilidad cuando se excluye la partición; los sistemas reales entre nodos deben manejar fallas de comunicación.
Error: equiparar disponibilidad con éxito permanente
La disponibilidad es una garantía de respuesta oportuna. Un error, una cola o un reintento explícito pueden ser el comportamiento de negocio correcto cuando el contrato es claro.
Error: sobrescribir cada conflicto con "el último escritor gana"
Los conflictos de pagos e inventario requieren idempotencia, versiones, compensación o revisión; la sobrescritura ciega pierde hechos del negocio.
Pregunta de seguimiento: ¿por qué P suele ser inevitable?
Las redes interregionales pueden particionarse o sufrir retrasos inaceptables; renunciar a P significa detener el servicio distribuido cuando falla la comunicación.
Pregunta de seguimiento: ¿cómo demuestras la elección?
Muestra simulacros de partición, estados visibles para el usuario, métricas de conflictos y compensaciones, y una condición de reversión (rollback) para la política.