ระบบ Scheduler สำหรับ Web App ที่มี Job ซับซ้อน

ในระบบ Web Application ที่ต้องทำงานตามเวลาหรือประมวลผลงานแบบเบื้องหลัง (Background Job) อย่างซับซ้อน การมี “Scheduler ที่ดี” คือหัวใจสำคัญที่ทำให้ระบบทำงานอัตโนมัติอย่างมีประสิทธิภาพและตรวจสอบได้

ระบบ Scheduler คืออะไร?

Scheduler คือกลไกที่ใช้จัดการ “งานตามเวลาที่กำหนด” (Scheduled Tasks) หรือ “งานแบบประมวลผลแยกเบื้องหลัง” (Background Jobs) เช่น

  • ส่งอีเมลอัตโนมัติทุกเช้า
  • ประมวลผลข้อมูลทุกชั่วโมง
  • ลบข้อมูลชั่วคราวทุกวันอาทิตย์
  • ประมวลผล queue จากผู้ใช้งานเป็น batch

ตัวอย่างเครื่องมือ Scheduler ยอดนิยม

1. CronJob

  • เครื่องมือระดับระบบปฏิบัติการ ใช้กันอย่างแพร่หลาย
  • เหมาะสำหรับงานที่ “ทำซ้ำเป็นเวลาแน่นอน” เช่น 0 0 * * * (ทุกเที่ยงคืน)
  • ใช้ได้ทั้งใน Linux, Docker, Kubernetes

เหมาะกับงานง่าย ๆ เช่น “ลบ cache ทุกวัน”

2. Queue-Based Scheduler

ใช้สำหรับงานที่ต้องจัดลำดับก่อนหลัง รองรับจำนวนมาก และต้องตรวจสอบสถานะได้

📦 BullMQ (สำหรับ Node.js + Redis)

  • รัน job แบบ queue ด้วย Redis
  • รองรับ retry, priority, job concurrency, repeatable job
  • มี Dashboard UI (เช่น Arena, Bull Board)

📦 Agenda.js (Node.js + MongoDB)

  • รัน job ตามเวลา + แบบ recurring
  • มี API ใช้ง่าย เหมาะกับ Web App ที่ใช้ MongoDB

รูปแบบการทำงาน (Schedule Task Flow)

mermaid
graph TD
A[ผู้ใช้กดปุ่ม หรือ ระบบตั้งเวลา] --> B{เป็น CronJob หรือไม่?}
B -- ใช่ --> C[เพิ่ม Job ไปยัง Cron Scheduler]
B -- ไม่ใช่ --> D[เพิ่ม Job เข้า Queue]
D --> E[Worker ดึง Job จาก Queue]
E --> F[ประมวลผลงาน เช่น ส่งอีเมล, อัปเดตฐานข้อมูล]
F --> G[เก็บสถานะสำเร็จ/ล้มเหลว]

ตัวอย่างกรณีใช้งานจริง

กรณีแนวทาง
ส่งอีเมลแจ้งเตือนทุกวันเวลา 08.00ใช้ CronJob หรือ Agenda.js
ประมวลผลคำสั่งซื้อหลังลูกค้าชำระเงินใช้ BullMQ Queue
ลบรายการหมดอายุทุก 1 ชั่วโมงใช้ CronJob + Worker
ประมวลผลอัตโนมัติแบบ async 1,000 รายการใช้ BullMQ + Concurrency

สรุป

ไม่ว่าจะเป็น Web App ขนาดเล็กหรือ SaaS ขนาดใหญ่ การมีระบบ Scheduler ที่ยืดหยุ่นและตรวจสอบได้ ช่วยให้คุณลดภาระงานซ้ำซ้อน เพิ่มความแม่นยำ และพร้อมรองรับงานในอนาคต

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top