RabbitMQ مدیریت صفهای پیام برای سیستمهای توزیعشده!
معرفی RabbitMQ: بخش اول، RabbitMQ چیست؟ دات نت زوم
به زبان ساده، این روش به جای تمرکز روی یک کلید مشخص، از جزئیات بیشتری که در هدر پیام وجود دارد برای مسیریابی استفاده میکند. از تبادل پخشکنننده زمانی استفاده میشود که نیاز به انتشار گسترده یک پیام به همه بخشهای سیستم باشد، بدون نیاز به فیلتر یا شرط خاصی. برای مثال، ارسال یک اطلاعیه عمومی به تمام سرویسهای یک سیستم، از کاربردهای رایج این نوع تبادل است. در این حالت، نیازی به استفاده از کلید اتصال یا کلید مسیریابی نیست، زیرا تبادل Fanout همه پیامها را به صورت مستقیم و بدون بررسی کلیدها به صفهای متصل ارسال میکند. در تبادل مستقیم (Direct Exchange) در RabbitMQ، پیامها براساس یک کلید مسیریابی (Routing Key) خاص به صفهای مختلف ارسال میشوند. اگر این کلید مسیریابی با کلید اتصال (Binding Key) تعریف شده برای یک صف یکسان باشد، پیام به آن صف هدایت میشود.
اتصالها روابطی هستن که بین مبادلهکنندهها و صفها برقرار میشن و مشخص میکنن که کدام پیامها به کدام صفها ارسال بشن. این اتصالات به مبادلهکنندهها کمک میکنن تا تصمیمگیری بهتری درباره مسیر پیامها داشته باشن. تولیدکنندهها بخشهایی هستن که پیامها رو ایجاد و به صفها ارسال میکنن. این پیامها میتونن اطلاعات مختلفی مثل درخواستها، پاسخها یا اعلانها باشن. این امر مقیاس پذیری فوق العاده ای را برای برنامه وب ایجاد می کند و باعث ایجاد تجربه واقعی در زمان واقعی برای کاربران می شود. FarmBot یک کیت سخت افزاری روباتیک منبع باز است که تعامل با پروژه های کشاورزی را به روشی کارآمد و سرگرم کننده امکان پذیر می کند.
به طور خلاصه، RabbitMQ نرمافزاری اپنسورس است که میتواند روند انتقال دادهها به شما کمک کند. همچنین این برنامه از پروتکل AMQP برای مدیریت پیامرسانی و درخواستها استفاده میکند که عملکرد آن را بهتر میکند. با طراحی زیرساخت RabbitMQ برای مدیریت افزایش ترافیک پیام و بار کاری، برای رشد و مقیاسپذیری آینده برنامهریزی کنید. در صورت نیاز، اضافه کردن گرههای بیشتر، بهینهسازی تنظیمات شبکه و تنظیم تخصیص منابع را در نظر بگیرید. جالبی RabbitMQ اینجاست که ما می تونیم با برنامه هایی ارتباط برقرار کنیم که حتی در یک سرور دیگه باشن. مثلا یک برنامه با زبان php در سرور هلند قرار داره و یک برنامه دیگه با زبان python در سرور ایران.
یعنی کلید را بررسی میکند و پیام را صفی که آن کلید مربوط به آن است ارسال می کند. این نوع exchange برای پیامهای unicast که یک مقصد و صف دارند عالی است. از این نوع exchange بیشتر برای توزیع task ها بین چند سیستم هم انجام می شود. پیامها به صورت مستقیم به صف مورد نظر منتشر نمیشوند بلکه producer پیامها را به یک exchange تحویل می دهد. شما باید حسابهای کاربری ایجاد کنید و مجوزهای آنها را برای دسترسی و انجام اقدامات در صفها و تبادلات خاص مشخص کنید.
در این مثال، برنامه یک پیام از صف order_queue دریافت کرده و اون رو پردازش میکنه. یکی دیگه از قابلیتهای جالب RabbitMQ اینه که میتونه بار پردازش پیامها رو بین مصرفکنندههای مختلف توزیع کنه. این یعنی اگه چندین مصرفکننده داشته باشی، RabbitMQ به صورت هوشمندانه پیامها رو بین اونها تقسیم میکنه تا بار پردازش به طور یکنواخت توزیع بشه و هیچ مصرفکنندهای بیش از حد بار نداشته باشه. ElephantSQL (پایگاه داده PostgreSQL به عنوان یک سرویس) از صف هایی در معماری برای مدیریت پشتیبان روزانه استفاده می کند. یک بار در روز هزاران پیام "perform-database-backup" به صف اضافه می شود، یک پیام برای هر پایگاه داده.
برای مدیریت بهتر سرور و میزبانی پایدار، میتوانید از خدمات خرید هاست از ماهان کلود استفاده کنید. این خدمات با پشتیبانی حرفهای و منابع قدرتمند، به شما کمک میکنند تا محیط بهینهای برای برنامههای خود ایجاد کنید. مصرفکنندهها بخشهایی هستن که پیامها رو از صفها دریافت کرده و پردازش میکنن. این بخشها میتونن شامل سرویسهای مختلفی باشن که نیاز به اطلاعات موجود در پیامها دارن. هنگامی که درخواست ها زمان قابل توجهی طول می کشد، این یک سناریوی مناسب برای استفاده از صف پیام است. همچنین برای ارتباط و ادغام درون و بین برنامه ها، به عنوان واسطه بین سرویس های کوچک، یک صف پیام نیز مفید است.
فرایند دریافت اطلاعات و ساخت pdf و ارسال ایمیل چند ثانیه زمان خواهد گرفت. ما میتوانیم از message broker استفاده کنیم تا این زمان را کاهش دهیم. ربیت ام کیو از خوشهبندی و تکرار پشتیبانی میکند و امکان ایجاد سیستمهای پیامرسانی با دسترسی بسیار بالا را فراهم میکند. یک ربیت ام کیو با پیکربندی خوشهبندیشده، چندین گره یک خوشه را تشکیل میدهند و صفهای پیام را به اشتراک میگذارند و تضمین میکنند که پیامها حتی در صورت شکست برخی از گرهها، پردازش میشوند. این انعطافپذیری به توسعهدهندگان اجازه میدهد تا مناسبترین پروتکل پیامرسانی را برای نیازهای برنامه خود انتخاب کنند. در این آموزش پس از نصب نرم افزار RabbitMQ، با کمک زبان برنامه نویسی python به ربیت ام کیو متصل میشویم و صف هایی را به کمک آن ایجاد و مدیریت میکنیم.
در ادامه متوجه میشویم که تفاوت آپاچی کافکا و RabbitMQ چیست تا نسبت به هر دو رابط پیامرسانی درک بهتری داشته باشیم. RabbitMQ از یک جریان داده مجزا و محدود استفاده میکند که در آن پیامها توسط تولیدکننده ایجاد و ارسال میشود و توسط مصرفکننده دریافت میشود. Apache Kafka از یک جریان داده نامحدود استفاده میکند که در آن جفتهای کلید-مقدار بهطور مداوم به موضوع اختصاص دادهشده جریان مییابد. ربیت ام کیو معمولا برای ارسال اعلانها و هشدارهای بیدرنگ به کاربران استفاده میشود. این رابط میتواند بهطور موثر پیامها را به چندین گیرنده توزیع کند و مطمئن شود که اعلانها بهسرعت تحویل داده میشود.
انتخاب نوع آدرس IP برای شبکهها و دستگاهها، تأثیر مستقیمی بر امنیت، پایداری و عملکرد سیستمهای شما دارد. در این مقاله از ابر زس، قصد داریم بهصورت جامع، مفهوم آی پی استاتیک را توضیح دهیم. یکی از معایب RabbitMQ این است که با زبان برنامهنویسی Erlang نوشته شده است. Erlang یک زبان خاص است که یادگیری و فهم آن برای بسیاری از برنامهنویسان ممکن است سخت باشد. به همین دلیل، وقتی یک توسعهدهنده میخواهد مشکلات RabbitMQ را بررسی و رفع کند، ممکن است درک کدهای آن سخت باشد و نتواند به راحتی متوجه شود که چه چیزی اشتباه است یا چگونه باید آن را تصحیح کند. من قصد داشتم توی همین مقاله هم روش نصب RabbitMQ رو بیارم که خوب حس میکنم خیلی حوصله سر بر میشه و سعی میکنم تا چند روز آینده هم شیوه نصب RabbitMQ رو بصورت ساده توی یک مقاله ی جدا آموزش بدم.
بصورت کلی یک Message Broker یا کارگزار پیام، یه نرمافزار یا سرویس هست که به عنوان واسطه در ارسال و دریافت پیامها بین برنامههای مختلف در یک سیستم توزیعشده عمل میکند. RabbitMQ یک سیستم مدیریت صف پیام (Message Broker) متنباز و قدرتمنده که به برنامهها این امکان رو میده تا پیامها رو به یکدیگر ارسال کنن و بهصورت غیرهمزمان پردازش کنن. به زبون سادهتر، RabbitMQ به برنامهها کمک میکنه تا بدون نیاز به ارتباط مستقیم و همزمان، با هم صحبت کنن و اطلاعات رو به اشتراک بذارن. RabbitMQ اغلب در چندین صنعت و سناریوهای کاربردی مانند سیستمهای توزیعشده، معماری میکروسرویسها و سیستمهای مبتنیبر ابر استفاده میشود. ربیت ام کیو سرویس چندکاره و کارآمدی را بهعنوان یک رابط پیام قدرتمند ارائه میدهد و برای توسعه مکانیزمهای انتقال پیام مقیاسپذیر و قابل اعتمادش شناخته میشود. RabbitMQ با استفاده از افزونهها، پروتکلهای MQTT و STOMP را نیز پشتیبانی میکند و به کاربران این امکان را میدهد تا پیامها را با روشهای مختلف ارسال و دریافت کنند.
این نوع دادهها شامل اطلاعاتی مثل عملیاتهای فرآیندها (مثل مانیتورینگ سیستمها)، حسابرسی (Auditing) و فعالیتهای سیستم است. به عنوان مثال، Kafka برای مانیتورینگ سیستمها یا ثبت گزارشهای ورود به سیستم (Logs) استفاده میشود، چون میتواند دادههای بزرگ و مداوم را به خوبی مدیریت کند و ذخیره کند. در نهایت، انتخاب بین RabbitMQ و Kafka بستگی به نیازهای خاص پروژه و مورد استفاده شما دارد. اگر نیاز به پیامرسانی بلافاصله و تحویل مطمئن دارید، RabbitMQ مناسب است. اما اگر با دادههای بزرگ و پردازش جریان داده کار میکنید، Kafka بهترین گزینه است. همچنین، میتوانید از هر دو ابزار به طور همزمان استفاده کنید و آنها را به عنوان بخشهای مختلف سیستم خود برای نیازهای مختلف استفاده کنید.
این ابزار به توسعهدهندگان کمک میکنه تا پیامها رو به صورت غیرهمزمان بین برنامهها و سرویسهای مختلف ارسال و دریافت کنن. یکی از ویژگیهای جذاب RabbitMQ، انعطافپذیری و مقیاسپذیری بالای اونه. یعنی میتونی با افزایش حجم پیامها و تعداد کاربران، بدون نگرانی از کاهش کارایی سیستم، عملکرد مناسبی داشته باشی. همچنین، RabbitMQ از پروتکلهای مختلفی مثل AMQP، MQTT و STOMP پشتیبانی میکنه که این امکان رو بهت میده تا با سیستمهای مختلف به راحتی ارتباط برقرار کنی. ربیت ام کیو معمولا در معماری میکروسرویس ها برای فعال کردن ارتباط بین میکروسرویسهای مختلف استفاده میشود.
یکی از دلایل محبوبیت RabbitMQ، مقیاسپذیری و کارایی بالای اون در مدیریت حجم بالای پیامهاست. شرکتهای بزرگی مثل Instagram، Reddit و Mozilla و همچنین شرکتهای بزرگ ایرانی از RabbitMQ استفاده میکنن تا ارتباطات داخلی خودشون رو مدیریت کنن. این ابزار بهشون کمک میکنه تا میلیونها پیام رو روزانه پردازش کنن، بدون اینکه عملکرد سیستم دچار اختلال بشه. طبق مثال قبلی فرض کن یه اپلیکیشن فروشگاهی داری که بخشهای مختلفی مثل ثبت سفارش، انبارداری و ارسال کالا داره. هر کدوم از این بخشها باید با هم در ارتباط باشن و اطلاعات رو بهموقع رد و بدل کنن. با استفاده از RabbitMQ، هر بخش میتونه پیامهای خودش رو به صف ارسال کنه و بخشهای دیگه هر زمان که نیاز بود، این پیامها رو دریافت و پردازش کنن.
این نسخه قابلیتهایی اضافه نسب به نسخۀ رایگان دارد که میتوانید لیست آنها را بهصورت کامل در منابع Broadcom مشاهده کنید. مبین هاست (Mobinhost) ارائهدهنده خدمات هاستینگ، دیتاسنتر، سرور مجازی، سرور اختصاصی، هاست و دامنه، گواهینامههای امنیتی SSL و سایر خدمات تحت وب است. به وبسایت رسمی RabbitMQ بروید و بسته نصبی متناسب با سیستمعامل خود را دانلود کنید. در صورتی که مبدل از نوع Fanout باشد، درخواست ارسالی برای همه ی صف های متصل شده به مبدل اضافه می شود. در مبدل دایرکت باید Producer یک کلید خاص که به آن binding key گفته میشه ارسال کند اما در مبدل دایرکت به جای binding key از routing pattern استفاده می شود.
این نرمافزار پروتکل AMQP (پروتکل پیشرفته صف پیام) را پیادهسازی میکند و همچنین از پروتکلهای دیگری مثل MQTT و STOMP پشتیبانی میکند. به زبان سادهتر، RabbitMQ به برنامهها اجازه میدهد تا پیامها را بدون نیاز به ارتباط مستقیم و همزمان، بهصورت غیرهمزمان (Asynchronous) ارسال و دریافت کنند. RabbitMQ نقش واسطه را بازی میکند؛ پیامها ابتدا توسط «تولیدکنندگان»(Producers) به «تبادلکنندهها» (Exchanges) ارسال میشوند و سپس طبق قوانین تعریفشده به «صفها»(Queues) مسیریابی میشوند. این پیامها توسط «مصرفکنندگان» (Consumers) در زمان مناسب دریافت و پردازش میشوند. RabbitMQ یک نرم افزار مدیریت صف است که برای ارسال و دریافت پیام ها از طریق پروتکلهای مختلف مثل AMQP (Advanced Message Queuing Protocol) استفاده میشود. این نرم افزار معمولا در سیستمهای توزیع شده و برنامههایی که نیاز به ارسال و دریافت پیام در زمان واقعی دارند، استفاده میشود.
FarmBot از سنسورها و محرک های فیزیکی استفاده می کند که نیاز به یک روش ارتباطی بین باغ فیزیکی و نرم افزار دارد. RabbitMQ کاربر پسند است و با پیروی از این بهترین شیوه های RabbitMQ، به راحتی می توان تنظیمات را متناسب با هدف مورد نظر تغییر داد. RabbitMQ به زبان Erlang نوشته شده است و بیشترین کارگزار پیام باز در جهان است، به این معنی که این یک کارگزار خوب و محکم است. یک سرویس خرد سرویسی است که معمولاً فقط برای یک هدف واحد وجود دارد، مستقل از نمونه ها و سرویس های دیگر است. هنگام ایجاد یک برنامه کاربردی به سبک معماری میکروسرویس، رویکرد توسعه یک برنامه واحد متشکل از دو یا چند سرویس کوچک (سرویس های کوچک) است.
این دوتا به راحتی می تونن از طریق RabbitMQ با هم ارتباط برقرار کنن و کنار هم کار کنن. برای ارسال پیام های مناسب به صف های مناسب، از قوانینی به نام binding استفاده می شود. در ادامه سعی می کنیم به این سوال ها پاسخ دهیم و ربیت ام کیو را به صورت مختصر، مفید و ساده به شما آموزش دهیم. صف بندی پیام ها یا Message Queuing مهمترین قسمت در معماری میکروسرویس است؛ این یکی از راه هایی است که میتوان داده ها را بین سرویس های مختلف جابجا کرد. به این معنی که با افزایش حجم پیامها و تعداد مصرفکنندهها، همچنان قادر خواهید بود پیامها را به خوبی مدیریت کنید. RabbitMQ پیامها را تا زمانی که بهدرستی پردازش شوند نگه میدارد، بنابراین مطمئن باشید که هیچ پیامی از بین نخواهد رفت.
این Exchange شبیه به Direct Exchange است با این تفاوت که به جای توجه کردن به کلید مسیریابی از اطلاعات header پیام استفاده می کند.با وب سایت Tosinso همراه باشید. از ابزارهای نظارتی برای ردیابی عملکرد ربیت ام کیو و دریافت هشدارها در صورت بروز هرگونه مشکل استفاده کنید. برای شناسایی و حل مشکلات احتمالی، معیارهای کلیدی مانند نرخ پیام، اندازه صف و استفاده از حافظه را فعالانه تحتنظر داشته باشید. استقرار ربیت ام کیو در تولید مستلزم رعایت بهترین شیوهها است تا مطمئن شویم یک پلتفرم پیامرسانی مقیاسپذیر و ایمن ایجاد شده است. در اینجا به چند روش کلیدی اشاره میکنیم که معمولا برای استقرار RabbitMQ بهکار میرود. ربیت ام کیو سبک طراحی شده است و بهراحتی در محیط ابر و بهصورت محلی قابل نصب است.
این ویژگی باعث شده که توسعهدهندگان بتونن به راحتی RabbitMQ رو در پروژههای خودشون ادغام کنن و از قابلیتهای پیشرفته اون بهرهمند بشن. پشتیبان گیری همچنین می تواند در صورت درخواست از طریق API مشتری یا از طریق رابط وب ایجاد شود. این نسخه پشتیبان باید بلافاصله پس از ارسال درخواست در دسترس باشد - به عبارت دیگر، اولویت است. برای حل این مشکل، صف پیام شما باید بتواند پیامها را به نحوی اولویت بندی کند. پیام "perform-database-backup" به همان صف اضافه می شود، اما این پیام اولویت پیام بیشتری نسبت به سایر درخواست ها دارد. به این فکر کنید که کارگزار پیام به عنوان یک برنامه چت ماشین به ماشین عمل می کند.
این نوع مبدل مانند مبدل های دیگر نیست و لازم نیست برای اضافه شدن درخواست در صف یک کلید مخصوص ارسال شود. در زمانی که Producer یک پیام برای پردازش ارسال میکند Exchange با توجه به کلید ارسالی از سمت Producer تشخیص میدهد که پیام را به کدام از صف های ایجاد شده ارسال کند. این بخش به عنوان ایجاد کننده پیام و یا درخواست عمل میکند و درخواست هارا که ممکن هست از هر نوعی باشند (حتی اطلاعات یک فرایند) به صف های مربوطه که برای ارسال به فرستند ایجاد شده اند ارسال میکند. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.
ربیت ام کیو یک نرمافزار رایگان برای پیامرسانی است که میتواند با برنامههای گستردهای هماهنگ میشود تا نیاز کاربر را به طور کامل برآورده کند. این نوع exchange کاری به کلید مسیریابی ندارد و پیامها را برای همه صف ها ارسال می کند. اگر تعداد N صف به یک Fanout exchange وصل شده باشند وقتی که یک پیام تولید میشود exchange یک کپی از پیام برای همه صف ها می فرستد. به همین خاطر این exchange برای ارسال پیامهای broadcast بسیار مناسب است. یک exchange مسقتیم پیامها را به صف هایی میرساند که دقیقاً مطابق با کلید مسیریابی پیام است.
باورت میشه که Instagram از RabbitMQ برای مدیریت میلیونها پیام استفاده میکنه؟ بله، همینطوره! این یعنی هر بار که توی Instagram پستی رو لایک میکنی یا کامنت میذاری، احتمالا پیامی از طریق RabbitMQ در حال جابهجاییه. بیا ببینیم چطور این سیستم قوی میتونه به کسبوکارها کمک کنه تا به بهترین شکل ممکن پیامهاشون رو مدیریت کنن. یکی از سریعترین خدمات پارکینگ دیجیتالی، پارکستر، معماری یکپارچه خود را به سرویس های خرد و جدا شده سریعتر تقسیم کرده است. پارکستر مانند نتفلیکس در ابتدا زندگی خود را به عنوان یکپارچه برای اثبات مدل تجاری خود آغاز کرد. آنها به سرعت متوجه شدند که این نوع سیستم - جایی که کل برنامه در یک واحد، با یک پایگاه کد و یک سیستم ساخته شده است - کارآمد یا موثر نیست.
به عبارت دیگر، هر صف یک یا چند کلید مسیریابی خاص را میپذیرد و پیامهایی که با این کلیدها مطابقت دارند، به آن صف وارد میشوند. این مکانیزم به شما این امکان را میدهد که یک پیام را به چندین صف مختلف ارسال کنید، به شرطی که آن صفها کلید اتصالهای مشترکی داشته باشند. در نتیجه، با تنظیم درست کلید اتصال و کلید مسیریابی میتوانید پیامها را به صفهای مورد نظر هدایت کنید و کنترل دقیقی روی مسیریابی پیامها داشته باشید. RabbitMQ چیست؛ تصور کنید یک پستچی سریع و قابل اعتماد دارید که میتواند بستههای شما را به آدرسهای مختلف برساند، بدون اینکه نگران گم شدن یا دیر رسیدن آنها باشید. RabbitMQ هم دقیقا همین کار را برای پیامها در سیستمهای نرمافزاری انجام میدهد. این یک واسطه پیامرسان (Message Broker) است که به برنامههای مختلف اجازه میدهد تا به صورت غیرهمزمان با هم ارتباط برقرار کنند.
برنامه نویسی جاوا چیست