Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

Redis Pub/Sub: สร้างระบบขยายได้ด้วยรูปแบบ Publish/Subscribe

รูปแบบ 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 ได้ดี ควรพิจารณาความต้องโครงการก่อนนำไปใช้