RabbitMQ คืออะไร และวิธีติดตั้งบน Cloud Server
RabbitMQ คือ Message Broker ที่รับงานจากระบบหนึ่งไปพักไว้ในคิว แล้วส่งให้ผู้ทำงานเบื้องหลังประมวลผลทีละรายการ ช่วยให้เว็บตอบผู้ใช้ได้ทันทีโดยไม่ต้องรองานที่ใช้เวลานาน
- หมวดหมู่
- DevOps และ CI/CD
- ติดตั้งบนเซิร์ฟเวอร์เองได้
- ได้
- สเปกเริ่มต้นที่แนะนำ
- 1 vCPU · RAM 2 GB
- ไลเซนส์
- MPL 2.0 (โอเพนซอร์ส)
- เว็บทางการ
- เปิดเว็บไซต์
- ISO/IEC 27001
- ISO 22301
- ISO 20000-1
- CSA-STAR
Data Center ในไทย มาตรฐาน TIA-942 Tier 3+ ข้อมูลอยู่ในประเทศไทย
RabbitMQ คืออะไร
เมื่อผู้ใช้กดปุ่มที่ทำให้ระบบต้องส่งอีเมล สร้างรายงาน หรือประมวลผลรูป การทำงานเหล่านั้นทันทีจะทำให้หน้าเว็บค้าง ทางออกคือส่งงานเข้าคิวแล้วตอบผู้ใช้ก่อน จากนั้นให้ผู้ทำงานเบื้องหลังค่อยจัดการ
RabbitMQ ทำหน้าที่เป็นคนกลางที่รับประกันว่างานจะไม่หายแม้ผู้ทำงานล่ม พร้อมกลไกกระจายงานไปยังผู้ทำงานหลายตัว การลองใหม่เมื่อล้มเหลว และคิวสำหรับงานที่ประมวลผลไม่สำเร็จ
จุดที่ทำให้ RabbitMQ เป็นตัวเลือกแรกของหลายทีมคือความเรียบง่าย ติดตั้งแล้วใช้งานได้เลย มีหน้าเว็บจัดการที่เห็นสถานะคิวชัดเจน และไลบรารีรองรับทุกภาษาโปรแกรมหลัก
ความสามารถเด่นของ RabbitMQ
รับประกันว่างานไม่หาย
บันทึกข้อความลงดิสก์และยืนยันเมื่อผู้ทำงานประมวลผลเสร็จ
กระจายงานอัตโนมัติ
เพิ่มจำนวนผู้ทำงานแล้วงานจะถูกแบ่งให้เองตามความว่าง
หน้าเว็บจัดการ
เห็นจำนวนงานค้าง อัตราการประมวลผล และสถานะการเชื่อมต่อได้ทันที
รูปแบบการส่งหลายแบบ
ทั้งแบบตรง แบบกระจาย และแบบตามหัวข้อ ครอบคลุมรูปแบบการทำงานส่วนใหญ่
ทำคลัสเตอร์ได้
รวมหลายโหนดเพื่อความพร้อมใช้งานสูงเมื่อระบบสำคัญพึ่งพาคิว
ใช้ RabbitMQ ทำอะไรได้บ้าง
- ส่งอีเมลและการแจ้งเตือนเบื้องหลังของเว็บ
- ประมวลผลรูปภาพ วิดีโอ หรือไฟล์ที่อัปโหลดเข้ามา
- กระจายงานหนักไปยังเครื่องประมวลผลหลายเครื่อง
- เชื่อมระบบภายในองค์กรที่ต้องส่งงานต่อกันเป็นทอด
สเปก Cloud Server ที่แนะนำ
| ระดับการใช้งาน | vCPU | RAM | Disk |
|---|---|---|---|
| เริ่มต้นคิวงานของเว็บเดียว | 1 vCPU | 2 GB | NVMe 20 GB |
| แนะนำระบบงานจริงที่มีงานเบื้องหลังต่อเนื่อง | 2 vCPU | 4 GB | NVMe 60 GB |
| ระบบใหญ่คลัสเตอร์สามโหนดสำหรับระบบที่คิวห้ามล่ม | 4 vCPU ขึ้นไป | 8 GB ขึ้นไป | NVMe 120 GB ขึ้นไป |
ดูราคาตามสเปกได้ที่ ราคา Cloud Compute หรือให้ทีมงานช่วยประเมินสเปกจากปริมาณผู้ใช้จริงของคุณ
วิธีติดตั้ง RabbitMQ บน Cloud Server ของ THAI DATA CLOUD
ขั้นตอนด้านล่างใช้กับ Cloud Server ที่เพิ่งสร้างใหม่จากหน้าจัดการของ THAI DATA CLOUD ได้ทันที ถ้าไม่สะดวกทำเอง ทีมวิศวกรของเราติดตั้งและตั้งค่าให้ฟรีสำหรับลูกค้า Cloud Server
สิ่งที่ต้องเตรียม
- Ubuntu Server 24.04 LTS หรือ Rocky Linux 9
- Erlang เวอร์ชันที่ตรงกับรุ่นของ RabbitMQ (ที่เก็บแพ็กเกจทางการจัดการให้)
- RAM เผื่อสำหรับคิวที่อาจค้างเมื่อผู้ทำงานหยุด
ทดสอบบน Ubuntu Server 24.04 LTS
- 1
ติดตั้ง RabbitMQ
sudo apt update sudo apt -y install rabbitmq-server sudo systemctl enable --now rabbitmq-server - 2
เปิดหน้าเว็บจัดการ
sudo rabbitmq-plugins enable rabbitmq_management - 3
สร้างผู้ใช้ผู้ดูแลและลบผู้ใช้เริ่มต้น
ผู้ใช้ guest ที่มากับระบบเข้าได้จากเครื่องเดียวกันเท่านั้น แต่ควรลบทิ้งเพื่อความปลอดภัย
sudo rabbitmqctl add_user admin ChangeThisStrongPassword sudo rabbitmqctl set_user_tags admin administrator sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" sudo rabbitmqctl delete_user guest - 4
สร้างผู้ใช้และ Virtual Host สำหรับแอป
sudo rabbitmqctl add_vhost app sudo rabbitmqctl add_user appuser ChangeThisAppPassword sudo rabbitmqctl set_permissions -p app appuser ".*" ".*" ".*" - 5
ตั้งค่าฝั่งแอป
ตัวอย่างการตั้งค่าสำหรับ Laravel ให้ใช้ RabbitMQ เป็นคิวงาน แอปภาษาอื่นใช้แนวทางเดียวกันผ่านไลบรารี AMQP
QUEUE_CONNECTION=rabbitmq RABBITMQ_HOST=10.10.0.25 RABBITMQ_PORT=5672 RABBITMQ_VHOST=app RABBITMQ_LOGIN=appuser RABBITMQ_PASSWORD=ChangeThisAppPassword
ตั้งการแจ้งเตือนเมื่อจำนวนงานค้างในคิวสูงผิดปกติ เพราะนั่นคือสัญญาณว่าผู้ทำงานเบื้องหลังหยุดทำงานหรือมีงานที่ประมวลผลไม่สำเร็จวนซ้ำ
พอร์ตที่ต้องเปิดบน Firewall
| พอร์ต | โปรโตคอล | ใช้ทำอะไร |
|---|---|---|
| 5672 | TCP | โปรโตคอล AMQP สำหรับแอป (เปิดเฉพาะวงภายใน) |
| 15672 | TCP | หน้าเว็บจัดการ (ควรเข้าผ่าน VPN หรือจำกัดไอพี) |
สิ่งที่ควรทำต่อหลังติดตั้งเสร็จ
- ลบผู้ใช้ guest และสร้างผู้ใช้แยกต่อแอปพร้อมสิทธิ์เฉพาะ Virtual Host ของตัวเอง
- ไม่เปิดพอร์ต 5672 และ 15672 สู่อินเทอร์เน็ต
- เปิด TLS เมื่อแอปกับ RabbitMQ อยู่คนละเครื่อง
- ตั้งขีดจำกัดหน่วยความจำและดิสก์เพื่อให้ระบบชะลอการรับข้อความก่อนที่เครื่องจะเต็ม
- ตั้งคิวสำหรับงานที่ล้มเหลวเพื่อไม่ให้งานเสียวนซ้ำจนระบบตัน
ทำไมควรรัน RabbitMQ บน Cloud Server ของ THAI DATA CLOUD
Data Center ในประเทศไทย มาตรฐาน ISO/IEC 27001 และ ISO 22301 พร้อมทีมวิศวกรคนไทยดูแลตลอด 24 ชั่วโมง
รันบน Cloud Server เครื่องเล็กก็เพียงพอสำหรับเว็บส่วนใหญ่ จึงเพิ่มความสามารถให้ระบบด้วยต้นทุนต่ำ
แยกเครื่องผู้ทำงานเบื้องหลังออกจากเว็บ แล้วเชื่อมผ่าน Private Network ในไทย ทำให้เว็บตอบสนองเร็วขึ้นชัดเจน
เพิ่มเครื่องผู้ทำงานชั่วคราวช่วงที่มีงานค้างมาก แล้วลบทิ้งเมื่อเคลียร์หมด
คำถามที่พบบ่อยเกี่ยวกับ RabbitMQ
RabbitMQ กับ Redis ใช้ทำคิวต่างกันอย่างไร
Redis ทำคิวได้และเร็วมาก เหมาะกับงานที่ยอมให้หายได้บ้างและต้องการความเรียบง่าย ส่วน RabbitMQ ออกแบบมาเพื่อการส่งข้อความโดยเฉพาะ มีการยืนยันการประมวลผล การลองใหม่ และคิวงานล้มเหลวที่ครบกว่า
ต้องทำคลัสเตอร์ไหม
ถ้าคิวหยุดแล้วธุรกิจหยุดด้วย ควรทำคลัสเตอร์อย่างน้อยสามโหนด แต่สำหรับเว็บทั่วไปที่งานเบื้องหลังล่าช้าได้ชั่วคราว เครื่องเดียวพร้อมการสำรองข้อมูลก็เพียงพอ
ทำไมงานในคิวค้างเยอะขึ้นเรื่อย ๆ
แปลว่าผู้ทำงานประมวลผลช้ากว่าที่งานเข้ามา ให้เพิ่มจำนวนผู้ทำงาน ปรับให้ประมวลผลเร็วขึ้น หรือตรวจว่ามีงานที่ล้มเหลวแล้ววนกลับเข้าคิวซ้ำหรือไม่
ทางเลือกอื่นที่คล้ายกับ RabbitMQ
แอปอื่นในหมวด DevOps และ CI/CD
บริการของ THAI DATA CLOUD ที่เกี่ยวข้อง
ให้เราติดตั้ง RabbitMQ ให้ฟรี บน Cloud Server ในไทย
แจ้งความต้องการสั้น ๆ ทีมวิศวกรจะช่วยประเมินสเปก ติดตั้ง และตั้งค่าความปลอดภัยให้พร้อมใช้งาน ปรึกษาฟรี ไม่มีข้อผูกมัด