Laravel

Laravel Distributed Systems

Comunicación basada en queue, events, outbox pattern, idempotencia, retries, circuit breaker, contratos de API, versionado, fundamentos de Saga

22 preguntas de entrevista·
Senior
1

¿Qué es el outbox pattern en los sistemas distribuidos de Laravel?

Respuesta

El outbox pattern almacena los messages/events en una tabla de la database durante la misma transacción que los datos de negocio, y luego los envía de forma asíncrona en un proceso separado. Esto garantiza que los messages siempre se envíen incluso si el sistema se cae después del commit de la DB. ShouldQueueAfterCommit en Laravel es una implementación parcial de este pattern, ya que despacha el job solo después del commit de la transacción, evitando las race conditions donde el job se ejecuta antes de que los datos estén disponibles.

2

¿Cuál es la diferencia principal entre ShouldQueue y ShouldQueueAfterCommit?

Respuesta

ShouldQueue despacha el job inmediatamente a la queue, incluso si la transacción DB aún no se ha commiteado, lo que puede causar race conditions. ShouldQueueAfterCommit espera a que todas las transacciones DB se hayan commiteado antes de despachar el job, garantizando que los datos estén disponibles cuando el job se ejecuta. Usa ShouldQueueAfterCommit para los jobs que dependen de datos recién creados o modificados en una transacción, por ejemplo un job de envío de email después de crear un pedido.

3

¿Qué es la idempotencia en el contexto de los sistemas distribuidos de Laravel?

Respuesta

La idempotencia significa que una operación puede ejecutarse varias veces sin cambiar el resultado más allá de la primera ejecución. En Laravel, esto evita efectos secundarios no deseados durante los retries de jobs o los messages duplicados. Por ejemplo, un job de creación de pedido idempotente verifica si el pedido ya existe antes de crearlo, evitando duplicados si el job se reintenta tras un timeout. Usa ShouldBeUnique, WithoutOverlapping o deduplicationId para garantizar la idempotencia.

4

¿Cuál es la principal ventaja de usar events en lugar del dispatch directo de jobs para la comunicación entre servicios?

5

¿En qué contexto se debe usar ShouldBeEncrypted para los queued jobs?

+19 preguntas de entrevista

Domina Laravel para tu próxima entrevista

Accede a todas las preguntas, flashcards, tests técnicos, ejercicios de code review y simuladores de entrevista.

Empieza gratis