Task 3-2: Tune GiftAggregationJob fixedDelay
Phase: 3 - Performance Tuning Priority: Low Depends on: task-4-2 Reference: docs/BountyHunter-Backend/details/feature-livestream/SPEC.md
Background
GiftAggregationJob chạy với fixedDelay (default 5000ms). Chưa biết interval này có phù hợp với traffic thực tế không — quá ngắn thì CPU waste khi idle, quá dài thì Firebase counter update bị lag.
Tasks
DI Note:
GiftAggregationJobcần injectRedisCounterService(hoặc tương đương) qua constructor injection (@RequiredArgsConstructor+finalfield). Nếu có thêmMeterRegistrycho metrics, cũng inject tương tự. Config value dùng@Value("${jobs.gift-aggregation.fixed-delay:5000}").
- [ ] Thu thập từ metrics (task-4-2): average số streamers processed per run, average batch size
- [ ] Nếu average = 0-5 streamers per run → interval hiện tại quá ngắn, tăng lên 10-15s
-
[ ] Nếu average > 100 streamers per run → interval có thể giảm để giảm backlog
-
[ ] Externalize interval (không hardcode trong annotation):
# application-common.yaml (batch module) jobs: gift-aggregation: fixed-delay: 5000 # ms, tunable per environment// GiftAggregationJob.java @Scheduled(fixedDelayString = "${jobs.gift-aggregation.fixed-delay:5000}") public void processAggregatedGifts() { ... } -
[ ] Verify
fixedDelaybehavior: job N+1 chỉ start sau khi job N hoàn thành + delay (không overlap) — khác vớifixedRate -
[ ] Xem xét dynamic delay: nếu batch size = 0 → skip Redis scan để giảm overhead:
// Nếu không có keys → next delay tăng lên (exponential backoff khi idle) // Implement bằng cách track consecutive empty runs: // emptyRunCount++; nếu > threshold → log và continue (Redis scan đã rẻ)
Verification / Acceptance Criteria
- [ ]
jobs.gift-aggregation.fixed-delayxuất hiện trongapplication-common.yaml - [ ]
GiftAggregationJobdùng@Scheduled(fixedDelayString = "${jobs.gift-aggregation.fixed-delay:5000}")thay vì hardcoded value - [ ] Thay đổi config value trong YAML → job interval thay đổi mà không cần rebuild
- [ ]
fixedDelay(không phảifixedRate) → verify bằng cách slow down 1 run và đảm bảo next run không chạy overlap - [ ] Interval mới được document với lý do chọn (dựa trên metrics từ task-4-2)
Files to Modify
batch/job/gift_aggregation/GiftAggregationJob.javabatch/src/main/resources/application-common.yaml