Pregunta de entrevista para Desarrollador backend

Necesitas actualizar la base de datos y publicar un evento. ¿Cómo evitas que las dos cosas se descuadren?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Usa el patrón outbox transaccional: escribe el evento en una tabla outbox dentro de la misma transacción que el cambio de estado, y que un relay aparte haga polling o lea el log y lo publique, marcándolo como enviado. Así hay un único commit, de modo que nunca puedes tener una fila sin evento ni un evento sin fila. El relay da entrega al menos una vez, así que los consumidores siguen necesitando ser idempotentes.

Por qué lo preguntan los entrevistadores

El problema de la doble escritura es uno de los modos de fallo que definen los sistemas distribuidos, y muchos candidatos nunca lo han nombrado. El entrevistador quiere ver que reconoces que publicar después del commit puede perder eventos y publicar antes del commit puede inventarlos. Conocer el outbox, y que la captura de cambios de datos es la misma idea impulsada desde el write ahead log, indica experiencia real con eventos.

Cómo estructurar tu respuesta

  • Nombra el problema de la doble escritura y las dos direcciones en que falla.
  • Describe el outbox mecánicamente: una transacción, relay aparte.
  • Menciona la captura de cambios de datos como variante basada en el log.
  • Señala las consecuencias: orden, al menos una vez, limpieza del outbox.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

La trampa es que un commit de base de datos y una publicación en el broker son dos sistemas distintos, así que cualquier orden que elijas tiene un modo de fallo. Publica primero y la transacción puede deshacerse, así que los consumidores actúan sobre algo que nunca ocurrió. Confirma primero y el proceso puede morir antes de publicar, así que el evento se pierde y nadie lo reintenta. El patrón outbox elimina el hueco: la fila del evento se inserta en una tabla outbox dentro de la misma transacción que el cambio de negocio, así que o aterrizan las dos o ninguna. Después un relay lee en orden las filas sin enviar y las publica, marcándolas como enviadas, y si se cae a mitad de publicación simplemente vuelve a publicar, que es justo por lo que los consumidores deben ser idempotentes. Si estoy en Postgres y quiero menos polling, uso captura de cambios de datos sobre el write ahead log con algo como Debezium, que da la misma garantía con menos código a medida. Los detalles operativos que merece la pena planificar son podar el outbox y monitorizar el retraso del relay, porque un outbox que deja de vaciarse parece totalmente sano desde el lado de la aplicación.

¿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 funciona

Preguntas de seguimiento que puedes esperar

  • ¿Cómo monitorizarías que el relay va al día?
  • ¿Qué garantías de orden te da realmente el outbox?
  • ¿Cuándo elegirías captura de cambios de datos frente a un outbox escrito en la aplicación?

Más preguntas para Desarrollador backend

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

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot