چه راهی وجود داره که اسیر این داستان نشیم دقیقا متضاد این عمل رو انجام بدیم که بهش میگن
Claim-Then-Act
اول تصاحب کن، بعد انجام بده
برای حل این مشکل، ما باید قانون بازی رو عوض کنیم. به جای اینکه فقط «نگاه کنیم»، باید تو همون نگاه اول صندلی رو «رزرو و قفل» کنیم.
یعنی چی؟ یعنی میایم به سیستم میگیم: «اگر صندلی خالیه، تو همون لحظه به اسم من قفلش کن که هیچکس دیگه نتونه حتی بهش نگاه کنه، بعد من میرم پولشو میدم.»
تو دنیای کدنویسی، ما مرحله ۱ و ۳ (چک کردن و ذخیره کردن کلید) رو با هم ترکیب میکنیم تا تبدیل به یک عملیاتِ واحد و غیرقابلتجزیه (Atomic) بشه.
روند درست اینطوریه:
۱. درخواست میاد و میگه: کلید رو برای من تو دیتابیس (یا ردیس) ثبت کن.
۲. دیتابیس خودش جلوی تکرار رو میگیره. پس درخواست اول با موفقیت کلید رو ثبت میکنه (Claim).
۳. درخواست دوم که همزمان رسیده بود، وقتی میخواد کلید رو ثبت کنه، دیتابیس بهش ارور میده و میگه: «شرمنده، یکی همین الان اینو گرفت!» و درخواست دوم همونجا دراپ میشه.
۴. حالا فقط درخواست اول که موفق شده کلید رو تصاحب کنه، با خیال راحت میره عملیات پرداخت رو انجام میده (Act).
@codehalics | کدهالیک
Post #732
462
کدهالیک | codehalic خب اول از همه یه اصطلاحی داریم که تو این سناریو اتفاق افتاده و بهش میگن Check-Then-Act فرض کنید یک صندلی خالی تو سینما مونده. شما سایت رو باز میکنید و میبینید صندلی خالیه (مرحله Check). همزمان دوستتون هم با گوشی خودش همون صفحه رو باز میکنه و اونم میبینه…
- ❤ 1