Microservices là công cụ scale, không phải kiến trúc mặc định. Chúng tôi tách app NestJS khi team, nhịp deploy hoặc failure domain thực sự khác nhau — không phải vì sơ đồ trông gọn hơn.
Queue Bull dùng Redis xử lý tác vụ async không nên chặn HTTP response: email, webhook, sinh báo cáo. Mỗi worker có container riêng với memory giới hạn để poison job không thể kéo sập tầng API.
Contract dùng chung nằm trong package versioned — DTO, event schema và OpenAPI stub — để service không lệch im lặng giữa các repo.
Layout Docker Compose tách API, worker và Redis với health check rõ ràng. Deploy vẫn nhàm chán — và đó chính là mục tiêu.
Khi sự cố xảy ra, bounded context với ownership rõ ràng rút ngắn mean time to resolution hiệu quả hơn bất kỳ dashboard orchestration nào.
