خانه / پایگاه داده (Database) / سرویس بروکر Service Broker چیست؟

سرویس بروکر Service Broker چیست؟

سرویس بروکر Service Broker چیست؟

نویسنده:

انتشار:

به‌روزرسانی:

تعداد نظرات: 0

زمان مطالعه: 10 دقیقه

سرویس بروکر از آن دسته مفاهیم کلیدی و کمتر شناخته‌شده حوزه فناوری اطلاعات و معماری نرم‌افزاری مدرن است که بیشتر در سناریوهای پیچیده به کار می‌رود. همچنین این سرویس در بسترهایی مانند SQL Server و زیرساخت‌های ابری نقش مهمی دارد و به‌عنوان یک واسط ارتباطی هوشمند بین سرویس‌ها یا ماژول‌ها عمل می‌کند.

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

سرویس بروکر چیست؟

سرویس بروکر (Service Broker) یک پل استراتژیک میان مصرف‌کننده‌ خدمات و ارائه‌دهنده‌ آن‌ها است. اگر بخواهیم موضوع را ساده‌تر بیان کنیم، باید بگوییم که این سرویس نقش واسطه‌ای هوشمند را ایفا می‌کند که فرایند شناسایی، سفارش، راه‌اندازی و اتصال سرویس‌ها را به شکلی خودکار انجام می‌دهد. البته باید بدانید که این فقط ظاهر ماجرا است.

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

در زیرساخت‌هایی مانند Red Hat OpenShift، سرویس بروکرها بر پایه استاندارد Open Service Broker API عمل می‌کنند. این ساختار باعث می‌شود توسعه‌دهندگان بتوانند سرویس‌های ابری و محلی را بدون نیاز به مداخله مستقیم تیم IT، به شکل خودکار به اپلیکیشن‌های خود متصل کنند.

از طرف دیگر، مفهوم service brokering در سطحی وسیع‌تر شامل ارائه‌ خدمات نرم‌افزاری، زیرساخت‌های فناورانه و دیگر خدمات IT با هزینه‌ای مقرون‌به‌صرفه است. Service Broker در این نقش، مانند مشاوران یا پیمانکاران مستقل عمل می‌کنند و به شرکت‌هاس مختلف در زمینه‌هایی مانند تحلیل داده‌ها، پیاده‌سازی نرم‌افزارهای SaaS و استفاده از سرویس‌های ابری مشاوره و خدمات ارائه می‌دهند.

کاربرد Service Broker

برای درک بهتر این که Service Broker چیست؟ و چه کاربردی دارد، در ادامه با هم یک مثال ساده را بررسی می‌کنیم.

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

اجزای مهم Service Broker

Service Broker از ۴ جزء مهم تشکیل شده است که هر کدام را به‌صورت جداگانه توضیح می‌دهیم:

  • Message types
  • Contracts
  • Queues
  • Service program

برای فهم بهتر اجزای سرویس بروکر، بهتر است ابتدا Service Broker نصب و کانفیگ کنیم:

برای فعال سازی Service Broker از کوئری زیر استفاده کنید:

نکته ای که لازم است به آن توجه کنید، این است که فعال سازی Service Broker به‌ازای دیتابیس انجام می‌شود. برای دیدن فهرست دیتابیس‌هایی که Service Broker برای آن‌ها فعال است، می‌توانید از دستور زیر استفاده کنید:

۱. نوع پیام (Message Types)

ماهیت اصلی Service Broker تسهیل ارسال پیام بین سرویس‌هایی است که با یکدیگر در تعامل‌اند. این پیام‌ها در واقع همان Message Type‌هایی هستند که اطلاعات یا رکوردهای ما را منتقل می‌کنند. هر پیام دارای بدنه‌ای است که به‌صورت پیش‌فرض از نوع VarBinary تعریف می‌شود. هنگام تعریف یک Message Type، لازم است نام و نوع داده (DataType) آن مشخص شود.

سرویس بروکر در حال حاضر از چهار نوع قالب داده برای پیام‌ها پشتیبانی می‌کند:

۱. XML ساخت‌یافته (Well-formed XML)

۲. XML اعتبارسنجی‌شده بر اساس یک XML Schema Collection

۳. بدون اعتبارسنجی (مثلا برای داده‌های باینری)

۴. پیام خالی (بدون بدنه)

در مثال زیر، برای ارسال و دریافت پیام‌ها، دو Message Type از نوع XML تعریف کرده‌ایم:

  • Request Message برای ارسال پیام‌ها
  • Response Message برای دریافت پاسخ‌ها

هر دو نوع پیام از قالب XML استفاده می‌کنند.

۲. قرارداد‌ها (Contracts)

service broker برای ارسال پیام‌ها از منطق صف یا Queue استفاده می‌کند که برای تحقق این امر نیاز به یک قرارداد دارد. در این قرارداد مشخص می‌شود که آغازگر (Initiator) و دریافت‌کننده پیام (Target) کدام سرویس است. تعریف Contract بخش‌های مختلفی دارد که شامل موارد زیر است:

  • Send By Initiator
  • Send By Target
  • Send By ANY

در مثال زیر، یک قرارداد  با نام [HelloWorldContract] ایجاد کردیم که در آن (Request Message) ارسال‌کننده و (Response Message) دریافت‌کننده پیام خواهند بود. ارسال‌کننده را با Send By Initiator و دریافت‌کننده پیام را با Send By Target مشخص کردیم.

۳. صف‌ها (Queues)

صف، محل ذخیره پیام‌ها در Service Broker است، شما می‌توانید مانند جداول معمولی روی صف، کوئری select را اجرا کنید و از وضعیت صف با خبر شوید.

در مثال زیر، براساس Initiator و Target دو صف ایجاد کرده‌ایم که در آن پیام‌ها توسط سرویس که در ادامه مقاله به آن اشاره خواهیم کرد، به صف هدایت می‌شوند.

۴. سرویس (Service)

اگر بخواهیم یک تعریف کلی و ساده از Service داشته باشیم، می‌توان گفت وظیفه service هدایت پیام‌ها به صف مورد نظر است. در واقع سرویس و صف به هم وابستگی دارند .هنگامی که Initiator یا Target پیامی را ارسال یا دریافت می‌کنند، سرویس پیام‌ها را به صف‌های مناسب هدایت می‌کند به‌طور مثال Initiator شروع به ارسال پیام می‌کند، سرویس، پیام را که از سمت Initiator ارسال شده است، به صف مورد نظری که در مثال ما Target Queue است، هدایت می‌کند و این فرایند تا زمان به پایان رسیدن مکالمه، ادامه خواهد یافت. در مثال زیر بر اساس هر کدام از صف‌هایی که در بالا ایجاد کردیم‌، سرویس تعریف شده است.

پس از ایجاد زیرساخت‌های اصلی Service Broker، آماده‌ایم که ارسال پیام‌ها را شروع کنیم. این کار توسط  BEGIN DIALOG CONVERSATION انجام می‌شود.

مکالمات (Dialogue یا Conversations)

فرایند ارسال پیام با آغاز یک دیالوگ شروع می‌شود. دیالوگ مفهومی ساده اما کاربردی دارد و شامل سه مرحله اصلی ارسال پیام از طریق فرستنده، دریافت توسط گیرنده و در نهایت دریافت، تایید و پایان دیالوگ است. در service broker برای آغاز ارسال پیام، نیاز به Begin Dialog Conversation است که شامل یک سرویس آغازگر (Initiator)، سرویس مقصد (Target) و همچنین قرارداد است. اگر بخواهید می‌توانید تعیین کنید که آیا از رمزگذاری استفاده شود یا خیر. در حال حاضر ما برای ساده‌سازی فرایند چیزی را رمزگذاری نمی‌کنیم. پیگیری پیام بین سرویس‌ها توسط یک UNIQUEIDENTIFIER  انجام می‌شود. در مثال زیر، یک دیالوگ ایجاد کرده‌ایم:

قبل از این که سراغ مرحله بعد برویم، بهتر است بر روی Queue دستور select را اجرا کنیم:

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

بعد از اجرای کوئری بالا، می‌توانید دستور select * from InitiatorQueue را برای مشاهده وضعیت صف اجرا کنید.

مقایسه سرویس بروکر با Message Queue و Event Bus

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

به‌عنوان‌مثال، اگر به‌دنبال ارسال اعلان‌های فوری به چند سرویس (به‌صورت هم‌زمان و بدون نیاز به تضمین دریافت پیام) باشید، Event Bus می‌تواند گزینه مناسبی باشد. در طرف مقابل، اگر نیاز به صف‌بندی پیام‌ها و اطمینان از تحویل آن‌ها به یک مصرف‌کننده خاص دارید، Message Queue انتخاب بهتری به شمار می‌آید. البته زمانی که پای معماری‌های پیچیده و نیاز به ترکیب چندین الگوی ارتباطی در میان باشد، نقش Service Broker پررنگ می‌شود. در واقع این ابزار می‌تواند پیام‌ها را بین سرویس‌ها هدایت، ترجمه و مدیریت کند. در جدول زیر می‌توانید تفاوت‌های کلیدی Service Broker با Message Queue و Event Bus را مشاهده کنید و اطلاعات کاملی درباره این سه مفهوم به دست بیاورید.

ویژگی‌ها
Event Bus
Message Queue
Service Broker
مدل ارتباطی
Publish-Subscribe (یک‌به‌چند)
Point-to-Point (تولیدکننده به مصرف‌کننده)
ترکیبی: Pub-Sub، Point-to-Point، Many-to-Many
ذخیره‌سازی پیام‌ها                              
ندارد، پیام‌ها در لحظه منتشر می‌شوند
دارد، تا زمان پردازش توسط مصرف‌کننده
دارد، همراه با قابلیت‌های پیشرفته مدیریت پیام
اطمینان از تحویل پیام                                       
تضمینی نیست
تضمینی است
تضمینی + امکانات افزوده مانند صف‌بندی، مسیریابی، فیلتر کردن
وابستگی بین اجزا
کم؛ ناشناس بین تولیدکننده و مصرف‌کننده
متوسط؛ آگاهی از صف
پایین؛ از طریق انتزاع و مدیریت مرکزی
زمان‌بندی اجرا                                
بلادرنگ (Real-time)
غیرهم‌زمان (Asynchronous)
قابل تنظیم (Real-time + Asynchronous)
مثال کاربردی                                  
اطلاع‌رسانی خروج کالا از انبار
پردازش سفارش‌های دریافتی
هماهنگی بین چند سرویس در یک فرایند پیچیده (برای مثال، در ارکستراسیون مایکروسرویس‌ها)
 
مزایای برجسته               
ساده، سریع، مناسب برای اعلان‌ها
مقاوم، قابل اعتماد برای انتقال داده
بسیار منعطف، مناسب برای معماری‌های پیچیده و چند الگویی
معایب                            
عدم تضمین تحویل، وابستگی به زمان‌بندی
صف ممکن است محدودیت عملکرد ایجاد کند
پیاده‌سازی پیچیده‌تر، نیاز به مدیریت پیشرفته

مزایای استفاده از سرویس بروکر در معماری سیستم‌ها

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

۱. کاهش وابستگی بین سرویس‌ها (Decoupling)

سرویس بروکر باعث می‌شود سرویس‌ها بدون وابستگی مستقیم به یکدیگر ارتباط برقرار کنند. هر سرویس تنها با بروکر در تعامل است و نیازی به آگاهی از سرویس گیرنده یا فرستنده دیگر ندارد. این ویژگی امکان توسعه، به‌روزرسانی و مقیاس‌پذیری مستقل سرویس‌ها را فراهم می‌کند.

۲. ارتباطات غیرهم‌زمان (Asynchronous Communication)

یکی از نقاط قوت سرویس Broker، پشتیبانی از ارتباطات غیرهم‌زمان است. در واقع سرویس‌ها بدون اینکه منتظر پاسخ بمانند، می‌توانند پیام‌هایی را ارسال کنند. این موضوع باعث افزایش سرعت پاسخ‌دهی سیستم و کاهش محدودیت عملکرد پردازشی می‌شود.

۳. مقیاس‌پذیری بالا (Scalability)

Service Broker با توزیع پیام‌ها در بین چند نمونه از یک سرویس، توان پاسخ‌گویی را افزایش می‌دهد. این مکانیزم امکان رشد سیستم و مدیریت حجم بالای درخواست‌ها را بدون کاهش کارایی فراهم می‌کند.

۴. پایداری و تحمل خطا (Reliability & Fault Tolerance)

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

۵. توزیع متوازن بار (Load Balancing)

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

۶. پشتیبانی از الگوهای ارتباطی متنوع

سرویس Broker از الگوهای مختلفی مانند Pub/Sub، Request/Reply و Event-Driven پشتیبانی می‌کند. این انعطاف‌پذیری اجازه می‌دهد که سیستم‌های مختلف با نیازهای ارتباطی خاص خود، به‌راحتی در معماری ادغام شوند.

۷. پیام‌رسانی تراکنشی (Transactional Messaging)

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

۸. امنیت پیشرفته (Security)

سرویس بروکرها در بیشتر اوقات امکاناتی برای احراز هویت، مجوزدهی و رمزنگاری ارائه می‌دهند. این ویژگی‌ها تضمین می‌کنند که فقط سرویس‌های مجاز بتوانند به پیام‌ها دسترسی داشته باشند و داده‌ها در مسیر ارتباطی محافظت شوند.

۹. سهولت در یکپارچه‌سازی (Ease of Integration)

به کمک بروکرها، فرآیند اتصال سرویس‌های جدید به سیستم با ارائه یک رابط استاندارد ساده می‌شود. توسعه‌دهندگان می‌توانند بدون تغییر در سرویس‌های دیگر، اجزای جدید را به‌راحتی اضافه یا جایگزین کنند.

۱۰. مانیتورینگ و مشاهده‌پذیری (Monitoring & Observability)

معمولا Service Broker ابزارهایی برای رصد جریان پیام‌ها، خطاها و زمان پاسخ ارائه می‌دهند. این ابزارها به تیم‌های فنی شما کمک می‌کنند تا وضعیت سیستم را در لحظه بررسی و مشکلات احتمالی را سریعا شناسایی و رفع کنند.

۱۱. پشتیبانی از گردش‌کارهای پیچیده (Complex Workflows)

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

۱۲. انعطاف در استقرار (Flexible Deployment)

سرویس بروکرها می‌توانند در محیط‌های مختلفی از جمله لوکال، ابری یا ترکیبی (Hybrid) مستقر شوند. این ویژگی امکان انتخاب زیرساخت مناسب را با‌توجه‌به نیازهای تجاری و فنی فراهم می‌کند.

معایب استفاده از سرویس بروکر در معماری سیستم‌ها

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

۱. نقطه ضعف تک‌مرکزی (Single Point of Failure)

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

۲. افزایش تاخیر در ارسال پیام‌ها (Message Latency)

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

۳. پیچیدگی در مدیریت و پیکربندی (Management Complexity)

برای مدیریت صف‌ها، مسیر‌دهی پیام‌ها، مدیریت خطا و مقیاس‌پذیری در یک سرویس Broker به مهارت و تجربه فنی بالایی نیاز دارید. در واقع تنظیمات نادرست یا مدیریت ضعیف می‌تواند عملکرد سیستم را به‌شدت کاهش دهد.

۴. دشواری در اشکال‌زدایی (Difficulty in Debugging)

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

۵. پیچیدگی در تامین امنیت (Added Security Complexity)

اضافه کردن سرویس Broker به معماری، پیچیدگی‌هایی در حوزه امنیت هم ایجاد می‌کند. در واقع شما برای جلوگیری از دسترسی غیرمجاز یا نشت اطلاعات، نیاز به اعمال کنترل دسترسی، رمزنگاری پیام‌ها و تامین ارتباطات امن وجود دارید. لازم به ذکر است که انجام این کارها به زیرساخت و نظارت دائمی نیاز دارد.

جمع‌بندی

در پاسخ به این‌که Service Broker چیست؟ باید گفت سرویس بروکر یکی از قابلیت‌های مهم SQL Server (از نسخه 2005 به بعد) است که امکان پردازش‌های غیرهمزمان (Asynchronous) را فراهم می‌کند. این ویژگی به توسعه‌دهندگان کمک می‌کند تا وظایفی مانند ارسال ایمیل یا پیامک را بدون ایجاد وقفه در روند اصلی برنامه اجرا کنند و به این ترتیب عملکرد سیستم را بهینه‌سازی کرده و قابلیت مقیاس‌پذیری آن را افزایش دهند.

 

منابع

redhat.com | ca.indeed.com | pandaquests.medium.com | linkedin.com | designgurus.io | dev.to

سوالات متداول

Service Broker با آگاهی از نرم‌افزارها و خدمات آنلاین، به سازمان‌ها کمک می‌کند تا راهکارهای مناسب را بر اساس نیازها و ترجیحات شان انتخاب کنند.

سرویس بروکر در IT یک واسطه است که بین ارائه‌دهنده و مصرف‌کننده خدمت قرار می‌گیرد و فرایند دسترسی، هماهنگی و تبادل خدمات را تسهیل می‌کند.

سرویس بروکر با واسطه‌گری میان خریدار و فروشنده، معامله را تسهیل کرده و در ازای آن کارمزد دریافت می‌کند؛ برخی نیز خدمات مشاوره و تحلیل ارائه می‌دهند.

فرصت‌های شغلی

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

سوالات متداول

فهرست محتوا

سرویس بروکر چیست؟


مقایسه سرویس بروکر با Message Queue و Event Bus