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

الگوی آمبولانس

الگوی آمبولانس

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

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

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

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

 

منبع: مجموع دروس معماری نرم افزار مارک ریچارد