الگوی حفره: طراحی میکروسرویس های مقاوم در برابر خطا
در معماری میکروسرویس، یک برنامه کاربردی به ده ها یا صدها سرویس مستقل و مشترک تقسیم می شود. در حالی که این طراحی ماژولار بودن و مقیاسپذیری را بهبود میبخشد، اما خطر بزرگی را نیز به همراه دارد: شکست در یک سرویس میتواند کل سیستم را از بین ببرد.
اگر یک سرویس پایین دستی کند شود یا پاسخگو نباشد، درخواست های دریافتی به سرویس های بالادستی شما شروع به انباشته شدن خواهند کرد. اگر همه آنها حافظه، CPU یا Thread Pool یکسانی داشته باشند، وابستگی آهسته می تواند به سرعت تمام منابع موجود را تمام کند و باعث از کار افتادن کل برنامه شما شود.
این شکست آبشاری به عنوان اثر دومینو شناخته می شود. برای جلوگیری از آن، معماران سیستم از Bulkhead Pattern استفاده می کنند.
در این راهنما، ما بررسی خواهیم کرد که الگوی Bulkhead چیست، چگونه کار میکند و چگونه آن را با استفاده از تشابههای ساده، مفاهیم معماری و نمونههای کد در جاوا (Resilience4j) و Go پیادهسازی کنیم.
قیاس دنیای واقعی: دیواره های کشتی های ضد آب
نام این الگو از صنعت کشتی سازی گرفته شده است.
تقاطع دیواری است که در داخل بدنه کشتی ساخته شده است. به جای داشتن یک فضای باز و بزرگ در داخل بدنه کشتی، فضای داخلی به چندین محفظه مستقل و مهر و موم شده تقسیم می شود.
اگر کشتی با مانع برخورد کند و بدنه آن شکسته شود، آب به داخل محفظه آسیب دیده سرازیر می شود. با این حال، به دلیل دیواره های ضد آب، آب در آن محفظه واحد قرار می گیرد. بقیه کشتی خشک و شناور می ماند و به آن اجازه می دهد شناور بماند و به ایمنی برسد.
بدون دیواره ها، آب آزادانه در سراسر بدنه جریان می یابد و در نهایت کشتی را غرق می کند.
در مهندسی نرم افزار:
- کشتی کل برنامه یا خدمات شماست.
-
-