รูปแบบ Publish/Subscribe (Pub/Sub) คืออะไร?
เมื่อสร้างแอปพลิเคชันที่ต้องการการบำรุงรักษาง่าย ขยายระบบได้ (scalable) และประสิทธิภาพสูง รูปแบบ Pub/Sub เป็นตัวเลือกที่ดี แนวคิดง่ายแแรง:
- Publisher (ผู้เผยแพร่): ส่งข้อความไปยัง Channel (ช่องทาง) ไม่สนใจว่าใครจะรับหรือมีผู้รับหรือไม่ เพียง "ยิงและลืม" (fire-and-forget)
- Subscriber (ผู้สมัครรับ): สมัครรับข้อความจากช่องทางที่สนใจ หนึ่ง subscriber สามารถสมัครรับหลายช่องทางได้
ข้อความไม่ถูกเก็บรักษา (non-persistent) — ผู้สมัครรับจะได้รับเฉพาะข้อความที่ส่งหลังจากที่สมัครรับแล้วเท่านั้น
สถาปัตยกรรมนี้ทำให้เกิด low coupling (การผูกมิดน้อย) ระหว่างคอมโพเนนต์ สามารถเปลี่ยนแปลง publisher หรือ subscriber ได้อย่างอิสระโดยไม่กระทบส่วนอื่น
Redis คืออะไร?
Redis เริ่มต้นเป็นแคชในหน่วยความจำ ตัวเลือกแทน Memcached ปัจจุบันกลายเป็นโซลูชันหลายอย่างในหนึ่ง: key-value store, message broker, streaming engine เหมาะสำหรับแอปที่ต้องการความเร็วและคุณสมบัติหลากหลาย
ข้อได้เปรียบ: ชุมชนใหญ่ แหล่งข้อมูลออนไลน์มาก มี tier ฟรี และมี Redis Enterprise Cloud
Redis Pub/Sub ทำงานอย่างไร?
ประกอบด้วย 3 ส่วน: Publishers, Channels, Subscribers ใครสมัครรับช่องทางไหนก็จะได้ข้อความจากช่องทางนั้น ตัวอย่าง:
- 3 Publishers ส่งข้อความไป Channel 1, 2, 3
- Subscriber A สมัครรับทั้ง 3 ช่องทาง → ได้ข้อความทุกช่องทาง
- Subscriber B, C สมัครรับ Channel 2, 3 เท่านั้น → ได้ข้อความจาก Publisher 2, 3
Publisher และ Subscriber แยกจากกันโดยสิ้นเชิง ข้อความไม่ถูกเก็บ — ส่งแล้วลืม ผู้สมัครรับต้องออนไลน์ขณะส่งถึงจะได้รับ
วิธีใช้ Pub/Sub ใน Redis
มี client libraries หลายภาษา Redis แนะนำบางตัว (marked as recommended) บทความนี้ใช้ ioredis (Node.js) สำหรับแอปเดโม
แอปเดโม Redis Pub/Sub
แอปแสดงการทำงานแบบภาพ: มีปุ่ม Publish ข่าวไป 3 ช่องทาง (Weather, Sports, Music) และการ์ด Subscriber คลิกเพื่อสมัครรับช่องทาง ตอน Publish ข่าว จะแสดงบนการ์ดของผู้สมัครรับ
รันแอปเดโมในเครื่อง
# Frontend
cd client && yarn && yarn dev
# Backend
cd server && yarn && yarn start
# Redis (Docker)
docker run -p 6379:6379 redislabs/redismod:preview
สรุป
Pub/Sub เป็นรูปแบบที่เหมาะสำหรับแอป real-time, dashboard, ระบบแสดงข้อมูลไลฟ์ (เช่น จราจร) Redis ทำหน้าที่ message broker ได้ดี ควรพิจารณาความต้องโครงการก่อนนำไปใช้