
Laravel Distributed Systems
Comunicação baseada em queue, events, outbox pattern, idempotência, retries, circuit breaker, contratos de API, versionamento, fundamentos de Saga
1O que é o outbox pattern em sistemas distribuídos do Laravel?
O que é o outbox pattern em sistemas distribuídos do Laravel?
Resposta
O outbox pattern armazena os messages/events em uma tabela da database durante a mesma transação que os dados de negócio e, em seguida, os envia de forma assíncrona em um processo separado. Isso garante que os messages sejam sempre enviados mesmo que o sistema caia após o commit da DB. O ShouldQueueAfterCommit do Laravel é uma implementação parcial desse pattern, pois despacha o job somente após o commit da transação, evitando race conditions em que o job é executado antes de os dados estarem disponíveis.
2Qual é a principal diferença entre ShouldQueue e ShouldQueueAfterCommit?
Qual é a principal diferença entre ShouldQueue e ShouldQueueAfterCommit?
Resposta
ShouldQueue despacha o job imediatamente para a queue, mesmo que a transação DB ainda não tenha sido commitada, o que pode causar race conditions. ShouldQueueAfterCommit espera que todas as transações DB sejam commitadas antes de despachar o job, garantindo que os dados estejam disponíveis quando o job é executado. Use ShouldQueueAfterCommit para jobs que dependem de dados recém-criados ou modificados em uma transação, por exemplo um job de envio de email após a criação de um pedido.
3O que é idempotência no contexto de sistemas distribuídos do Laravel?
O que é idempotência no contexto de sistemas distribuídos do Laravel?
Resposta
A idempotência significa que uma operação pode ser executada várias vezes sem alterar o resultado além da primeira execução. No Laravel, isso evita efeitos colaterais indesejados durante os retries de jobs ou messages duplicados. Por exemplo, um job idempotente de criação de pedido verifica se o pedido já existe antes de criá-lo, evitando duplicatas se o job for retentado após um timeout. Use ShouldBeUnique, WithoutOverlapping ou deduplicationId para garantir a idempotência.
Qual é a principal vantagem de usar events em vez do dispatch direto de jobs para a comunicação entre serviços?
Em qual contexto ShouldBeEncrypted deve ser usado para queued jobs?
+19 perguntas de entrevista
Outros temas de entrevista Laravel
Fundamentos de PHP
Fundamentos de POO em PHP
Composer & Autoloading
Fundamentos do Laravel
Routing do Laravel
Blade Templates
Request & Response
Fundamentos do Eloquent ORM
Eloquent Relationships
Migrations & Schema Builder
Validação e formulários
Autenticação
Autorização e Policies
API Resources & Authentication
Middleware
Service Container & DI
Queues & Jobs
Events & Listeners
Notificações & 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
Domine Laravel para sua proxima entrevista
Acesse todas as perguntas, flashcards, testes tecnicos, exercicios de code review e simuladores de entrevista.
Comece gratis