دنیای مجازی

واسط ‌پیام (Message Broker) چیست؟

تیم فنی
تیم فنی

واسط ‌پیام  (Message Broker)


کارگزار یا واسط‌ پیام چیست؟


چگونگی برقراری ارتباط اپلیکیشن‌ها به یک چالش روزافزون تبدیل شده است. استفاده از میان‌افزار‌پیام(Message Middleware) این چالش را ساده‌سازی و قابل حل کرده و باعث رشد شبکه ارتباطی شده است. به طورکلی ارتباطات می‌توانند به اشکال مختلفی ایجاد شوند و اینکه یک میان‌افزارپیام چگونه این ارتباط را برقرار می‌کند تفاوتی ندارد. یکی از این روش‌های برقراری ارتباط که میان‌افزارپیام استفاده می‌کند، شکل سرور محور آن است که واسط ‌پیام(Message Broker) نام دارد. با استفاده از یک واسط ‌پیام، اطلاعات را به منظور پردازش به سرور فرستاد و پس از آن برای مقاصد مورد نظر(مشتریان، کاربران و...) ارسال نمود؛ این پردازش شامل بخش‌های مختلفی از جمله: دسته‌بندی، مسیریابی، ترجمه پیام و... است. یکی از مشخصه‌های اصلی واسط ‌پیام این است که یک سرویس گسسته(Discrete Service) است. از طریق این واسط ‌پیام، تهیه‌کنندگان(Producers) و مصرف‌کنندگان(Consumers) می‌توانند تحت پروتکل‌های استاندارد یا اختصاصی با یکدیگر در ارتباط باشند. یکی دیگر از مزایای این واسط‌های پیام این است که تمامی ابزار مدیریت و پیدا کردن مشتریان(Clients Tracking) را در خود دارند و همین امر باعث راحتی کار شده است. در انتها اگر بخواهیم به صورت ساده یک واسط ‌پیام را توضیح دهیم می‌توانیم بگوییم یک مترجم بین دو زبان در سیستم‌های مخابراتی و الکتریکی است که یک پروتکل ارتباطی را گرفته و آن را برای پروتکل قابل فهم برای سیستمی دیگر ترجمه می‌کند.


اجزای یک واسط ‌پیام:


هر واسط ‌پیام از تعدادی اجزای اصلی تشکیل شده است که در ادامه به توضیح هر یک خواهیم پرداخت:
1) تهیه‌کننده(Producer): این بخش به واسط ‌پیام متصل بوده و مسئولیت اصلی آن، ارسال پیام است. در الگوی انتشار/اشتراک (که در ادامه به توضیح آن خواهیم پرداخت)، با نام ناشرها(Publishers) شناخته می‌شوند.
2) مصرف‌کنندگان(Consumers): این بخش در واسط ‌پیام، به عنوان مصرف‌کننده یا گیرنده پیام عمل می‌کنند. در الگوی انتشار/اشتراک با نام مشترکین(Subscribers) شناخته می‌شوند.
3) صف/موضوع(Queue/Topic): واسط ‌پیام، پیام‌ها را در این قسمت ذخیره‌سازی می‌کند.


انواع ارتباط در یک واسط‌پیام:


به طورکلی در یک واسط دو نوع ارتباط وجود دارد:
1) انتشار/اشتراک(Publish/Subscribe) یا موضوعات(Topics): صف‌های پیام به صورت یک‌به‌یک یا نظیربه‌نظیر(one-to-one) با یکدیگر از طریق فرستنده(تهیه‌کننده) و گیرنده(مصرف‌کننده) در ارتباط هستند. هر پیام در صف، تنها یکبار و فقط برای یک گیرنده ارسال می‌شود از این رو برای پردازش تراکنش‌های مالی بسیار مناسب است.


2) نقطه به نقطه(Point-to-Point) یا صف‌ها(Queues): این مدل از پیام با نام "Pub/Sub" نیز شناخته می‌شوند. 
در این مدل، صف‌های پیام به صورت یک به چند(One-to-Many) با فرستنده و گیرنده در ارتباط هستند. همچنین مانند نوع قبلی، فرستنده با نام تهیه‌کننده(Publisher) و گیرنده با نام اشتراک(Subscribe) شناخته می‌شوند. بر طبق این مدل، فرستنده پیام‌ها را با موضوعی مشخص منتشر می‌کند؛ این پیام برای تمامی افرادی که سابسکرایبر "Topic" هستند، فرستاده می‌شود. این سیستم می‌تواند در سیستمی بکارگیری شود که اطلاعات باید به صورت مداوم برای افراد زیادی فرستاده شود؛ برای مثال: در یک خط هوایی(Airline)، اطلاعات باید به صورت مداوم بروزرسانی و در اختیار قسمت‌های مختلفی از جمله: تیم پرواز، برج مراقبت و انظار عمومی قرار دهد.


موارد استفاده از واسط ‌پیام:


1) یکپارچه‌سازی میکروسرویس‌ها: در هنگام ساخت یک سیستم با استفاده از میکروسرویس‌ها ممکن است از چندین میکروسرویس مختلف استفاده شود که چالش اصلی در این حالت برقراری ارتباط بین آن‌هاست. برای حل این چالش می‌توان از یک واسط ‌پیام برای برقراری ارتباط بین این میکروسرویس‌ها استفاده کرد. همچنین اگر قصد اضافه کردن سرویسی به سرویس دیگر را نیز دارید می‌توانید این کار را از طریق این واسط ‌پیام به راحتی انجام دهید.
2) Rest API’s: در حال حاضر اکثر فرانت‌اندهای وبسایت‌ها یا اپلیکیشن‌های موبایل را با استفاده از Rest API بک‌اند پیاده‌سازی می‌کنند. ساختار Client/Server از پروتکل HTTP برای برقراری ارتباطات استفاده می‌کند(Request and Response). اما چه می‌شود اگر پردازش اطلاعات نیازمند زمان زیادی باشند؟ یا اینکه در زمان پردازش اطلاعات کاربر اتصال خود به اینترنت را از دست بدهد؟ نتایج ممکن است هیچگاه به دست کاربر نرسند! اما بکارگیری یک واسط‌پیام می‌تواند رسیدن نتایج و اطلاعات به دست کاربر را تضمین کند.
3) اپلیکیشن‌های موبایل: فرض کنید می‌خواهید برای کاربران اپلیکیشن خود نوتیفیکیشن بفرستید ولی برخی از آن‌ها آنلاین نیستند؛ با استفاده از واسط ‌پیام می‌توانید مطمئن باشید که پیام شما به دست تمامی کاربران حتی کاربران آفلاین نیز خواهد رسید.
4) رسیدگی و مدیریت اطلاعات جمع‌آوری شده از دستگاه‌های مختلف: همانطور که می‌دانید، دستگاه‌هایی که به فناوری اینترنت اشیاء مجهز هستند اطلاعات بسیاری را جمع‌آوری می‌کنند. حتی اگر بتوانید از پروتکل‌های HTTP زیادی هم برای رسیدگی به این موضوع استفاده کنید، بازهم روش خوبی برای دسته‌بندی، آنالیز و مدیریت حجم زیادی داده و اطلاعات نخواهد بود؛ زیرا سرعت این کار در مقابل استفاده از یک واسط ‌پیام اصلا قابل مقایسه نخواهد بود.
5) ردیابی فعالیت وبسایت(Website Activity Tracking): فرض کنید شما یک وب‌اپ دارید و می‌خواهید فعالیت‌ها و مشارکت‌های کاربران خود را در این وب‌اپ بررسی کنید. با استفاده از واسط ‌پیام می‌توان فعالیت‌های کاربران از جمله: تعداد کلیک، تعداد بازدید از صفحات، میزان جستجو شدن و... را بررسی کرده و نمایش داد.


مزایای استفاده از واسط‌پیام:


1) تضمین تحویل‌دهی پیام: حتی اگر یک کاربر آفلاین باشد، بازهم پیام در صف می‌ماند و هنگامی که کاربر آنلاین شد، به دست آن خواهد رسید.
2) افزایش سرعت پردازش سیستم: پردازش‌هایی که نیاز به زمان زیادی دارند می‌توان به صورت جداگانه و بخش-بخش پردازش کرد که این موضوع از کاهش سرعت کل سیستم جلوگیری می‌کند.
3) ارتباط میان برنامه‌ای: اپلیکیشن‌های مختلف(حتی اگر با زبان‌های برنامه‌نویسی مختلف برنامه‌نویسی شده باشند) می‌توانند به راحتی از طریق یک واسط ‌پیام با یکدیگر ارتباط گرفته و کار کنند(برای مثال: SOAP API، REST API، دستگاه‌های IoT و...).


برخی معایب استفاده از واسط‌پیام:


1) سردرگمی: چندین واسط‌ پیام گوناگون وجود دارند که هرکدام مزایا و معایب و ویژگی‌های خاص خود را دارند و باید هر یک از آن‌ها را به خوبی شناخت تا بتوان بهترین انتخاب را انجام داد.
2) دی‌باگ کردن: به علت پیچیدگی سیستم، رفع باگ‌های آن مشکل است.
3) پیچیدگی: اضافه نمودن یک واسط ‌پیام به سیستم، پیچیدگی‌های زیادی را به سیستم اضافه خواهد نمود و باید زیرساخت‌ها و یک تیم پشتیبانی قوی برای آن در اختیار داشت.


معروف‌ترین واسط‌های پیام:


در حال حاضر سه بروکر وجود دارند که بین بروکرها از محبوبیت بالاتری بین کاربران برخوردارند. در ادامه به صورت مختصر هر یک را ذکر می‌کنیم:
واسط ‌پیام Kafka: این واسط پیام در سال 2011 توسط شرکت LinkedIn ساخته شد. گستره سیستم‌هایی که این واسط‌ پیام توانایی کار کردن با آن‌ها را دارد بسیار زیاد بوده و محبوبیت آن نیز به همین دلیل است. برخی سیستم‌هایی که این واسط ‌پیام قابلیت همکاری با آن‌ها را دارد عبارتند از: برنامه‌های کامپیوتری(Desktop Applications)، میکروسرویس‌ها، سیستم‌های مانیتورینگ و آنالیزی، NoSQL، Oracle و Hadoop.
واسط ‌پیام ActiveMQ: مخفف صف پیام فعال(Active Message Queuing) است که توسط بنیاد نرم‌افزاری Apache در سال 2004 توسعه یافت. هر دو واسط پیام Active MQ و Kafka با زبان برنامه‌نویسی جاوا(Java) نوشته شده‌اند.
واسط‌ پیام RabbitMQ: این واسط‌ پیام در ابتدا توسط "Rabbit Technologies Ltd" توسعه یافت و سپس از سال 2013 تحت نرم‌افزار "Pivotal" قرار گرفت. برخلاف دو واسط ‌پیام قبلی، این واسط ‌پیام با "Erlang" نوشته شده است.

قصد انجام پروژه خاصی را دارید؟

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

با ما تماس بگیرید

مشاوره با ما