B12 · 背景任務與 Queue 詳細 ROADMAP

計畫文件,不會被 Quartz 渲染。 回主 roadmap → backend/ROADMAP.md


章節目標

Queue 是後端從同步走向非同步的轉折。本章涵蓋:Queue 基礎概念、Worker Pool、Job Queue(Celery / BullMQ / Sidekiq)、Scheduled Jobs、Message Broker(Kafka / RabbitMQ / NATS / Redis Streams)、重試 / 死信 / Idempotency。Proto 用 RabbitMQ + EventBus 抽象,素材豐富。


🌱 基本介紹

#主題SlugStage大綱
01Queue 是什麼01-what-is-queue🌱解耦 producer / consumer、削峰填谷、容錯

❓ 為什麼需要

#主題SlugStage大綱
02為什麼不直接 async / background thread02-why-not-just-async🌱跨 process / 跨機器、持久化(thread 斷掉工作沒了)、重試、觀察性
03為什麼 Queue cold start 是陷阱⛔️ micro-service/27-queue-redis-coldstart🌿跨系列

🕰️ 演進

#主題SlugStage大綱
04Message Queue 演進04-mq-evolution🌱ActiveMQ / JMS → RabbitMQ(2007)→ Kafka(2011)→ Redis Streams(2017)→ NATS JetStream
05Job Queue 演進05-job-queue-evolution🌱Resque(Ruby)→ Sidekiq / Celery / BullMQ / Asynq / Inngest / Temporal(workflow 化)

🧠 知識型

F12-A Queue 基礎

#主題SlugStage大綱
06Queue 核心概念06-queue-core-concepts🌱Producer / Consumer / Broker / Topic / Queue / Partition / Consumer Group
07Worker Pool 實作07-worker-pool-impl🌱從零實作 worker pool(多語言)、back-pressure
08Push vs Pull Model08-push-vs-pull🌱RabbitMQ push / Kafka pull;consumer lag 可觀察性

F12-B Message Broker

#主題SlugStage大綱
09RabbitMQ 深入09-rabbitmq-deep🌱Exchange(direct / topic / fanout / headers)/ Queue / Binding / routing key;proto 實際使用
10Kafka 深入10-kafka-deep🌱Topic / Partition / Offset / Consumer Group;log-based 心智模型
11NATS / JetStream11-nats-jetstream🌱輕量 pub/sub、JetStream 加持久化
12Redis Streams12-redis-streams🌱Consumer group、XADD / XREAD / XACK;適合中小規模
13RabbitMQ vs Kafka vs NATS 選型13-broker-selection🌱各自強項、migration 難度、運維成本
14Event-driven 基礎 / 陷阱⛔️ micro-service/35-event-driven-basics / 36-event-driven-pitfalls🌿跨系列
15Event-driven Queue 實戰⛔️ infra/22-event-driven-queue🌿跨系列

F12-C Job Queue(應用層)

#主題SlugStage大綱
16Celery 深入(Python)16-celery-deep🌱Worker / Beat / Flower、broker 選擇(Redis / RabbitMQ)、chain / group / chord
17BullMQ 深入(Node.js)17-bullmq-deep🌱Job / Queue / Worker / Scheduler、Redis-based、priority
18Sidekiq(Ruby)/ Asynq(Go)18-sidekiq-asynq🌱各語言生態代表、設計相似度
19Temporal / Inngest(Workflow 化)19-workflow-platforms🌱狀態機 + queue 合體、multi-step flow、跟傳統 job queue trade-off

F12-D 可靠性模式

#主題SlugStage大綱
20重試策略20-retry-strategy🌱Exponential backoff、jitter、max retries;什麼時候該放棄
21Dead Letter Queue21-dlq🌱失敗 N 次後轉 DLQ、人工介入、alert
22Idempotency22-idempotency-queue🌱Consumer 重複收到訊息的保護、idempotency key 儲存
23Outbox Pattern23-outbox-pattern🌱DB 交易 + MQ 的一致性;跟 B08 #19 重疊
24At-most-once / At-least-once / Exactly-once24-delivery-semantics🌱實際意義、Kafka 的 “exactly-once” 是什麼

F12-E Scheduled / Cron

#主題SlugStage大綱
25Scheduled Jobs 設計25-scheduled-jobs🌱Cron vs Interval、distributed lock 避免重複執行、K8s CronJob
26分散式排程26-distributed-scheduling🌱Leader election、Temporal / dkron / Airflow
26-2Batch Job 極限處理(巨量資料)26-2-batch-job-limits🌱一天跑 1 億筆結算 / 月報 / 對帳;應用層 batch vs Spark / Flink 邊界;memory / timeout / partial failure recovery;分片 + checkpoint 策略;跟 B14 08-2 / B03 33-2 連動

🔧 小實作注意事項

#主題SlugStage大綱
27從零實作 Job Queue(Redis-based)27-diy-job-queue🌱用 Redis 做簡易 job queue、理解 Sidekiq / BullMQ 做什麼
28設計一個 Event Bus(proto 對照)28-design-event-bus🌱抽象層讓底層可換;proto messaging/bus.py 案例
29Outbox pattern 實戰29-outbox-impl🌱DB 交易 + 背景 worker 消費 outbox 送 MQ

💣 Anti-pattern

#主題SlugStage大綱
30Queue Anti-patterns30-queue-antipatterns🌱Consumer 沒做 idempotent、DLQ 沒監控(訊息默默堆積)、retry 沒 backoff(雷擊風暴)、把 MQ 當 DB 用(不持久化 + 長 retention)、用 fire-and-forget 但沒監控 lag

🧰 對應檢查工具

#主題SlugStage大綱
31Queue 相關工具31-queue-tooling🌱RabbitMQ Management UI、Kafka UI(AKHQ / Kafdrop)、Flower(Celery)、Bull Board(BullMQ)、queue lag dashboard

📎 補充

#主題SlugStage大綱
S01Event Sourcing 初探s01-event-sourcing🌱事件當真相來源、重放建 state;Kafka 天生合適
S02CDC(Change Data Capture)s02-cdc🌱Debezium、從 DB 抓變更送 Kafka;跟 Outbox 比較
S03Email Infra(SendGrid / SES / Resend / Postmark)s03-email-infra🌱選型 / deliverability / bounce 處理 / template 管理;透過 Queue 發送避免阻塞
S04Push Notification Infras04-push-notification🌱APNs(iOS)/ FCM(Android)/ Web Push;device token 管理;跟 Queue 整合(批次推送)
S05Notification Service 設計s05-notification-service🌱統一 email / SMS / push / in-app 的通知服務;template engine、channel routing、user preference
S06i18n 後端處理s06-backend-i18n🌱文字 / 日期 / 貨幣 / 時區;多語 content 儲存(DB column vs 分表);locale 來源(header / user pref / URL)

章節進度統計

  • 知識主題:31 + 2 補充 = 33 項
  • 🌿 growing:3(跨系列)
  • 🌱 seed:30

跨系列連結

  • micro-service/27、35–36(cold start、event-driven)
  • infra/22-event-driven-queue
  • backend/conventions/ B07 #13–16 messaging
  • backend/architecture/ B08 #13 #19(Event-driven / Outbox)
  • backend/observability/ B17(Queue metrics)