CHƯƠNG 06 · Docker Compose thực chiến•BÀI 22 / 80

Nginx, API, PostgreSQL, Redis và Worker

Phân chia đúng trách nhiệm request/response và background jobs.

Ứng dụng◷ 4 phút đọc2/4 trong chương

Nắm bản chất

Trong stack Buổi 6, Nginx phục vụ frontend và reverse proxy /api, API xác thực input và giao việc, PostgreSQL lưu dữ liệu, Redis làm queue, Worker xử lý không đồng bộ. Mỗi thành phần nên có health/readiness semantics riêng.

Đừng nhầm HTTP 202 Accepted với job completed. API trả 202 khi tiếp nhận công việc theo contract; client phải poll status hoặc dùng notification để biết kết quả. Các worker cần graceful termination và lỗi được retry theo cách tránh trùng tác dụng phụ.

Luồng hoạt động

Browser→Nginx→API→Queue→Worker

Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?

Lệnh & cấu hình mẫu

docker compose ps
docker compose logs -f api worker
docker compose exec db psql -U app -d appdb -c 'SELECT now();'
curl -f http://127.0.0.1:8088/api/health/live

Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.

Bài tập 10–20 phút

✳

Tạo một job từ web Buổi 6, theo dõi cùng lúc API và Worker logs. Ghi lại lúc job được chấp nhận và lúc job hoàn thành; đừng chỉ đo HTTP response.

Lỗi dễ mắc

!

Redis BRPOP một mình không phải durable queue: message có thể bị mất khi consumer crash sau pop. Các buổi sau chuyển sang Redis Streams và Transactional Outbox.

Tự kiểm tra

Vì sao API nên dùng queue cho công việc mất nhiều giây?Xem đáp án ↗

Để tách lifecycle HTTP request khỏi công việc nền, giới hạn latency request và điều phối tải.

TÀI NGUYÊN ĐI KÈM

Học thêm qua lab

Có project thực hành đúng với chương này, kèm README và những giới hạn môi trường cần lưu ý.

↓ Tải mã nguồn thực hành chương 06
NGUỒN CHÍNH THỨC

Đối chiếu tài liệu gốc

Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.

Mở tài liệu chính thức ↗