استراتژیهای Retry در سیستمهای توزیعشده
وقتی یه درخواست fail میشه، معمولا میتونیم Retry کنیم.
چند تا از استراتژیهای رایج:
یک. Immediate Retry: بلافاصله دوباره درخواست میفرستیم. ساده و سریعه؛ ولی اگه مشکل همچنان وجود داشته باشه، میتونه باعث درخواستهای پشتسرهم و فشار بیشتر بشه.
دو. Fixed Interval: بعد از هر خطا مدت زمان ثابتی صبر میکنیم؛ مثلا هر ۵ ثانیه یکبار. سادهست؛ ولی ممکنه فاصله انتخابشده بیش از حد کوتاه یا طولانی باشه.
سه. Incremental Interval: فاصله Retryها کم کم بیشتر میشه؛ مثلا ۱، ۲، ۳، ۴ ثانیه.
چهار. Exponential Backoff: فاصله بین Retryها بهصورت نمایی افزایش پیدا میکنه؛ مثلا ۱، ۲، ۴، ۸ ثانیه. برای خطاهایی که احتمال میدیم بعد از مدتی برطرف بشن معمولا انتخاب مناسبیه. بهتره تعداد Retry یا حداکثر زمان انتظار هم محدود بشه.
پنج. Jitter: یک مقدار تصادفی به زمان انتظار اضافه میکنیم تا چندین کلاینت همزمان Retry نکنن.
شش. Circuit Breaker: وقتی تعداد خطاها از حد مشخصی بیشتر بشه، موقتا Retry و درخواستهای جدید رو متوقف میکنیم تا سرویس مقصد فرصت ریکاوری داشته باشه.
هفت. Adaptive Retry: استراتژی Retry رو بر اساس شرایط فعلی سیستم، مثل Load، Failure Rate و Response Time تغییر میدیم.
هشت. Cancel: اگر خطا دائمی باشه یا Retry کردن احتمال موفقیت نداشته باشه، بهجای ادامه دادن، درخواست رو کنسل میکنیم.
در عمل معمولا یک ترکیب از این روشها استفاده میشه؛ مثلا Exponential Backoff + Jitter + محدودیت تعداد Retry. همچنین برای درخواستهایی مثل پرداخت باید Idempotency رو هم در نظر گرفت تا Retry باعث اجرای چندباره یه عملیات نشه.
#system_design
@techstuff100
Post #336
1.45K
- 👍 6
- ❤ 4
- 👏 2