Google Cloud / دليل حلول تحريري
تشخيص تراكم رسائل Pub/Sub وتكرار الآثار
تتبّع هوية النشر وتسليم الاشتراك والإقرار وحد تثبيت عمل التطبيق قبل افتراض فقد العمل أو تنفيذه مرة واحدة بالضبط.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
يزداد عمر أقدم رسالة لم يُقرّ بها أو عدد الرسائل المتراكمة، أو تظهر الرسالة مراراً، أو يتكرر أثر في قاعدة البيانات. لا يعني تكرار التسليم تلقائياً وجود عيب في Pub/Sub، ولا يثبت نجاح النشر اكتمال عمل التطبيق. افصل محاولات التسليم، وعمليات النشر المتميزة، وهوية حدث التطبيق، والآثار الدائمة قبل اختيار التصحيح.
افهم الأسباب المحتملة
- قد يعالج المستهلكون أبطأ من معدل وصول الرسائل، أو تفوتهم مهل الإقرار، أو يتعطلون بعد تثبيت الأثر، أو يعيدون محاولة أحداث مشوهة إلى أجل غير محدود. وقد تنتج إعادة محاولات النشر تكراراً أيضاً. للتسليم مرة واحدة بالضبط نطاق محدد بحسب الاشتراكات والمناطق المدعومة، ولا يجعل معاملة اعتباطية في قاعدة البيانات ذرية مع الإقرار. ويؤثر كل من الترتيب والاحتفاظ وسياسة الرسائل المتعذرة والصلاحيات والتحكم في التدفق في تقدم المعالجة بطريقة مختلفة.
1. حدد الاشتراك الدقيق وهوية الحدث
سجل الموضوع والاشتراك، ونمط التسليم، وافتراضات المنطقة ونقطة النهاية، وهوية المستهلك، ومعرّفات الرسالة وحدث التطبيق، والأوقات، اعتماداً على أدلة موجودة ومصرح باستخدامها. ميّز إعادة تسليم الرسالة نفسها من عمليتي نشر متميزتين تمثلان حدث أعمال واحداً. لا تنشر حركة اختبار ولا تفحص حساباً مهيأً انطلاقاً من هذا الدليل. يستطيع سجل اصطناعي توضيح الأسئلة المطلوبة دون إنشاء حمل عمل.
2. قارن معدلات الوصول والمعالجة وإعادة المحاولة
افحص النافذة الزمنية المحددة ووحدات قياس التراكم والعمر وزمن المعالجة والأخطاء وتشبع الأنظمة التابعة. تستهلك الإعادات عملاً أيضاً، لذلك قد يقلل معدل الأحداث الفريدة وحده تقدير الحمل الحقيقي. وقد يؤخر تغيير مهلة الإقرار ظهور عرض المشكلة دون تحسين السعة. ينبغي لإعدادات التحكم في التدفق والتزامن أن تحمي ذاكرة المستهلك واعتمادياته، لا أن تنشئ طابوراً خفياً غير محدود.
3. افحص سجل آثار اصطناعياً
يحلل البرنامج الكامل، الذي يعمل دون اتصال، ثلاثة سجلات تسليم مخترعة ويقارن عدد عمليات التسليم بعدد الأحداث الفريدة. ويبلغ فرصة واحدة لتكرار الأثر ومجموع قيم الأحداث الفريدة. لا يُقصد بالقاموس الموجود في الذاكرة تقديم تنفيذ موزع لمنع التكرار؛ فالتصميم الفعلي يجب أن يحفظ الحالة عبر إعادة التشغيل وأن ينسق الأثر مع العلامة التي تسجل معالجته. وتحتاج الحمولات المتعارضة إلى مراجعة، لا استبدال صامت.
import json
records = json.loads('[{"event":"a","amount":10},{"event":"a","amount":10},{"event":"b","amount":20}]')
ledger = {}
for record in records:
key = record["event"]
if key in ledger and ledger[key] != record["amount"]: raise ValueError("conflicting synthetic event")
ledger[key] = record["amount"]
print(f"deliveries={len(records)} unique={len(ledger)} duplicate_opportunities={len(records) - len(ledger)} total={sum(ledger.values())}")
deliveries=3 unique=2 duplicate_opportunities=1 total=30
تمثل ثلاث عمليات تسليم حدثين مخترعين متسقين، مجموع قيمتيهما 30؛ ولا يُفتح أي اشتراك.
4. راجع حد الإقرار وتثبيت الأثر
قد يؤدي الإقرار قبل أن يصبح العمل المطلوب دائماً إلى فقد عمل التطبيق. وقد يؤدي تثبيت الأثر قبل التأكد من نجاح الإقرار إلى محاولة متكررة. حدد متطلبات ذرية المعالجة وعدم تكرار أثرها بما يلائم مخزن البيانات وعملية الأعمال. لا يزيل ضمان النقل التكرار الناشئ عن النشر، ولا يحول أثراً مثبتاً بصورة منفصلة إلى معاملة واحدة. تحقق من النطاق الحالي لميزة التسليم المختارة.
5. حدد محاولات محدودة ومراجعة وإعادة تشغيل
عالج المخططات غير الصالحة والأحداث المعطوبة التي تفشل معالجتها مراراً بإجراء موثق لإعادة المحاولة ومراجعة وجهة الرسائل المتعذرة، مع الهويات والصلاحيات المطلوبة. قد تقيد مفاتيح الترتيب تقدم المعالجة، لكنها لا تتحقق من صحة المحتوى. وتحتاج إعادة التشغيل وانتهاء الاحتفاظ إلى أفق زمني لمنع تكرار الأثر يوافق متطلبات الأعمال. لا تحذف رسائل اشتراك فعلي، أو تُعد تموضعه، أو تقرّ برسائله، أو تغير سياساته، أو توسع تشغيل المستهلكين كإجراء تشخيصي غير مخطط.
تحقق من نجاح الإصلاح
يجب أن يبلغ البرنامج المحلي deliveries=3 unique=2 duplicate_opportunities=1 total=30. أما التصحيح الفعلي فيحتاج أدلة معتمدة على اكتمال عمل المستهلك، وسلوك الإقرار، واتساق الأثر في الأنظمة التابعة، واتجاه التراكم، وحالات الفشل وإعادة التشغيل ذات الصلة. ميّز تكرار حدث التطبيق من تكرار التسليم. لا يتحقق السجل المحلي من أي ادعاء حول تسليم السحابة أو ترتيبها أو التسليم مرة واحدة بالضبط أو الاحتفاظ أو الحصص.
امنع تكرار المشكلة
- احفظ هوية الحدث ومخططه وإصداره، والتحكم المحدود في التدفق، وسياسة إعادة المحاولة، وتصميماً دائماً يمنع تكرار الأثر. وثق نمط التسليم وافتراضات المنطقة وحد الإقرار وملكية وجهة الرسائل المتعذرة وسلوك إعادة التشغيل. اربط التنبيهات التشغيلية بدليل إجراءات معتمد، ولا تعتبر مجموعة محفوظة داخل عملية واحدة ضماناً دائماً للتنفيذ مرة واحدة بالضبط.