1、สถานการณ์การใช้งาน
1.RabbitMQ:
เหมาะสำหรับกรณีที่ต้องการความสะดวกในการใช้งานและความยืดหยุ่นสูง
การประมวลผลงานแบบอะซิงโครนัส:RabbitMQ มีกลไกส่งข้อความที่เชื่อถือได้ เหมาะสำหรับจัดการงานแบบอะซิงโครนัส เช่น นำงานที่ใช้เวลานานใส่ในคิวข้อความ แล้วให้ผู้บริโภคข้อความประมวลผลแบบอะซิงโครนัส เพื่อเพิ่มความเร็วในการตอบสนองและความสามารถในการขยายระบบ
ลดการผูกติดระหว่างส่วนประกอบของระบบ:เมื่อใช้ RabbitMQ เป็นมิดเดิลแวร์รับส่งข้อความ ส่วนประกอบต่าง ๆ ของระบบสามารถสื่อสารผ่านข้อความเพื่อลดการผูกติดกัน ทำให้ได้สถาปัตยกรรมที่เชื่อมโยงกันอย่างหลวม ๆ และเพิ่มความสะดวกในการบำรุงรักษารวมถึงความยืดหยุ่นของระบบ。
สถาปัตยกรรมขับเคลื่อนด้วยเหตุการณ์:รูปแบบเผยแพร่-สมัครรับของ RabbitMQ ใช้สร้างสถาปัตยกรรมขับเคลื่อนด้วยเหตุการณ์ได้ โดยเผยแพร่เหตุการณ์ในระบบเป็นข้อความไปยังหัวข้อที่เกี่ยวข้อง ผู้บริโภคแต่ละรายสามารถสมัครรับหัวข้อที่สนใจเพื่อดำเนินการตามนั้น
2.RocketMQ:
เหมาะสำหรับสถานการณ์ที่ต้องประมวลผลข้อมูลขนาดใหญ่และต้องการอัตราการรับส่งข้อมูลสูง
ธุรกรรมแบบกระจาย:RocketMQ รองรับข้อความธุรกรรมแบบกระจาย เหมาะกับสถานการณ์ธุรกรรมแบบกระจายที่เกี่ยวข้องกับระบบธุรกิจหลายระบบ ช่วยให้ข้อความมีความสอดคล้องและเชื่อถือได้ พร้อมทั้งให้ความสามารถในการส่งข้อความด้วยอัตรารับส่งสูง。
การประมวลผลบันทึกแบบเรียลไทม์:เนื่องจาก RocketMQ มีอัตราการรับส่งข้อมูลสูงและความหน่วงต่ำ จึงใช้ประมวลผลบันทึกแบบเรียลไทม์ได้ เช่น การรวบรวมและวิเคราะห์บันทึก การรวมบันทึก และสถานการณ์อื่น ๆ
การประมวลผลสตรีม:RocketMQ รองรับรูปแบบการประมวลผลสตรีม โดยสามารถส่งสตรีมข้อมูลที่สร้างขึ้นผ่านคิวข้อความไปยังเฟรมเวิร์กประมวลผลสตรีม(เช่น Flink、Spark Streaming)เพื่อประมวลผลและวิเคราะห์ข้อมูลแบบเรียลไทม์
3.Kafka:
เหมาะกับสถานการณ์การประมวลผลกระแสข้อมูลแบบเรียลไทม์ที่มีปริมาณงานสูงและการประมวลผลแบบสตรีม
ไปป์ไลน์ข้อมูลและการประมวลผลข้อมูลแบบเรียลไทม์:ความสามารถในการรับส่งข้อมูลปริมาณมากและการจัดเก็บข้อมูลแบบคงทนของ Kafka ทำให้เป็นตัวเลือกที่เหมาะสำหรับสร้างไปป์ไลน์ข้อมูลและระบบประมวลผลข้อมูลแบบเรียลไทม์ที่เชื่อถือได้ เพื่อใช้รวบรวม、ส่งต่อ และประมวลผลข้อมูลสตรีม。
การประมวลผลบันทึกและสตรีมเหตุการณ์:คุณสมบัติการแบ่งพาร์ติชันและการรับประกันลำดับของ Kafka ทำให้เหมาะอย่างยิ่งสำหรับการประมวลผลบันทึกและสตรีมเหตุการณ์ เช่น การรวบรวมบันทึกแอปพลิเคชัน การสืบย้อนเหตุการณ์ และการติดตามการดำเนินงาน เป็นต้น
การวิเคราะห์สตรีมแบบเรียลไทม์และการเรียนรู้ของเครื่อง:Kafka ทำงานร่วมกับเฟรมเวิร์กประมวลผลสตรีม(เช่น Flink、Spark Streaming)เพื่อรองรับงานวิเคราะห์สตรีมแบบเรียลไทม์และงานการเรียนรู้ของเครื่อง โดยประมวลผลสตรีมข้อมูลแบบเรียลไทม์เพื่อให้ได้ข้อมูลเชิงลึกและสนับสนุนการตัดสินใจได้ทันที。
2、สถาปัตยกรรมบริการ
RabbitMQ
Channel(ช่องทาง):Channel คือการเชื่อมต่อเสมือนระหว่าง RabbitMQ กับแอปพลิเคชัน การสร้างหลายช่องทางบนการเชื่อมต่อทางกายภาพ(connection)ทำให้แอปพลิเคชันดำเนินการรับส่งข้อความพร้อมกันได้ ช่องทางรับผิดชอบการส่งและรับข้อความ รวมถึงดำเนินการบางอย่างที่เกี่ยวข้องกับข้อความ เช่น ประกาศคิว กำหนดเอ็กซ์เชนจ์ และสร้างการผูกโยง ช่องทางจึงมองได้ว่าเป็นเซสชันขนาดเบาที่ใช้โต้ตอบกับ RabbitMQ ผ่านการเชื่อมต่อทางกายภาพหนึ่งรายการ。
Exchange(ตัวแลกเปลี่ยนข้อความ):ตัวแลกเปลี่ยนข้อความเป็นศูนย์กลางรับและส่งต่อข้อความ เมื่อส่งข้อความไปยัง RabbitMQ จะกำหนดเส้นทางผ่านตัวแลกเปลี่ยนข้อความ โดยตัวแลกเปลี่ยนข้อความจะส่งข้อความไปยังหนึ่งคิวหรือหลายคิวตามประเภทและกฎการผูกที่กำหนด ประเภทที่พบบ่อย ได้แก่ แบบตรง(direct)、แบบหัวข้อ(topic)、แบบกระจาย(fanout)และแบบส่วนหัว(headers)。
Queue(คิว):คิวคือบัฟเฟอร์ที่ RabbitMQ ใช้เก็บข้อความ เมื่อไม่สามารถกำหนดเส้นทางข้อความไปยังผู้บริโภคได้ทันที ข้อความจะถูกเก็บไว้ในคิว รอให้ผู้บริโภคมารับและประมวลผล แต่ละคิวมีชื่อที่ไม่ซ้ำกัน และส่งมอบกับบริโภคข้อความตามลำดับ FIFO(เข้าก่อนออกก่อน)。
Virtual Host(โฮสต์เสมือน):โฮสต์เสมือนคือสภาพแวดล้อมที่แยกกันในเชิงตรรกะ ใช้แบ่งเซิร์ฟเวอร์ RabbitMQ ออกเป็นหลายส่วนที่เป็นอิสระต่อกัน โฮสต์เสมือนแต่ละแห่งมี exchange、queue、binding และการตั้งค่าสิทธิ์ของตนเอง โฮสต์เสมือนช่วยแยกแอปพลิเคชันหรือบริการต่าง ๆ ออกจากกัน และให้การควบคุมด้านความปลอดภัยและการจัดการทรัพยากร
Broker(ตัวกลาง):Broker คืออินสแตนซ์ของเซิร์ฟเวอร์คิวข้อความ RabbitMQ ทำหน้าที่รับ จัดเก็บ และกำหนดเส้นทางข้อความ โดยทำหน้าที่เป็นคนกลางส่งต่อข้อความจากผู้ผลิตไปยังผู้บริโภค อินสแตนซ์ RabbitMQ หนึ่งตัวสามารถมี Broker ได้หลายตัว และ Broker แต่ละตัวสามารถรองรับโฮสต์เสมือนและคิวได้หลายรายการ
RocketMQ
NameServer(เซิร์ฟเวอร์ชื่อ):NameServer เป็นองค์ประกอบบริการชื่อของ RocketMQ ใช้จัดการและให้ข้อมูลเส้นทางของ Broker โดยทำหน้าที่เป็นศูนย์กลางเมทาดาทา รับผิดชอบดูแลข้อมูลการลงทะเบียนของ Broker ข้อมูลเส้นทางของ Topic เป็นต้น ก่อนส่งและรับข้อความ Producer และ Consumer ต้องติดต่อกับ NameServer เพื่อรับข้อมูล Broker ที่ถูกต้อง
Controller(ตัวควบคุม):Controller เป็นองค์ประกอบตัวควบคุมของ RocketMQ ทำหน้าที่ประสานงานและจัดการการทำงานของคลัสเตอร์ RocketMQ ทั้งหมด โดยติดตามการเปลี่ยนแปลงสถานะของ Broker จัดการการขยายและลดขนาดคลัสเตอร์ รวมถึงการกระจายโหลด เป็นต้น Controller เป็นหนึ่งในองค์ประกอบหลักของคลัสเตอร์ RocketMQ ช่วยให้คลัสเตอร์ทำงานอย่างเชื่อถือได้และจัดการโดยอัตโนมัติ
Broker(ตัวกลาง):Broker คือโหนดจัดเก็บและประมวลผลข้อความของ RocketMQ มีหน้าที่รับข้อความจาก Producer แล้วจัดเก็บลงบนดิสก์ Broker ยังรับผิดชอบจัดการคำขอดึงข้อความจาก Consumer และส่งข้อความไปให้ Consumer ประมวลผลด้วย คลัสเตอร์ RocketMQ หนึ่งคลัสเตอร์สามารถมี Broker ได้หลายตัว โดย Broker แต่ละตัวรับผิดชอบจัดเก็บข้อมูลข้อความของ Topic บางส่วน。
KafkaMQ
Broker(ตัวกลาง):Broker คือโหนดหนึ่งในคลัสเตอร์ Kafka มีหน้าที่จัดเก็บและประมวลผลข้อความ Broker แต่ละตัวเป็นอินสแตนซ์เซิร์ฟเวอร์ Kafka ที่เป็นอิสระต่อกัน โดยอาจเป็นเซิร์ฟเวอร์จริง เครื่องเสมือน หรือคอนเทนเนอร์หนึ่งตัว คลัสเตอร์ Kafka หนึ่งคลัสเตอร์สามารถมี Broker ได้หลายตัว ซึ่งทำงานร่วมกันเพื่อให้ส่งข้อความได้ด้วยความพร้อมใช้งานสูงและอัตรารับส่งข้อมูลสูง
Topic(หัวข้อ):Topic คือการจัดประเภทหรือหัวข้อเชิงตรรกะของข้อความ เป็นหน่วยสำหรับเผยแพร่และสมัครรับข้อความ Producer เผยแพร่ข้อความไปยัง Topic ที่ระบุ ส่วน Consumer สมัครรับ Topic ที่สนใจเพื่อรับข้อความ อาจมอง Topic เป็นภาชนะบรรจุข้อความ ใช้จัดหมวดหมู่และจัดกลุ่มข้อความที่เกี่ยวข้องกัน
Partition(พาร์ทิชัน):Topic สามารถแบ่งออกเป็นหนึ่งพาร์ทิชันหรือมากกว่า โดยแต่ละพาร์ทิชันเป็นส่วนย่อยของ Topic พาร์ทิชันเป็นหน่วยเล็กที่สุดในการจัดเก็บและส่งข้อความ ในทางกายภาพ แต่ละพาร์ทิชันสอดคล้องกับไฟล์บันทึกอิสระหนึ่งไฟล์ ซึ่งกระจายอยู่บน Broker ต่าง ๆ พาร์ทิชันช่วยให้ Kafka ขยายระบบในแนวนอนและประมวลผลแบบขนานได้ พร้อมทั้งให้อัตราการประมวลผลที่สูงขึ้น ข้อความในแต่ละพาร์ทิชันจะจัดเก็บและส่งตามลำดับเข้าก่อนออกก่อน
3、การจัดเก็บถาวรและความเชื่อถือได้:
RabbitMQ:RabbitMQ ใช้กลไกบันทึกข้อความแบบถาวร โดยบันทึกข้อความลงดิสก์เพื่อรับประกันความน่าเชื่อถือของข้อความ รองรับกลไกยืนยันข้อความหลายรูปแบบและธุรกรรม จึงรับประกันการส่งข้อความอย่างน่าเชื่อถือได้
RocketMQ:RocketMQ มีความสามารถด้านการจัดเก็บถาวรและความน่าเชื่อถือที่แข็งแกร่ง รองรับกลไกเขียนลงดิสก์แบบซิงโครนัสและทำสำเนาแบบอะซิงโครนัส จึงรับประกันการส่งข้อความที่มีความน่าเชื่อถือสูงได้
Kafka:Kafka จัดเก็บข้อความแบบถาวร โดยเขียนข้อความลงในไฟล์บันทึกบนดิสก์ กลไกการแบ่งพาร์ทิชันและการทำสำเนาช่วยให้มีความน่าเชื่อถือสูงและมีความสามารถในการจัดเก็บข้อมูลอย่างถาวร
4、อัตราการประมวลผล
RabbitMQ:โดยทั่วไป RabbitMQ มีอัตราประมวลผลข้อความค่อนข้างต่ำ เหมาะกับการใช้งานขนาดเล็กถึงกลาง RabbitMQ เหมาะกับการใช้งานขนาดเล็กถึงกลาง โดยทั่วไปสามารถรองรับข้อความในระดับหลักหมื่นถึงหลักแสนได้ โดยเน้นการส่งข้อความอย่างเชื่อถือได้และการจัดเก็บข้อความอย่างถาวรเป็นหลัก หากต้องการอัตราประมวลผลสูง อาจต้องปรับปรุงและปรับแต่งเพิ่มเติม。
RocketMQ:RocketMQ มีอัตรารับส่งสูง สามารถประมวลผลข้อความได้ในระดับล้านข้อความ และทำงานได้โดดเด่นในสถานการณ์ธุรกรรมแบบกระจายและการส่งข้อความขนาดใหญ่。
Kafka:Kafka เป็นระบบคิวข้อความที่มีชื่อเสียงด้านอัตราการประมวลผลสูง สามารถจัดการข้อความระดับล้านหรือมากกว่านั้นได้ Kafka เหมาะกับงานที่ต้องการอัตราการประมวลผลสูง เช่น การประมวลผลข้อมูลขนาดใหญ่、การประมวลผลสตรีมแบบเรียลไทม์ และการประมวลผลล็อก。
5、เวลาตอบสนอง
6、ชุมชนและระบบนิเวศ
RabbitMQ:RabbitMQ มีระบบนิเวศปลั๊กอินและเครื่องมือที่หลากหลาย พร้อมการสนับสนุนจากชุมชนนักพัฒนาอย่างกว้างขวาง。
RocketMQ:RocketMQ ใช้งานกันอย่างแพร่หลายในประเทศจีน โดยมีระบบนิเวศของ Alibaba ที่หลากหลายและการสนับสนุนจากชุมชน。
Kafka:Kafka มีชุมชนโอเพนซอร์สที่มีความเคลื่อนไหวอย่างต่อเนื่องและระบบนิเวศที่กว้างขวาง บริษัทขนาดใหญ่หลายแห่งนำไปใช้อย่างแพร่หลาย
Github Star
ผู้มีส่วนร่วมใน Github
โดยรวมแล้ว:rabbitmq<rocketmq<kafka
7、แนวคิดการออกแบบ
RabbitMQ:RabbitMQ เป็นมิดเดิลแวร์รับส่งข้อความแบบโอเพนซอร์สที่ใช้ AMQP(โปรโตคอลคิวข้อความขั้นสูง)เน้นความสะดวกในการใช้งานและความยืดหยุ่น รองรับรูปแบบการรับส่งข้อความหลากหลายและการส่งข้อความที่เชื่อถือได้。
RocketMQ:RocketMQ เป็นมิดเดิลแวร์รับส่งข้อความแบบกระจายที่ Alibaba เปิดเป็นโอเพนซอร์ส เดิมออกแบบมาเพื่อตอบสนองความต้องการประมวลผลข้อมูลมหาศาลภายใน Alibaba มีจุดเด่นคือปริมาณงานสูงและความหน่วงต่ำ ในปี 2016 Alibaba ได้บริจาค RocketMQ ให้มูลนิธิซอฟต์แวร์ Apache
Kafka:Kafka เป็นแพลตฟอร์มประมวลผลสตรีมแบบกระจายที่พัฒนาโดย LinkedIn ใช้เป็นหลักในการประมวลผลสตรีมข้อมูลแบบเรียลไทม์ที่มีปริมาณงานสูง โดยจัดเก็บและประมวลผลข้อมูลอย่างถาวร ในปี 2011 Kafka กลายเป็นโครงการโอเพนซอร์สของ Apache
8、โมเดลข้อมูล
RabbitMQ:RabbitMQ ใช้โมเดลคิว(Queue)โดยข้อความจะถูกส่งเข้าไปในคิว และผู้บริโภคจะรับข้อความจากคิวมาประมวลผล。
RocketMQ:RocketMQ ใช้โมเดลหัวข้อ(Topic)และแท็ก(Tag) โดยเผยแพร่ข้อความไปยังหัวข้อ และคอนซูเมอร์สามารถสมัครรับและกรองข้อความตามหัวข้อและแท็กได้。
Kafka:Kafka ใช้โมเดลเผยแพร่-สมัครรับ ข้อความจะถูกเผยแพร่ไปยังหัวข้อ ผู้บริโภคหลายรายสามารถสมัครรับหัวข้อเดียวกันและรับข้อความไปประมวลผลแยกกันได้
9、เครื่องมือจัดการผ่านเว็บ
RabbitMQ
หน้าจัดการผ่านเว็บของ RabbitMQ:RabbitMQ มีหน้าจัดการผ่านเว็บในตัว ซึ่งเข้าถึงได้ผ่านเบราว์เซอร์ โดยมีส่วนติดต่อผู้ใช้ที่เข้าใจง่าย สามารถดูและจัดการส่วนต่าง ๆ ของเซิร์ฟเวอร์ RabbitMQ รวมถึงคิว เอ็กซ์เชนจ์ การผูกเชื่อม สิทธิ์ของผู้ใช้ เป็นต้น ตามค่าเริ่มต้น หน้าจัดการผ่านเว็บทำงานบนพอร์ต 15672。
RokcetMQ
RocketMQ Console:ทาง RocketMQ มีเว็บคอนโซลอย่างเป็นทางการชื่อ RocketMQ Console ซึ่งมีส่วนติดต่อแบบภาพสำหรับจัดการและติดตามคลัสเตอร์ RocketMQ ในด้านต่าง ๆ รวมถึง Topic กลุ่มผู้บริโภค การค้นหาข้อความ สถิติประสิทธิภาพ เป็นต้น คุณสามารถใช้เครื่องมือนี้ได้โดยเข้าไปที่ URL ของคอนโซล
Kafka
Kafka Manager:Kafka Manager เป็นเครื่องมือจัดการแบบกราฟิกโอเพนซอร์สที่พัฒนาโดย Yahoo ใช้จัดการคลัสเตอร์ Apache Kafka มีฟังก์ชันต่าง ๆ เช่น การติดตามสถานะคลัสเตอร์แบบเรียลไทม์ การจัดการหัวข้อและพาร์ทิชัน และการจัดการกลุ่มผู้บริโภค
10、รูปแบบข้อความ
รูปแบบการส่งข้อมูลของมิดเดิลแวร์ข้อความที่นิยมใช้หลัก ๆ คือแบบจุดต่อจุดและแบบเผยแพร่–สมัครรับ รายละเอียดมีดังนี้:
RabbitMQ:
รูปแบบเผยแพร่-สมัครรับ:RabbitMQ รองรับรูปแบบเผยแพร่-สมัครรับ โดยผู้ผลิตเผยแพร่ข้อความไปยังเอ็กซ์เชนจ์(Exchange) จากนั้นเอ็กซ์เชนจ์ส่งข้อความต่อไปยังหลายคิวที่ผูก(Binding)ไว้กับมัน ผู้บริโภคสามารถรับข้อความจากคิวได้อย่างเป็นอิสระ。
รูปแบบจุดต่อจุด:RabbitMQ รองรับรูปแบบจุดต่อจุดเช่นกัน โดยผู้ผลิตส่งข้อความไปยังคิวที่ระบุ จากนั้นผู้บริโภครับข้อความจากคิวนั้น ข้อความแต่ละรายการจะมีผู้บริโภคเพียงรายเดียวที่รับและประมวลผลได้
2.RocketMQ:
รูปแบบเผยแพร่-สมัครรับ:RocketMQ รองรับรูปแบบเผยแพร่-สมัครรับ โดยผู้ผลิตส่งข้อความไปยังหัวข้อ(Topic)ที่กำหนด แล้วผู้บริโภคจึงสมัครรับหัวข้อที่สนใจ รูปแบบการสมัครรับของ RocketMQ รองรับหลายวิธี เช่น โหมดกระจายข้อความและโหมดคลัสเตอร์ ซึ่งช่วยให้ส่งข้อความแบบหลายผู้รับหรือบริโภคข้อความแบบกระจายภาระงานได้
รูปแบบคิว:RocketMQ ยังรองรับรูปแบบคิว โดยผู้ผลิตส่งข้อความไปยังคิวที่ระบุ จากนั้นผู้บริโภครับข้อความจากคิวที่ระบุ ผู้บริโภคหลายรายสามารถประมวลผลข้อความจากคิวเดียวกันแบบขนานได้
3.Kafka:
รูปแบบเผยแพร่-สมัครรับ:Kafka ใช้รูปแบบเผยแพร่-สมัครรับ โดยผู้ผลิตจะเผยแพร่ข้อความไปยังหัวข้อ(Topic)ที่กำหนด จากนั้นผู้บริโภคจะสมัครรับหัวข้อที่สนใจ รูปแบบการสมัครรับของ Kafka รองรับกลุ่มผู้บริโภคหลายกลุ่ม โดยแต่ละกลุ่มสามารถบริโภคข้อความได้อย่างอิสระ ทำให้มีอัตราการประมวลผลสูงและขยายระบบในแนวนอนได้
รูปแบบการแบ่งพาร์ทิชัน:Kafka แบ่งหัวข้อออกเป็นหลายพาร์ทิชัน โดยในทางกายภาพแต่ละพาร์ทิชันจะสอดคล้องกับไฟล์บันทึกแยกกันหนึ่งไฟล์ ผู้ผลิตส่งข้อความไปยังพาร์ทิชันที่กำหนด ส่วนผู้บริโภคสามารถอ่านและประมวลผลแบบขนานตามพาร์ทิชันได้ รูปแบบการแบ่งพาร์ทิชันนี้ทำให้ Kafka ขยายระบบในแนวนอนและรองรับการรับส่งข้อมูลปริมาณมากได้。