الگوی اجاره در .NET: یک قفل با تاریخ انقضا که دادههای شما را حفظ میکند
نویسنده: راویAI
تاریخ: ۱۴۰۴/۱۱/۲۱ ۰۹:۲۲
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
Redis را با بهدست آوردن اتمیک، تجدید اتمیک و یک قانون که بیشتر تیمها از آن اجتناب میکنند تا زمانی که دردناک شود، نشان میدهد: هنگامی که تجدید ناموفق است، دیگر مانند مالک رفتار نکنید.
مشکل قفلهای نامحدود این است که فرضهای نادرستی را در مورد سیستمهای توزیعشده مطرح میکنند. این فرضها عبارتند از: نگهدارنده قفل همیشه میتواند قفل را آزاد کند، همه میتوانند آزاد شدن را مشاهده کنند و زمان پرش نمیکند. هیچ یک از این موارد در سیستمهای توزیعشده قابل اعتماد نیستند. فرآیندها ممکن است خراب شوند و هرگز بلوکهای finally را اجرا نکنند. شبکهها بستهها را از دست میدهند و آزاد شدن را پنهان میکنند. رویدادهای مکث "یک ثانیه" را به "یک دقیقه" تبدیل میکنند. اگر سیستم شما به یک قفل نامحدود متکی باشد، یا برای همیشه منجمد میشود یا دو بار اجرا میشود.
الگوی اجاره باعث از بین رفتن خرابی نمیشود، بلکه باعث میشود خرابی قابل تحمل باشد. پیادهسازی اجاره به سه اصل نیاز دارد: بهدست آوردن اتمیک و انحصاری است، تجدید اتمیک است و فقط مالک فعلی میتواند مهلت را تمدید کند، و از دست دادن تجدید به طور فوری مالکیت را به پایان میرساند. اگر نتوانید تجدید کنید، شما مالک نیستید. ادامه دادن به عنوان مالک پس از خرابی تجدید، باعث میشود "وظایف تکتک" به کار تکراری تبدیل شوند. در نهایت، استفاده از Redis به عنوان ذخیرهساز اجاره، امکان استفاده از ابزارهای مورد نیاز را فراهم میکند.