
Laravel Distributed Systems
Comunicación basada en queue, events, outbox pattern, idempotencia, retries, circuit breaker, contratos de API, versionado, fundamentos de Saga
1¿Qué es el outbox pattern en los sistemas distribuidos de Laravel?
¿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?
¿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?
¿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.
¿Cuál es la principal ventaja de usar events en lugar del dispatch directo de jobs para la comunicación entre servicios?
¿En qué contexto se debe usar ShouldBeEncrypted para los queued jobs?
+19 preguntas de entrevista
Otros temas de entrevista Laravel
Fundamentos de PHP
Fundamentos de POO en PHP
Composer & Autoloading
Fundamentos de Laravel
Routing de Laravel
Blade Templates
Request & Response
Fundamentos de Eloquent ORM
Eloquent Relationships
Migrations & Schema Builder
Validación y formularios
Autenticación
Autorización y Policies
API Resources & Authentication
Middleware
Service Container & DI
Queues & Jobs
Events & Listeners
Notificaciones & Mail
File Storage
Testing & PHPUnit
Caching
Livewire & Inertia
Eloquent Advanced
Repository Pattern
Laravel Packages
Performance Optimization
Security Best Practices
Laravel Octane
Observability & Monitoring
Deployment & DevOps
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