در این مقاله، می‌خواهم الگوی طراحی بسیار ساده – الگوی Timeout – برای طراحی میکروسرویس انعطاف‌پذیر را به شما نشان دهم. الگوی Timeout یکی از ساده ترین تکنیک هاست.

ما هر چند وقت یکبار بدون هیچ دلیل واضحی کندی برنامه را تجربه می کنیم. حتی برای برنامه هایی مانند google.com ممکن است برای همه ما اتفاق بیفتد. در معماری میکروسرویس، یک سرویس (A) به سرویس دیگر (B) بستگی دارد، گاهی اوقات به دلیل برخی مشکلات شبکه، سرویس B ممکن است مطابق انتظار پاسخ ندهد. این کندی می تواند سرویس A را تحت تاثیر قرار دهد و همچنین A منتظر پاسخ B برای ادامه بیشتر است. از آنجایی که این مسئله غیر معمول نیست، بهتر است هنگام طراحی میکروسرویس های خود، این مسئله در دسترس نبودن سرویس را در نظر بگیرید. به طوری که ما می توانیم خدمات اصلی را همانطور که انتظار می رود کار کنیم حتی زمانی که خدمات وابسته در دسترس نیستند.

timeout pattern

timeout pattern

 

 

 

از آنجایی که این مشکل غیر معمول نیست، بهتر است با تنظیم یک بازه زمانی برای هر تماس شبکه، مشکلات کندی/عدم دسترسی این سرویس را در هنگام طراحی Microservices در نظر بگیرید. به طوری که ما می توانیم خدمات اصلی را همانطور که انتظار می رود و پاسخگو باشد، حتی زمانی که خدمات وابسته در دسترس نیستند، داشته باشیم.

 

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

 

آنچه خواهیم دید

مزایای Timeout

  • در این رویکرد، ما هیچ موضوعی را به طور نامحدود در سرویس محصول مسدود نمی کنیم
  • هر گونه رویداد غیرمنتظره در طول تماس شبکه در عرض 3 ثانیه به پایان می رسد.
  • خدمات اصلی به دلیل عملکرد ضعیف خدمات وابسته تحت تأثیر قرار نمی گیرند.
timeout pattern

timeout pattern

معایب Timeout

ما همچنان threads را به مدت 3 ثانیه مسدود می کنیم. هنوز هم می تواند برای برنامه هایی که درخواست های همزمان زیادی دریافت می کنند مشکل ساز باشد.

timeout pattern

timeout pattern