
Laravel Distributed Systems
Комунікація на основі queue, events, outbox pattern, ідемпотентність, retries, circuit breaker, контракти API, версіонування, основи Saga
1Що таке outbox pattern у розподілених системах Laravel?
Що таке outbox pattern у розподілених системах Laravel?
Відповідь
outbox pattern зберігає messages/events у таблиці database в межах тієї самої транзакції, що й бізнес-дані, а потім надсилає їх асинхронно в окремому процесі. Це гарантує, що messages завжди будуть надіслані, навіть якщо система впаде після commit DB. ShouldQueueAfterCommit у Laravel є частковою реалізацією цього pattern, оскільки він dispatch job лише після commit транзакції, уникаючи race condition, коли job виконується до того, як дані стануть доступними.
2Яка основна різниця між ShouldQueue та ShouldQueueAfterCommit?
Яка основна різниця між ShouldQueue та ShouldQueueAfterCommit?
Відповідь
ShouldQueue dispatch job одразу в queue, навіть якщо транзакція DB ще не закомічена, що може спричинити race condition. ShouldQueueAfterCommit чекає, поки всі транзакції DB будуть закомічені, перш ніж dispatch job, гарантуючи, що дані доступні під час виконання job. Використовуйте ShouldQueueAfterCommit для job, які залежать від щойно створених або змінених у транзакції даних, наприклад job надсилання email після створення замовлення.
3Що таке ідемпотентність у контексті розподілених систем Laravel?
Що таке ідемпотентність у контексті розподілених систем Laravel?
Відповідь
Ідемпотентність означає, що операцію можна виконувати кілька разів без зміни результату після першого виконання. У Laravel це запобігає небажаним побічним ефектам під час retries job або дубльованих messages. Наприклад, ідемпотентний job створення замовлення перевіряє, чи замовлення вже існує, перш ніж створити його, уникаючи дублікатів, якщо job повторюється після timeout. Використовуйте ShouldBeUnique, WithoutOverlapping або deduplicationId, щоб забезпечити ідемпотентність.
Яка основна перевага використання events замість прямого dispatch jobs для комунікації між сервісами?
У якому контексті слід використовувати ShouldBeEncrypted для queued jobs?
+19 питань зі співбесід
Інші теми співбесід Laravel
Основи PHP
Основи ООП у PHP
Composer & Autoloading
Основи Laravel
Маршрутизація в Laravel
Blade Templates
Request & Response
Основи Eloquent ORM
Eloquent Relationships
Migrations & Schema Builder
Валідація та форми
Автентифікація
Авторизація та Policies
API Resources & Authentication
Middleware
Service Container & DI
Queues & Jobs
Events & Listeners
Сповіщення та 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
Опануй Laravel для наступної співбесіди
Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.
Почни безкоштовно