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

نمودار بعدی چندین مشتری را نشان می دهد که با یک سرویس تماس می گیرند. به هر مشتری یک نمونه سرویس جداگانه اختصاص داده می شود. کلاینت 1 درخواست های زیادی کرده است و نمونه آن را تحت الشعاع قرار داده است. از آنجایی که هر نمونه از سرویس از سایرین جدا شده است، سایر مشتریان می توانند به برقراری تماس ادامه دهند.

مسائل و ملاحظات
- پارتیشن هایی را در مورد الزامات تجاری و فنی برنامه تعریف کنید.
- هنگام تقسیم خدمات یا مصرف کنندگان به دیوارها، سطح ایزوله ارائه شده توسط فناوری و همچنین هزینه های سربار را از نظر هزینه، عملکرد و مدیریت در نظر بگیرید.
- ترکیب دیوارها با الگوهای آزمایش مجدد، قطع کننده مدار و دریچه گاز را در نظر بگیرید تا مدیریت خطای پیچیده تری را ارائه دهید.
- هنگام تقسیم مصرف کنندگان به دیوارها، استفاده از فرآیندها، thread pools و semaphores را در نظر بگیرید. پروژه هایی مانند resilience4j و Polly چارچوبی را برای ایجاد دیوارهای مصرفی ارائه می دهند.
- هنگام پارتیشن بندی سرویس ها به بالکهدها، استقرار آنها را در ماشین های مجازی، کانتینرها یا فرآیندهای جداگانه در نظر بگیرید. کانتینرها تعادل خوبی از جداسازی منابع را با سربار نسبتاً کم ارائه می دهند.
- سرویس هایی که با استفاده از پیام های ناهمزمان ارتباط برقرار می کنند را می توان از طریق مجموعه های مختلف صف جدا کرد. هر صف می تواند مجموعه ای اختصاصی از نمونه هایی داشته باشد که پیام ها را در صف پردازش می کنند، یا یک گروه واحد از نمونه ها با استفاده از یک الگوریتم برای حذف و ارسال پردازش.
- سطح دانه بندی دیواره ها را تعیین کنید. به عنوان مثال، اگر می خواهید مستأجرها را در بین پارتیشن ها توزیع کنید، می توانید هر مستأجر را در یک پارتیشن جداگانه قرار دهید یا چندین مستاجر را در یک پارتیشن قرار دهید.
- نظارت بر عملکرد هر پارتیشن و SLA.
زمان استفاده از این الگو
از این الگو برای موارد زیر استفاده کنید:
- منابعی را که برای مصرف مجموعه ای از خدمات پشتیبان استفاده می شوند، جدا کنید، به خصوص اگر برنامه بتواند سطحی از عملکرد را حتی زمانی که یکی از سرویس ها پاسخ نمی دهد، ارائه دهد.
- مصرف کنندگان مهم را از مصرف کنندگان استاندارد جدا کنید.
- از برنامه در برابر خرابی های آبشاری محافظت کنید.
این الگو ممکن است زمانی مناسب نباشد که:
- استفاده کمتر کارآمد از منابع ممکن است در پروژه قابل قبول نباشد.
- پیچیدگی اضافه لازم نیست
مثال
فایل پیکربندی Kubeetes زیر یک محفظه ایزوله برای اجرای یک سرویس واحد با منابع و محدودیت های CPU و حافظه خود ایجاد می کند.
آموزش استراتژی معاملاتی...
ما را در سایت آموزش استراتژی معاملاتی دنبال می کنید
برچسب :
نویسنده : ملیحه نصیری
بازدید : <-PostHit->
تاريخ : شنبه
23 ارديبهشت
1402 ساعت: 0:43