Usa el patrón de expandir y contraer. Primero expande: añade la columna o tabla nueva de forma retrocompatible para que el código desplegado actualmente siga funcionando. Luego despliega código que escriba en la vieja y en la nueva, rellena las filas existentes en lotes pequeños, cambia las lecturas a la forma nueva y solo en una release posterior elimina la columna antigua. Mantén cada migración compatible con la versión de la aplicación que corre antes y después de ella.
Por qué lo preguntan los entrevistadores
El entrevistador quiere saber si has publicado cambios de esquema contra tráfico vivo o solo en desarrollo. Escucha lo de expandir y contraer, el relleno por lotes para evitar bloqueos largos y retraso de replicación, y el desacople de la migración respecto al despliegue. Mencionar peligros de bloqueo concretos, como la creación de índices, demuestra experiencia real en producción y no teoría.
Cómo estructurar tu respuesta
- Nombra el patrón y el invariante: cada paso es retrocompatible.
- Recorre las fases en orden: expandir, escritura dual, relleno, cambio, contraer.
- Cubre los peligros de bloqueo y replicación y cómo los evitas.
- Di cómo verificas y cómo revertirías en cada fase.
Ejemplo de respuesta
La regla que mantengo es que cualquier esquema desplegado tiene que funcionar con la versión anterior y con la siguiente del código, porque durante un despliegue progresivo ambas corren a la vez. Así que nunca renombro una columna, expando y contraigo. Digamos que estamos separando un campo de nombre. La primera migración añade las columnas nuevas anulables, que es barato y no toca ninguna fila existente. Luego una release donde la aplicación escribe en la forma vieja y en la nueva pero sigue leyendo la vieja, así que nada de cara al usuario depende todavía de los datos nuevos. Después un relleno ejecutándose en lotes de unos pocos miles con una pausa entre ellos, para no mantener una transacción larga ni disparar el retraso de replicación en las réplicas. Luego una release que lee las columnas nuevas, con las viejas todavía escribiéndose como vía de escape. Solo cuando eso lleva estable una release o dos dejo de escribir en las dos y elimino las columnas antiguas. También mantengo las migraciones fuera de la propia ruta de despliegue, y cualquier cosa que tome un bloqueo pesado, como construir un índice, corre de forma concurrente y fuera de horas punta.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cómo verificas que el relleno está completo y es correcto?
- ¿Cuál es tu plan de rollback si el cambio de lecturas sale mal?
- ¿Cómo gestionarías esto cuando la tabla tiene quinientos millones de filas?
Más preguntas para Ingeniero DevOps
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas