چالش Race Condition: رقابت بین درخواستهای همزمان در مایکروسرویسها:
ما از مایکروسرویس استفاده می کنیم تا از مزایای همزمانی بهره ببریم پس باید سعی کنیم چالشهاشو با روشی حل کنیم که باعث «کاهش همزمانی» نشود.
فرض میکنیم ۱۰ درخواست همزمان داریم،
روشهای جلوگیری از Race Condition:
۱- استفاده از Redis Lock:
اولین درخواست پاسخ داده میشود و به ۹ تای دیگر خطای 429 Too Many Requests داده میشود که باعث از دست رفتن درخواستها میشود.
۲- استفاده از RowVersion:
اولین درخواست پاسخ داده میشود و ۹ تای دیگر از دیتابیس خطای DbUpdateConcurrencyException دریافت میکنند که باعث از دست رفتن درخواستها میشود.
۳- ایجاد صف در Redis:
با استفاده از ListRightPushAsync همهی درخواستهای همزمان را در یک لیست در Redis ثبت میکنیم و سپس توسط یک BackgroundService، یکی یکی با متد ListLeftPopAsync از لیست میخوانیم و پاسخ میدهیم.
مزیت این روش نسبت به دو روش قبلی این است که باعث از دست رفتن درخواستها نمیشود ولی به دلیل استفاده از صف، باعث «کاهش همزمانی» میشود.
۴- استفاده از Concurrency Limiter در Asp.net:
با اضافه کردن سرویس AddRateLimiter پردازش همزمان را به یک درخواست محدود میکنیم و ۹ تای دیگر را در صف قرار میگیرند، که به دلیل استفاده از صف، باعث «کاهش همزمانی» میشود.
@DevTwitter | <Mahnaz Azad/>
Post #12473
6.92K
- ❤ 28
- 👍 6
- 👎 3