برنامه نویسی

دور زدن مدار – جامعه dev

این احتمالاً یکی از مفیدترین الگوهای “ابر” در آنجا است و اجرای آن بسیار آسان است.

مقالات و پیاده سازی های عالی مانند پولی وجود دارد
در حال حاضر در اینترنت در مورد این الگوی پس چرا یکی دیگر؟

کرتاسه یا بی تحرک است.

سقراط 469-399 قبل از میلاد ، فیلسوف

که ترجمه می شود:

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

من با خواندن ، اجرای و نوشتن در مورد چیزی که با من بچسبید بهتر آموخته ام.

مشکل

تقریباً هر برنامه با سایر خدمات یا منابع ارتباط برقرار می کند و آنها شکست می خورند …

دلایل:

  • اتصالات شبکه آهسته
  • تایم
  • منابعی که بیش از حد متعهد یا به طور موقت در دسترس نیست
  • انتشار
  • OTC

هنگامی که این اتفاق بیفتد سیستم ما ناپایدار ، غیرقابل اعتماد ، شکننده و شکست می خورد.

بیایید با نمونه ای از یک سرویس از راه دور ناکامی برویم ، بیایید بگوییم سناریوی زیر را داریم

  • سرویس از راه دور پس از 60 ثانیه از زمان خارج می شود
  • خدمات ما 30 req/s می شود
  • زمان پاسخ معمول 1s است
  • هر درخواست 1 مگابایت رم طول می کشد

در برنامه ما چه اتفاقی می افتد؟

  • درخواست فعلی منابع را برای برقراری تماس و بلوک (یا در انتظار) برای 60 ثانیه می گیرد
  • تمام درخواست های مربوط به همان سرویس از همان سرنوشت رنج می برند
  • تقریباً 1800 درخواست در پایان دهه 60 منتظر پاسخ خواهد بود
  • تقریباً 1800 مگابایت رم در پایان دهه 60 استفاده می شود
  • کلیه مشتریانی که با خدمات ما تماس می گیرند به همان روش شکست می خورند
  • آبشارهای شکست
  • زمان پاسخ از پشت بام می گذرد و به دلیل زمان بندی برای هر درخواست 60s خواهد بود
  • SLA ، ممکن است ، نقض شود
  • طوفان کامل در حال شکل گیری است

موارد فوق نمونه ای ساده است اما خیلی دور از ذهن نیست.

راه حل

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

  • بسته ، به این معنی که اعدام ادامه خواهد یافت
  • باز ، به این معنی که اجرای آن ادامه نخواهد یافت و یک استثنا را پرتاب می کند یا یک خطا را برمی گرداند (خاص اجرای)
  • نیمه باز ، به این معنی که برخی از اعدام ها پس از مدتی مجاز هستند تا بتوانند سرویس از راه دور را بررسی کنند و بر اساس پاسخ ، مدار را باز یا بسته کنند

برای دانش عمیق تر در مورد این الگوی لطفا مقاله های عالی زیر را بخوانید

فواید

با استفاده از یک قطع کننده مدار مزایای زیر را داریم:

  • به صورت کنترل شده شکست بخورند
  • شکست سریع
  • منابع سرور را ذخیره کنید
  • حفظ زمان پاسخ (SLA)
  • هنگام باز شدن مدار به عنوان مثال ، شکست های مختلف را انجام دهید
    • هدایت به منابع دیگر
    • پس از تلاش مجدد پس از آن صرفه جویی کنید
    • OTC

اجرای

دو اجرای قطع کننده مدار وجود دارد.
آنها همان فلسفه را به اشتراک می گذارند اما در C# نوشته شده اند و می روند.
هر دو پیاده سازی دارای یک رابط ارائه دهنده تنظیم هستند که می تواند اجرا شود
برای به دست آوردن تنظیمات از هرجای دیگر. یک تنظیم تنظیمات در حافظه وجود دارد که
تنظیمات را در حافظه نگه می دارد.
هر دو اجرای مبتنی بر کلیدی هستند به این معنی که برای هر کلید
این اجرای یک مدار جداگانه را فراهم می کند که در واقع دولت است.
تنظیم زیر برای هر کلید وجود دارد:

  • آستانه خرابی که مدار در آن باز می شود
  • مدت زمان آزمایش مجدد بعد از مدت زمان سفر مدار ، دولت را نیمه باز می کند
  • آستانه موفقیت را دوباره امتحان کنید پس از چند ترمیم موفق ، مجدداً تنظیم و بسته می شود
  • آستانه اعدام حداکثر دوباره تعریف می کند که تعداد زیادی از قیام در حالت نیمه باز مجاز است

اجرای C# را می توان @ clouddotnet یافت.
این اجرای عمومی ، ناهمزمان و موضوع ایمن و بدون قفل است.

اجرای GO را می توان @ gocloud یافت.
اجرای آن ایدیوماتیک و “goroutine” ایمن است.

تفاوت

  • از آنجا که GO ژنریک ندارد ، این عمل برای اجرای یک رابط و خطایی را برمی گرداند تا نوع ریخته گری لازم باشد

ارباب

وبلاگ من در GitHub میزبان است بنابراین برای هرگونه تغییر ، بهبود یا رفع
می توانید یک مسئله را باز کنید یا درخواست کشش ارسال کنید.

در مورد هر دو پیاده سازی نیز همین اتفاق می افتد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا