Laravel

Laravel Distributed Systems

Comunicazione basata su queue, events, outbox pattern, idempotenza, retries, circuit breaker, contratti API, versioning, fondamenti di Saga

22 domande da colloquio·
Senior
1

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.

2

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.

3

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.

4

Qual è il vantaggio principale dell'uso degli events invece del dispatch diretto dei jobs per la comunicazione tra servizi?

5

In quale contesto si dovrebbe usare ShouldBeEncrypted per i queued jobs?

+19 domande da colloquio

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