
Laravel Distributed Systems
Giao tiếp dựa trên queue, events, outbox pattern, tính idempotency, retries, circuit breaker, hợp đồng API, versioning, kiến thức cơ bản về Saga
1Outbox pattern trong các hệ thống phân tán Laravel là gì?
Outbox pattern trong các hệ thống phân tán Laravel là gì?
Câu trả lời
outbox pattern lưu trữ messages/events vào một bảng database trong cùng transaction với dữ liệu nghiệp vụ, sau đó gửi chúng một cách bất đồng bộ trong một tiến trình riêng. Điều này đảm bảo messages luôn được gửi ngay cả khi hệ thống crash sau khi commit DB. ShouldQueueAfterCommit của Laravel là một triển khai một phần của pattern này, vì nó chỉ dispatch job sau khi transaction được commit, tránh các race condition khi job thực thi trước khi dữ liệu sẵn sàng.
2Sự khác biệt chính giữa ShouldQueue và ShouldQueueAfterCommit là gì?
Sự khác biệt chính giữa ShouldQueue và ShouldQueueAfterCommit là gì?
Câu trả lời
ShouldQueue dispatch job ngay lập tức vào queue, ngay cả khi transaction DB chưa được commit, điều này có thể gây ra race condition. ShouldQueueAfterCommit chờ tất cả transaction DB được commit trước khi dispatch job, đảm bảo dữ liệu sẵn sàng khi job thực thi. Sử dụng ShouldQueueAfterCommit cho các job phụ thuộc vào dữ liệu vừa được tạo hoặc sửa đổi trong một transaction, ví dụ job gửi email sau khi tạo đơn hàng.
3Tính idempotency trong bối cảnh các hệ thống phân tán Laravel là gì?
Tính idempotency trong bối cảnh các hệ thống phân tán Laravel là gì?
Câu trả lời
Tính idempotency có nghĩa là một thao tác có thể được thực thi nhiều lần mà không làm thay đổi kết quả ngoài lần thực thi đầu tiên. Trong Laravel, điều này ngăn chặn các tác dụng phụ không mong muốn trong quá trình retries job hoặc messages bị trùng lặp. Ví dụ, một job tạo đơn hàng có tính idempotency sẽ kiểm tra xem đơn hàng đã tồn tại hay chưa trước khi tạo, tránh trùng lặp nếu job được retry sau một timeout. Sử dụng ShouldBeUnique, WithoutOverlapping hoặc deduplicationId để đảm bảo tính idempotency.
Ưu điểm chính của việc sử dụng event thay vì dispatch job trực tiếp cho giao tiếp giữa các service là gì?
Trong bối cảnh nào nên sử dụng ShouldBeEncrypted cho queued job?
+19 câu hỏi phỏng vấn
Các chủ đề phỏng vấn Laravel khác
Cơ bản về PHP
Kiến thức cơ bản về OOP trong PHP
Composer & Autoloading
Kiến thức cơ bản về Laravel
Routing trong Laravel
Blade Templates
Request & Response
Kiến thức cơ bản về Eloquent ORM
Eloquent Relationships
Migrations & Schema Builder
Xác thực và Form
Xác thực
Phân quyền và Policies
API Resources & Authentication
Middleware
Service Container & DI
Queues & Jobs
Events & Listeners
Thông báo & 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
Nắm vững Laravel cho lần phỏng vấn tiếp theo
Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.
Bắt đầu miễn phí