تقني · إجابة موثَّقة المصادر

إعادة المحاولة بالتراجع الأُسّي (Exponential Backoff)

إعادة المحاولة بالتراجع الأُسّي استراتيجية لمعالجة الأخطاء تزداد فيها مدة التأخير بين محاولات إعادة العملية الفاشلة زيادة أُسّية. فبدلًا من إعادة المحاولة على فترات ثابتة، ينتظر النظام مدة أطول بعد كل إخفاق ليمنح الخادم المستلِم وقتًا للتعافي من الازدحام أو الانقطاعات المؤقتة.

آلية العمل

تبدأ العملية بمدة انتظار أولية، مثل ثانية واحدة. فإذا فشلت المحاولة الأولى، تُضرب مدة الانتظار في عامل ثابت، وهو عادةً اثنان. فتجري المحاولة الثانية بعد ثانيتين، والثالثة بعد أربع ثوانٍ، والرابعة بعد ثماني ثوانٍ، وهكذا. ويستمر هذا التصاعد الهندسي حتى الوصول إلى حد أقصى للتأخير أو إلى حد أقصى لعدد المحاولات، وعندها تُوسَم الرسالة بأنها فشلت فشلًا دائمًا.

أهميته للمُرسِلين

يمنع استخدام هذا الأسلوب المُرسِل من تنفيذ هجوم حجب الخدمة (Denial of Service) على خادم البريد المستلِم دون قصد. فإذا فشلت آلاف الرسائل في وقت واحد وأعادت جميعها المحاولة كل عشر ثوانٍ، فقد تُبقي ذروة الحركة الناتجة الخادم المستلِم خارج الخدمة. وبتوزيع محاولات إعادة الإرسال زمنيًا، يحافظ المُرسِلون على سمعة أفضل ويرتفع احتمال زوال خطأ SMTP المؤقت 4xx قبل إسقاط الرسالة.

اعتبارات تشغيلية

من الإضافات المهمة لهذه الاستراتيجية التشويش العشوائي (jitter)، وهو إضافة قدر صغير من العشوائية إلى مدة التأخير. فبدونه، ستعيد الطلبات الفاشلة المتعددة التي وقعت في الوقت نفسه محاولتها في موجات متزامنة، مما يولّد ذروات في الحركة. أما اعتماد jitter فيضمن توزيع المحاولات بالتساوي على النافذة الزمنية، ويخفف الضغط أكثر على البنية التحتية.

أخطاء شائعة في التنفيذ

كثيرًا ما ينسى المطورون تحديد حد أقصى لعدد المحاولات أو سقف لمدة التأخير. فبدون سقف، قد تصل مدة الانتظار إلى ساعات أو أيام، مما يسبب زمن استجابة غير مقبول للبريد المعاملاتي. وهناك خطأ آخر هو التعامل مع حالات الفشل الدائم 5xx على أنها قابلة لإعادة المحاولة؛ إذ ينبغي تطبيق التراجع الأُسّي على الأخطاء المؤقتة 4xx فقط، مثل تحديد المعدّل أو greylisting المؤقت.

مثال ملموس

لنفترض رسالة معاملاتية أُرسلت عبر API. تفشل المحاولة 1 بسبب الخطأ 421 (الخادم مشغول). ينتظر النظام ثانيتين. تفشل المحاولة 2؛ فينتظر النظام 4 ثوانٍ. تفشل المحاولة 3؛ فينتظر النظام 8 ثوانٍ. وعند إجراء المحاولة 4 يكون الخادم المستلِم على الأرجح قد أفرغ طابوره، فتُقبل الرسالة. توفّر SendHQ أدوات مجانية على https://sendhq.cc/tools للمساعدة في رفع كفاءة إدارة بنية البريد الإلكتروني.

أسئلة تطرحها الفرق

ما الفرق بين التراجع الثابت والتراجع الأُسّي؟

يعيد التراجع الثابت المحاولة كل X ثانية بصرف النظر عن عدد مرات الفشل. أما التراجع الأُسّي فيزيد الفاصل الزمني بعد كل إخفاق لتخفيف الحمل عن الخادم المستهدف.

متى ينبغي التوقف عن إعادة المحاولة؟

ينبغي التوقف عن إعادة المحاولة عند إرجاع فشل دائم 5xx، أو عند بلوغ الحد الأقصى لعدد المحاولات، أو عند الوصول إلى سقف التأخير الأقصى.

هل يؤثر jitter في النمو الأُسّي؟

لا، فـ jitter يضيف إزاحة عشوائية إلى التأخير الأُسّي المحسوب لمنع ذروات إعادة المحاولة المتزامنة بين عدة طلبات متزامنة.

المصادر الأساسية