هنگامی که یک سفر جدید ایجاد میشود، سرویس Trip Management یک پیام ایجاد شدن سفر را ارسال میکند و هر سرویسی که علاقهمند به اطلاع از این واقعه در سیستم باشد، میتواند در کانال ارتباطی ثبتنام کند. برای مثال در سیستم بالا سرویسهای Dispatcher در مورد ایجاد یک سفر جدید حساسیت دارد و بعد از وقوع این واقعه در سیستم عملیات خاصی را شروع میکند.
سیستمهای مختلفی برای انتخاب به عنوان زیرساخت ارسال و دریافت پیام وجود دارد که بهتر است سیستمی را انتخاب کنید که از زبانهای برنامهنویسی مختلف پشتبانی کند.
برخی از سیستمهای موجود پروتکلهای استانداردی را برای انتقال پیام انتخاب و استفاده کرده اند و در مقابل سیستمهایی هم وجود دارند که روشهای ابداعی و اختصاصی خود را برای انتقال پیام پیاده سازی کرده اند.
تعداد زیادی سیستم Open Source برای انتخاب وجود دارد مثل RabbitMQ, Apache Kafka, Apache ActiveMQ و NSQ. هرچند تفاوتهای قابل تشخیص و بررسی بین این سیستمها وجود دارد اما تمامی این سیستمها از ساختارهایی برای ارسال پیام و ایجاد و مدیریت کانال پشتیبانی میکنند و تلاش میکنند ویژگیهایی مثل قابلیت اطمینان، بهرهوری بالا و توزیع شدگی را داشته باشند.
مزایای بسیاری را میتوان برای استفاده از سیستمهای Messaging برشمرد که در ادامه برخی از این مزایا را با هم بررسی میکنیم.
جداسازی کامل کلاینت از سرویس: در این روش کلاینت پیامی را با فرمت خاص برای یک کانال ارتباطی ارسال میکند. در این روش کلاینت کاملا از روش ارسال پیام و سرویسی که پیام را دریافت میکند بی اطلاع است. نکته قابل توجه در این روش ارتباطی عدم نیاز کلاینت به دانستن موقعیت سرویس است و نیازی به روالهای Discovery ندارد.
عدم نیاز به صحت همزمان سرویس و کلاینت: هنگامی که از روشی مبتنی بر درخواست و پاسخ استفاده میکنید مثل HTTP در لحظه برقرای ارتباط کلاینت و سرور هردو باید همزمان اجرا باشند و به درستی خدمات خود را ارائه دهند. اما در این روش این احتمال وجود دارد هنگام ارسال پیام از طرف کلاینت، سرویس قابل دسترسی نباشد و پیام در سیستم باقیمیماند تا زمانی که سرویس خدمات رسانی خود را شروع کند و پیام به سرویس تحویل داده میشود.
مشهود بودن ویژگیهای IPC: هنگامی که از IPC استفاده میکنیم، در حال استفاده از سرویسی خارج از برنامه جاری هستیم. برخی از روشهای برقراری ارتباط به گونه ای طراحی شده اند که این حس جدا بودن به برنامه نویس منتقل نشده و بابت همین موضوع هم مواردی مانند احتمال خرابی شبکه یا ... از چشم برنامه نویس پنهان میماند. اما ماهیت برقراری ارتباط به روش Messaging کاملا این جدا بدون را نمایان میسازد.
با تمام مزایایی که میتوان برای این روش ارتباطی قائل شد معایبی نیز وجود دارد که هنگام انتخاب روش برقراری ارتباط باید به آن دقت کرد.
پیچیدگیهای عملیاتی و زیرساختی: هرچند این روزها با پیشرفتهایی که سیستمهای نرم افزاری داشته اند کار نصب و راه اندازی آنها به شدت ساده شده است و با وجود ابزارهایی مثل داکر این پیچیدگی به صفر میل میکند، اما کماکان برای استفاده از این روش نیاز به افزودن جز جدیدی به سیستم داریم که جدای از مسائل نصب و راه اندازی نیاز به نگهداری و مانیتورینگ دارد.
پیچیدگیهای پیاده سازی: هنگامی که از این روش ارتباطی استفاده میکنیم در صورتی که نیاز داشته باشیم به ازای یک درخواست پاسخی نیز دریافت کنیم باید کانالی برای دریافت پاسخ تخصیص دهیم و شناسهای باید به درخواست تخصیص دهیم تا هنگام دریافت پاسخ بتوانیم پاسخ دریافتی را به یک درخواست متصل کنیم.
حال که با عملکرد کلی سیستمهای Messaging آشنا شدیم به سراغ یکی دیگر از روشهای ارتباطی یعنی Request/Response میرویم.
ارتباط Sync و Request/Response:
هنگام استفاده از ارتباط متقارن و روش Request/Response کلاینت درخواستی را برای سرویس ارسال نمونده و منتظر پاسخ میماند، سرویس دهنده نیز با دریافت یک درخواست شروع به پردازش آن نموده و نتیجه نهایی را به درخواست کننده باز میگرداند. تفاوت اصلی بین این روش و روش قبلی در این است که کلاینت فرض میکند که سرویس در بازه زمانی معقولی پاسخی به وی خواهد داد.
پروتکلهای زیادی برای پیاده سازی این روش ارتباطی وجود دارند که دوتا از مشهور ترین این پروتکلها Rest و Thrift است.
سرویسهای REST:
یکی از متداول ترین روشهای پیاده سازی IPC که این روزها بسیار مورد توجه توسعه دهندگان قرارداد REST است که با توجه به تعریفهای داخلی آن معمولا از پروتکل HTTP استفاده میکند.
سرویسهای REST اساسا بر مبنای Resourceها طراحی و پیاده سازی میشوند که هر Resource یک شی خاص در کسب و کار است، مثل مشتری، محصولات و ...
این روش ارتباطی از ترکیب Verbها و آدرس برای دستیابی صحیح به یک Resource استفاده میکند. برای مثال دسترسی به آدرس:
nikamooz.com/api/course
با توجه به نوع درخواست که میتواند GET یا POST باشد قابلیت دریافت یک مجموعه اموزشی یا به روزرسانی آن را انجام میدهد. در این روش ارتباطی این امکان وجود دارد که استفاده کننده با توجه به شرایط، درخواست دریافت نتیجه بافرمتی خاص مثل XML یا JSON را داشته باشد.