
Laravel Distributed Systems
Comunicazione basata su queue, events, outbox pattern, idempotenza, retries, circuit breaker, contratti API, versioning, fondamenti di Saga
1Cos'è l'outbox pattern nei sistemi distribuiti Laravel?
Cos'è l'outbox pattern nei sistemi distribuiti Laravel?
Risposta
L'outbox pattern memorizza i messages/events in una tabella della database durante la stessa transazione dei dati di business, per poi inviarli in modo asincrono in un processo separato. Questo garantisce che i messages vengano sempre inviati anche se il sistema va in crash dopo il commit del DB. ShouldQueueAfterCommit di Laravel è un'implementazione parziale di questo pattern, poiché esegue il dispatch del job solo dopo il commit della transazione, evitando le race condition in cui il job viene eseguito prima che i dati siano disponibili.
2Qual è la differenza principale tra ShouldQueue e ShouldQueueAfterCommit?
Qual è la differenza principale tra ShouldQueue e ShouldQueueAfterCommit?
Risposta
ShouldQueue esegue il dispatch del job immediatamente nella queue, anche se la transazione DB non è ancora stata committata, il che può causare race condition. ShouldQueueAfterCommit attende che tutte le transazioni DB siano committate prima di eseguire il dispatch del job, garantendo che i dati siano disponibili quando il job viene eseguito. Usa ShouldQueueAfterCommit per i job che dipendono da dati appena creati o modificati in una transazione, ad esempio un job di invio email dopo la creazione di un ordine.
3Cos'è l'idempotenza nel contesto dei sistemi distribuiti Laravel?
Cos'è l'idempotenza nel contesto dei sistemi distribuiti Laravel?
Risposta
L'idempotenza significa che un'operazione può essere eseguita più volte senza modificare il risultato oltre la prima esecuzione. In Laravel, questo previene effetti collaterali indesiderati durante i retries dei job o i messages duplicati. Ad esempio, un job idempotente di creazione ordine verifica se l'ordine esiste già prima di crearlo, evitando duplicati se il job viene riprovato dopo un timeout. Usa ShouldBeUnique, WithoutOverlapping o deduplicationId per garantire l'idempotenza.
Qual è il vantaggio principale dell'uso degli events invece del dispatch diretto dei jobs per la comunicazione tra servizi?
In quale contesto si dovrebbe usare ShouldBeEncrypted per i queued jobs?
+19 domande da colloquio
Altri argomenti di colloquio Laravel
Fondamenti di PHP
Fondamenti di OOP in PHP
Composer & Autoloading
Fondamenti di Laravel
Routing di Laravel
Blade Templates
Request & Response
Fondamenti di Eloquent ORM
Eloquent Relationships
Migrations & Schema Builder
Validazione e moduli
Autenticazione
Autorizzazione e Policies
API Resources & Authentication
Middleware
Service Container & DI
Queues & Jobs
Events & Listeners
Notifiche & 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
Padroneggia Laravel per il tuo prossimo colloquio
Accedi a tutte le domande, flashcards, test tecnici, esercizi di code review e simulatori di colloquio.
Inizia gratis