در سیستمهای توزیعشده مانند برنامههای کاربردی مبتنی بر میکروسرویس، خطر خرابی جزئی همیشه وجود دارد. به عنوان مثال، یک میکروسرویس/کانتینر ممکن است از کار بیفتد یا برای مدت کوتاهی در دسترس نباشد، یا یک ماشین مجازی یا سرور ممکن است از کار بیفتد. از آنجایی که مشتریان و خدمات فرآیندهای جداگانه ای هستند، یک سرویس ممکن است نتواند به موقع به درخواست مشتری پاسخ دهد. ممکن است این سرویس بیش از حد بارگیری شده باشد و به درخواست ها بسیار کند پاسخ دهد یا به دلیل مشکلات شبکه برای مدت کوتاهی قابل دسترسی نباشد.
برای مثال، صفحه جزئیات سفارش را از برنامه نمونه eShopOnContainers در نظر بگیرید. اگر زمانی که کاربر سعی میکند سفارشی را ارسال کند، میکروسرویس سفارشدهنده پاسخگو نباشد، اجرای نامناسب فرآیند مشتری (برنامه وب MVC) - برای مثال، اگر کد مشتری از RPCهای همزمان بدون مهلت زمانی استفاده کند - رشتههای در انتظار را به طور نامحدود مسدود میکند. برای یک پاسخ علاوه بر ایجاد یک تجربه کاربری بد، هر انتظاری که پاسخگو نیست، یک رشته را مصرف یا مسدود می کند، و رشته ها در برنامه های بسیار مقیاس پذیر بسیار ارزشمند هستند. اگر تعداد موضوعات مسدود شده زیادی وجود داشته باشد، در نهایت زمان اجرای برنامه ممکن است بدون رشته تمام شود. در آن صورت، برنامه به جای اینکه تا حدی پاسخگو نباشد، می تواند به صورت سراسری پاسخگو نباشد.
در یک برنامه کاربردی بزرگ مبتنی بر میکروسرویس، هر گونه خرابی جزئی را می توان تقویت کرد، به خصوص اگر بیشتر تعامل میکروسرویس های داخلی بر اساس تماس های HTTP همزمان (که یک ضد الگو در نظر گرفته می شود) باشد. به سیستمی فکر کنید که روزانه میلیون ها تماس دریافتی دریافت می کند. اگر سیستم شما طراحی بدی دارد که مبتنی بر زنجیرههای طولانی تماسهای HTTP همزمان است، این تماسهای ورودی ممکن است منجر به میلیونها تماس خروجی بیشتر شود (فرض کنید نسبت 1:4) به دهها میکروسرویس داخلی به عنوان وابستگی همزمان.
خرابی متناوب در یک سیستم توزیع شده و مبتنی بر ابر تضمین شده است، حتی اگر هر وابستگی به خودی خود در دسترس بودن عالی باشد. این یک واقعیت است که باید در نظر بگیرید.
اگر تکنیک هایی را برای اطمینان از تحمل خطا طراحی و اجرا نکنید، حتی خرابی های کوچک نیز می توانند تقویت شوند. به عنوان مثال، 50 وابستگی هر کدام با 99.99٪ در دسترس بودن، به دلیل این اثر موج دار، منجر به چندین ساعت توقف در هر ماه می شود. هنگامی که یک وابستگی میکروسرویس در حین رسیدگی به حجم بالایی از درخواستها با شکست مواجه میشود، این شکست میتواند به سرعت تمام رشتههای درخواست موجود در هر سرویس را اشباع کند و کل برنامه را از کار بیندازد.
برای به حداقل رساندن این مشکل، در بخش ادغام میکروسرویس ناهمزمان، استقلال میکروسرویس را اعمال میکند، این راهنما شما را تشویق میکند که از ارتباطات ناهمزمان در میان میکروسرویسهای داخلی استفاده کنید.
علاوه بر این، ضروری است که میکروسرویسها و برنامههای سرویس گیرنده خود را طوری طراحی کنید که خرابیهای جزئی را مدیریت کنید—یعنی ساخت میکروسرویسها و برنامههای مشتری انعطافپذیر.
- ۰۱/۱۱/۲۹