مسیج برورکر (Message Broker) چیست؟
مسیج بروکرها یک تکنولوژی ارتباط بین برنامه ای هستند که به ایجاد یک ارتباط یکپارچه در معماری سیستم های ابری، میکروسرویس ها و Serverless کمک می کنند. یک مسیج بروکر نرم افزاری است که به برنامه ها، سیستم ها و سرویس ها را در انتقال و جابجایی پیام میان یکدیگر کمک می کند. در اینجا یک پیام (Message) می تواند در خواست ثبت یک لاگ، ارسال یک متن ساده از یک سرویس به سرویس دیگر و یا ارسال یک دیتا مدل پیچیده به چند دریافت کننده باشد. مسیج بروکرها عمل انتقال پیام ها را با ترجمه پیام ها با استفاده از پروتکل های قراردادی انجام می دهند که این قابلیت به سرویس هایی که به یکدیگر وابسته هستند کمک می کند تا با یکدیگر "گفتگو" کنند حتی اگر در زبان ها و پلتفرم های جداگانه ای پیاده سازی شده باشند.
مسیج بروکرها ماژول های نرم افزاری به همراه Messaging Middleware یا Message-Oriented Middleware (MOM) هستند که این نوع از میان افزارها به توسعه دهندگان در استانداردسازی جریان داده ها بین کامپوننت های نرم افزاری کمک می کند که در نهایت باعث می شود تا توسعه دهندگان بر روی منظق برنامه خود تمرکز بیشتری بگذارند و نگران نحوه ارتباط بین سرویس ها نباشند. این میان افزارها می توانند بعنوان یک لایه ی ارتباطی توزیع شده میان برنامه ها عمل کنند و در واقع نقش یک پل ارتباطی را میان پلتفرم ها بازی می کنند. مواردی نظیر اعتبارسنجی، ذخیره پیام، مسیریابی و تحویل پیام از جمله کارهای یک مسیج بروکر است که میتواند انجام دهد. فرقی نمی کند که چند دریافت کننده برای یک پیام وجود دارد، فعال یا غیر فعال بودن و یا موقعیت دریافت کنندهای یک پیام اهمیتی ندارد، مسیج بروکرها به ارسال کنندگان پیام این اجازه را می دهند تا با خیال راحت پیام خود را ارسال کنند و با ارائه امکانات ذکر شده گره و اتصال موجود بین فرایندها و سرویس ها را از بین می برند.
صف پیام (Message Queue)
برای فراهم سازی یک فضای ذخیره سازی قابل اطمینان و تحویل تضمین شده یک پیام، مسیج بروکرها اغلب به یک ساختار یا یک بخشی به نام صف پیام(Message Queue) متکی هستند که وظیفه ذخیره و مرتب سازی پیام ها را تا زمان دریافت شدن توسط یک دریافت کننده بر عهده دارد. یک صف، در واقع یک فضای ذخیره سازی پیام می باشد که پیام ها دقیقا به همان شکلی که وارد صف شدند تا زمان قبول(دریافت) توسط یک دریافت کننده نگهداری می شوند.
پیام رسانی غیرهمزمان (Asynchronous messaging)
Asynchronous messaging اشاره به نوعی از ارتباط بین برنامه ای می کند که توسط مسیج برورکرها پشتبانی می شود. این راهکار باعث می شود تا جلوی از دست رفتن داده های ارزشمند گرفته شود و سیستم در شرایطی نظیر قطع و وصل شدن مکرر ارتباطات و یا مشکلات رایج در سطح شبکه به فعالیت خود ادامه دهد. پیام رسانی غیرهمزمان تضمین می کند که پیامها توسط دریافت کننده تنها "یک بار" و آن هم با ترتیبی که قبلا ثبت شد دریافت شود. بطور مثال یک پیام منحصر به فرد با وصل شدن مجدد دریافت کننده بصورت چندباره دریافت نمی شود.
انواع مسیج بروکرها
مسیج بروکرها از دو الگوی ساده جهت توزیع پیام ها استفاده می کنند:
Point-to-point messaging:
این یک الگوی توزیع می باشد که توسط صف پیام مورد استفاده قرار می گیرد و یک رابطه "یک به یک" را میان یک ارسال کننده و یک دریافت کننده نمایندگی می کند. هر پیام در صف تنها یک بار به یک دریافت کننده ارسال می شود و این عمل فقط یک بار اتفاق می افتد. این الگو زمانی استفاده می شود که تنها نیاز به یک مرتبه اجرای یک دستور در یک لحظه وجود دارد. بطور مثال برای این الگو می توان به عملیات انتقال وجه اشاره کرد که میان پرداخت کننده و دریافت کننده برای هر پرداخت انجام می شود و این تراکنش کافیست یک بار در یک زمان روی دهد.
Publish/Subscribe Messaging:
در این الگو که اغلب به pub/sub معروف است، تولید کننده هر پیام، پیام را را درون یک تاپیک(Topic) قرار می دهد و چندین دریافت کننده ی پیام(Message Consumers)، در آن تاپیکی که میخواهند از آن پیام دریافت کنند مشترک(Subscribe) می شوند. همه پیام های منتشر شده در یک تایپک میان همه ی مشترکان یک تایپک توزیع می شود، این یک روش پخش توزیع شده می باشد که یک رابطه "یک به چند" میان ارسال کننده پیام و دریافت کنندگان آن پیام در آن حاکم می باشد. برای مثال، اگر یک شرکت هواپیمایی قصد انتشار بروزرسانی اطلاعاتی درباره ساعت پروازها و یا تاخیر یک پرواز داشته باشد، چندین بخش می توانند از این اطلاعات استفاده کنند: قسمت خدمه هایی که وظیفه سوخت گیری یا تعمیر و یا نگهداری هواپیما را بر عهده دارند، حمل کنندگان چمدانها، خدمه پرواز و خلبانان که آماده پرواز بعدی می شوند و نمایشگرها که اطلاعات مربوط به پرواز را نمایش می دهند. در این حالت یک ارسال کننده پیام و چندین دریافت کننده پیام (pub/sub) برای این سناریو مناسب می باشد.
تفاوت مسیج بروکر با API
ای پی آی ها معمولا جهت ارتباط میان سرویس ها در یک معماری میکروسرویس مورد استفاه قرار می گیرند. عبارت Representational State Transfer (REST) مجموعه از اصول و قوانین را تعریف می کند که یک توسعه دهنده با استفاده از آنها اقدام به ایجاد یک وب سرویس میکند. هر سرویسی با رعایت این اصول قادر به تعامل با دیگر سرویس ها خواهد بود.Rest Apiها از HTTP برای ارتباط استفاده می کنند و به دلیل استاندارد بودن پروتکل HTTP و بکارگیری آن در اینترنت، Rest APIها بطور گسترده ای شناخته شده اند و مورد استفاده قرار گرفته اند. HTTP یک پروتکل Request/Response می باشد که برای ارسال درخواست و دریافت پاسخ بصور همزمان مورد استفاه قرار میگیرد، این بدین معنا می باشد که زمانی که یک سرویس درخواستی را از طریق Rest API ارسال می کند، انتظار پاسخ آن را بدون فاصله و بصورت همزمان دارد اما در مقابل، مسیج برورکرها قادر به ارتباط به صورت غیر همزمان می باشند، بنابراین سرویس ارسال کننده درخواست نیاز به انتظار جهت دریافت پاسخ را ندارد. این ویژگی تحمل پذیری سیستم در مقابل خطاها و پایداری آن را افزایش می دهد.
تفاوت مسیج بروکر ها با پلتفرمهای جریان رویداد (Event Streaming Platforms)
در حالی که مسیج بروکر ها دو یا چند الگوی پیام رسانی را پشتیبانی می کنند، پلتفرم های جریان داده تنها از الگوی pub/sub پشتیبانی می کنند. پلفترمهای جریان داده جهت پشتبانی از حجم زیاد مسیج ها و بصورت کاملا مقیاس پذیر توسعه داده شده اند. بر خلاف مسیج بروکر ها، پلتفرم های جریان داده نمی توانند تحویل یک پیام را تضمین کنند و یا امکان فهمیدن اینکه کدام دریافت کننده پیام را دریافت کرده ندارند. پلتفرمهای جریان داده مقیاس پذیری بالاتری نسب به مسیج بروکر ها دارند اما در مقابل ویژگی های کمتری را در حوزه تحمل پذیری خطا(مانند باز ارسال پیام) دارند.
تفاوت مسیج بروکر با ESB
یک ESB(Enterprise Service Bus) یک الگوی معماری می باشد که گاها در معماری های سرویس گرا استفاده می شود. زمانی که از ESB استفاده میکنیم، در واقع در حال متمرکز سازی ارتباطات و پروتکل های استفاده شده در پلفترم نرم افزاری خود هستیم که در نهایت قصد داریم به یک "زبان مشترک" میان سرویس های خود برسیم تا به راحتی بتوانند کارکردهای خود را میان دیگر سرویس ها اشتراک بگذارند. بطور مثال، یک درخواست با فرمتی مثل XML دریافت می شود و به فرمت JSON تبدیل می شود. از جمله کارهای یک ESB انتقال خودکار پیام ها، مسیریابی، اتصال سرویس ها به یکدیگر می باشد. ESB ها عموما پیچیده هستند و پیاده سازی و استفاده از آنها دشوار می باشد و نیاز به زمان و هزینه بالا برای بکار گیری دارند، فرایند خطایابی و تغییر محیط در این سیستم ها و همچنین به روز رسانی آنها از مواردی می باشد که باعث می شود استفاده از آنها برای توسعه دهندگان و معماران سیستم هزینه زا باشد. در مقابل مسیج بروکرها جایگزین سبک تری برای ESB ها هستند که قابلیت هایی مانند ماکنیزم ارتباط بین سرویس ها، چیزی مشابه ای ESB ها بصورت سبک تر و با هزینه کمتری دارند.
موارد استفاده از مسیج برورکر
استفاده از مسیج بروکرها می تواند نیازمندی های مختلف یک بیزینس را پوشش دهد. آنها در زمانها و جاهایی که نیاز به ارتباطات میان سرویسی و اطمینان از تحویل یک پیام از یک سرویس به سرویس دیگر=وجود دارد بسیار سودمند هستند. مسیج بروکرها اغلب در موارد زیر مورد استفاده قرار می گیرند:
بسیار حائز اهمیت است که یک پرداخت که توسط یک کاربر انجام شده تنها یک بار ارسال شود، منظور از ارسال یک باره یک درخواست این است که بطور مثال انتقال وجه از حساب الف به حساب ب که توسط کاربر انجام شده است بصورت دو باره یا چند باره انجام نشود و یا زمانی که شبکه قطع می باشد، فرایند نقل و انتقال وجه پس از برطرف شدن مشکل شبکه به درستی انجام شود.
مشابه سناریو تراکتش مالی که در بالا ذکر شد، اگر قصد راه اندازی یک سیستم فروشگاهی آنلاین را داشته باشید و پایداری این سیستم برای شما مهم باشد، نیاز دارید تا از مسیج برورکر ها بعنوان ابزار جهت ارسال درخواست های مهم مانند ثبت سفارش استفاده کنید. در این نوع درخواست ها بسیار حائز اهمیت می باشد که درخواست ثبت سفارش کاربر در زمان خرابی یا مشکل میان سرویس ها مختلف به درستی انجام شود.
اگر سرویس های که در حوزه کاری خود با آن سر و کار دارید نیاز دارند که بسیار دقیق(از لحاظ زمانبندی) باشند و یا از لحاظ مسائل امنیتی ممکن است هدف برخی از خطرات قرار بگیرید، مسیج برورکرها می توانند انتخاب مناسبی جهت رمز نگاری end-to-end برای انتقال پیام ها باشند.
در نوشته های بعدی با انواع مسیج بروکرها و نحوه بکارگیری آنها آشنا می شویم.