آشنایی با RabbitMQ - بخش اول



شده تو محل کار یا شرکتتون نیاز به جا به جا کردن دیتا داشته باشین؟

اگه در حد چندتا عکس باشه از فلش یا هارد میتونیم استفاده کنیم. اما حرف در مورد دیتا با حجم بالاست که قطعا جا به جایی با استفاده از فلاپی سی دی فلش یا غیره ، ممکن نیست.

ربیت (RabbitMq) یک massage broker software هستش. در اصل کار کنترل کردن کار ها و پیام ها بین سرور های مختلف و اپلیکیشن های مختلف را انجام میده.

با استفاده از ربیت آپشن های مختلفی در اختیارمون قرار میگیره ، اولیش اینکه اون مشکلی که اول صحبتمون مطرح کردم با ربیت کاملا حل میشه. با ربیت می تونیم بین سیستم های مختلف پیام ارسال کنیم و عملیات صف بندی را انجام بدیم. همینطور میتونیم بین چند سیستم که از زبان مختلفی استفاده میکنن ، ارتباط برقرار کنیم.

فرض کنید که قراره ما یک سری دیتا از دیتابیس sql بخونیم و بعد از اینکه یک سری عملیات روی دیتا انجام دادیم ، خروجی هارو در الستیک بریزیم. در نظر داشته باشید که دیتابیس sql ما روی سرور یک و دیتابیس الستیک روی سرور دو قرار داره. عملا جا به جا کردن با روش های دستی غیر ممکنه.

باید از یک رابط بین سرور ها استفاده کنیم. رابط ما همون ربیت هستش. کارش به این صورت انجام میشه که ما بعد از اینکه خروجی های اولی برناممون رو گرفتیم ، روی یک صف در ربیت (که روی سرور یک هست) پوش میکنیم. و بعد از سمت سرور دوممون یک mapping انجام میدیم و دیتا هارو از روی ربیت برمیداریم.


بیاید اصلا اول با یک سری از اصطلاحاتش آشنا بشیم تا بهتر درک بکنیم.

مفهوم Producer : فرستنده پیام

مفهوم Consumer: گیرنده پیام

مفهوم Queue: بافر (حافظه موقت) یا همون صف برای ذخیره سازی پیام ها

مفهوم Message: دیتا و یا محتوای ارسال شده از طرف Producer به Consumer

مفهوم Exchange: وظیفه مسیر یابی بین پیام و صف ها رو به عهده داره.

مفهوم Binding: اتصال بین Queue (صف ) و Exchange (تعیین کننده مسیر)

مفهوم Users: با استفاده از یوزرنیم و پسوورد میتونه به ربیت وصل بشه و همینطور هم میشه دسترسی یوزر هارو محدود کرد.

روش عملکرد : فرستنده ، یک پیام روی ربیت پوش (ارسال) میکنه. پیام وارد exchange میشه تا صف مورد نظرش پیدا بشه. بعد از اون exchange پیام رو به صف مورد نظر ارسال میکنه.

حالا پیام تو صف قرار گرفته (FIFO) ، یعنی به ترتیبی که وارد صف شدن توسط گیرنده از صف خارج میشن.

این عکس دقیقا نحوه عملکرد
این عکس دقیقا نحوه عملکرد


یک سری دیگه از آپشن های ربیت ، قابلیت تقسیم وظایف بین سرور هاست. فرض کنید ما هزار صفحه پی دی اف داریم و میخوایم صفحه ها تک به تک تبدیل به عکس بشن. اگر این کار روی یک سرور انجام بشه یا اگه صورت ناگهانی مشکلی برای سرور پیش بیاد. کار ماهم نیمه کاره میمونه و نیازه که دوباره این کار انجام بشه. مشکل دومش هم اینه که وقتی حجم کار میره بالا یک سرور کاملا درگیر میشه و ما تا زمانی که کار تموم نشه نمیتونیم از اون سرور استفاده دیگه ای بکنیم. برای اینکه از این مشکلها جلوگیری بشه از ربیت استفاده میکنن ، ربیت میاد این کار رو بین چند سروری که داریم تقسیم میکنه ، باعث میشه سرعت کار بالا تر بره و هیچکدوم از سرور های ما کامل اشغال نشن. علاوه بر این اگر یکی از سرور ها از کار بیوفته ، کار اون سرور بین بقیه سرور ها تقسیم میشه و کار ادامه پیدا میکنه.

گاهی وقتها نیازه وقتی یک کار در حال انجام شدن هستش گزارش کار همزمان برای چند واحد ارسال بشه، اینجا باز هم از ربیت استفاده میکنیم و یک پیام رو برای چندتا از صف ها ارسال میکنیم.

به صورت کلی ، ربیت یک رابط بین اپلیکیشن ها و سرور هاست که سرعت کار رو بالا میبره و از یک سری مشکلات احتمالی جلوگیری میکنه.


گرد آورنده مقاله : محمد جواد احمدی


استاد : دکتر مریم حاجی اسمعیلی ، دکترای علوم کامپیوتر از دانشگاه کینگستون لندن

Dr.Maryam Hajiesmaeili

PhD of computer science from Kingston university of London

Linkedin