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(القناة): القناة هي اتصال افتراضي بين RabbitMQ والتطبيق. ومن خلال إنشاء عدة قنوات على اتصال فعلي(connection)، يستطيع التطبيق إجراء عمليات تبادل الرسائل بالتزامن. تتولى القناة إرسال الرسائل واستقبالها، وتنفيذ بعض العمليات المتعلقة بها، مثل إعلان الطوابير وتعريف المبادلات وعمليات الربط. ويمكن اعتبار القناة جلسة خفيفة تتفاعل مع RabbitMQ عبر اتصال فعلي واحد.
Exchange(المُبادِل): المُبادِل هو مركز استقبال الرسائل وإعادة توجيهها. عندما تُرسل الرسائل إلى RabbitMQ، يجري توجيهها عبر المُبادِل. ويُوجّه المُبادِل الرسائل إلى طابور واحد أو عدة طوابير بحسب نوعه وقواعد الربط. وتشمل أنواعه الشائعة المُبادِل المباشر(direct)، ومُبادِل الموضوعات(topic)، ومُبادِل البث الشامل(fanout)، ومُبادِل الترويسات(headers).
Queue(الطابور):الطابور هو مخزن مؤقت يستخدمه RabbitMQ لحفظ الرسائل. عندما يتعذر توجيه الرسائل فورًا إلى المستهلك، تُحفظ في الطابور في انتظار أن يجلبها المستهلك ويعالجها. ولكل طابور اسم فريد، وتُسلَّم الرسائل وتُستهلك وفق ترتيب FIFO(الوارد أولًا يُصرف أولًا).
Virtual Host(المضيف الافتراضي):المضيف الافتراضي بيئة معزولة منطقيًا، تُستخدم لتقسيم خادم RabbitMQ إلى عدة أجزاء مستقلة. ولكل مضيف افتراضي مبادلاته وطوابيره وروابطه وإعدادات صلاحياته الخاصة. وتساعد المضيفات الافتراضية على عزل التطبيقات أو الخدمات المختلفة عن بعضها، وتتيح التحكم في الأمان وإدارة الموارد.
Broker(الوسيط):هو مثيل لخادم طوابير رسائل RabbitMQ، ويتولى استقبال الرسائل وتخزينها وتوجيهها. ويؤدي دور الوسيط الذي ينقل الرسائل التي يرسلها المنتجون إلى المستهلكين. ويمكن أن يتضمن مثيل RabbitMQ عدة وسطاء، ويمكن لكل وسيط أن يستضيف عدة مضيفين افتراضيين وطوابير.
RocketMQ
NameServer(خادم الأسماء):هو مكوّن خدمة الأسماء في RocketMQ، ويُستخدم لإدارة معلومات توجيه Broker وتوفيرها. ويعمل مركزًا للبيانات الوصفية، ويتولى حفظ معلومات تسجيل Broker ومعلومات توجيه Topic وغيرها. وقبل إرسال الرسائل واستقبالها، يحتاج Producer وConsumer إلى التفاعل مع NameServer للحصول على معلومات Broker الصحيحة.
Controller(وحدة التحكم):هو مكوّن التحكم في RocketMQ، ويتولى تنسيق عمل عنقود RocketMQ بأكمله وإدارته. يراقب تغيّرات حالة Broker، ويتعامل مع توسيع العنقود وتقليصه، وينفّذ عمليات مثل موازنة الأحمال. ويُعد Controller أحد المكوّنات الأساسية لعنقود RocketMQ، إذ يضمن تشغيله الموثوق وإدارته الآلية.
Broker(الوسيط): هو عقدة تخزين الرسائل ومعالجتها في RocketMQ. يتولى استقبال الرسائل من Producer وتخزينها على القرص. كما يعالج Broker طلبات سحب الرسائل من Consumer، ويدفع الرسائل إليه لاستهلاكها. يمكن أن تضم عنقود RocketMQ عدة عقد Broker، تتولى كل منها تخزين جزء من بيانات رسائل الموضوعات Topic.
KafkaMQ
Broker(الوسيط):هو عقدة في عنقود Kafka، مسؤولة عن تخزين الرسائل ومعالجتها. وكل Broker مثيل مستقل لخادم Kafka. ويمكن أن يكون خادمًا ماديًا منفصلًا أو آلة افتراضية أو حاوية. وقد يضم عنقود Kafka عدة وسطاء تتعاون لتوفير نقل رسائل عالي التوافر والإنتاجية.
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:نظام طوابير رسائل يشتهر بمعدل إنتاجيته المرتفع، ويستطيع معالجة رسائل بأعداد تبلغ الملايين أو أكثر. وهو مناسب للسيناريوهات التي تتطلب إنتاجية مرتفعة، مثل معالجة البيانات واسعة النطاق، ومعالجة التدفقات الآنية، ومعالجة السجلات.
5、زمن الاستجابة
6، المجتمع والمنظومة
RabbitMQ:يمتلك RabbitMQ منظومة غنية من الإضافات والأدوات، ويحظى بدعم مجتمع واسع من المطورين.
RocketMQ: يُستخدم RocketMQ على نطاق واسع داخل الصين، ويحظى بمنظومة غنية من Alibaba ودعم مجتمعي.
Kafka: يتمتع Kafka بمجتمع نشط مفتوح المصدر ومنظومة واسعة، وتعتمده شركات كبرى كثيرة على نطاق واسع.
نجمة على Github
المساهمون في Github
بوجه عام:rabbitmq<rocketmq<kafka
7、فلسفة التصميم
RabbitMQ: يُعدّ RabbitMQ وسيط رسائل مفتوح المصدر قائمًا على AMQP (البروتوكول المتقدم لقوائم انتظار الرسائل)، ويركّز على سهولة الاستخدام والمرونة، ويدعم أنماط رسائل متعددة وتسليم الرسائل بصورة موثوقة.
RocketMQ:هو وسيط رسائل موزّع مفتوح المصدر من Alibaba، صُمّم في البداية لتلبية احتياجات معالجة البيانات الهائلة داخل Alibaba، ويتميز بإنتاجية عالية وزمن استجابة منخفض. وفي عام 2016، تبرعت Alibaba بـ RocketMQ لمؤسسة Apache للبرمجيات.
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 ومراقبتها، بما فيها الموضوعات ومجموعات المستهلكين والاستعلام عن الرسائل وإحصاءات الأداء وغيرها. يمكنك استخدام هذه الأداة بزيارة عنوان URL الخاص بوحدة التحكم.
Kafka
Kafka Manager:أداة إدارة رسومية مفتوحة المصدر طوّرتها Yahoo لإدارة عناقيد Apache Kafka. وتوفّر وظائف مثل مراقبة حالة العنقود آنيًا، وإدارة المواضيع والأقسام، وإدارة مجموعات المستهلكين.
10、نمط الرسائل
تعتمد نماذج النقل في البرمجيات الوسيطة الشائعة للرسائل أساسًا على نموذج نقطة إلى نقطة ونموذج النشر والاشتراك. وتفصيل ذلك:
RabbitMQ:
نمط النشر والاشتراك: يدعم RabbitMQ نمط النشر والاشتراك، حيث ينشر المنتج الرسائل إلى المبادل(Exchange)، ثم يمررها المبادل إلى عدة قوائم انتظار مرتبطة به بروابط(Binding). ويمكن للمستهلكين تلقي الرسائل من قوائم الانتظار بصورة مستقلة.
نمط نقطة إلى نقطة:يدعم RabbitMQ أيضًا نمط نقطة إلى نقطة، حيث يرسل المنتج الرسائل إلى قائمة انتظار محددة، ثم يتلقاها المستهلك من تلك القائمة. ولا يمكن أن يتلقى كل رسالة ويعالجها سوى مستهلك واحد.
2.RocketMQ:
نمط النشر والاشتراك: يدعم RocketMQ نمط النشر والاشتراك، حيث يرسل المنتج الرسائل إلى موضوع محدد (Topic)، ثم يشترك المستهلكون في المواضيع التي تهمّهم. يدعم نمط الاشتراك في RocketMQ طرق اشتراك متعددة، مثل نمط البث ونمط العنقود، مما يتيح البث المتعدد للرسائل أو استهلاكها مع موازنة الأحمال.
نمط الطابور:يدعم RocketMQ أيضًا نمط الطابور، حيث يرسل المنتج الرسائل إلى طابور محدد، ثم يتلقى المستهلك الرسائل من الطابور المحدد. ويمكن لعدة مستهلكين استهلاك الرسائل من الطابور نفسه بالتوازي.
3.Kafka:
نمط النشر والاشتراك: يعتمد Kafka نمط النشر والاشتراك، حيث ينشر المنتجون الرسائل في موضوع(Topic)محدد، ثم يشترك المستهلكون في الموضوعات التي تهمهم. ويدعم نمط الاشتراك في Kafka مجموعات متعددة من المستهلكين، تستطيع كل مجموعة منها استهلاك الرسائل بصورة مستقلة، مما يحقق معدل معالجة مرتفعًا وتوسعًا أفقيًا.
نمط التقسيم: يقسّم Kafka الموضوع إلى أقسام متعددة، ويقابل كل قسم فعليًا ملف سجل مستقل. يرسل المنتج الرسائل إلى القسم المحدد، ويمكن للمستهلكين استهلاكها بالتوازي بحسب الأقسام. يتيح نمط التقسيم هذا لـ Kafka تحقيق التوسع الأفقي والإنتاجية العالية.