Redis / المتوسط: صحة التطبيق والتنسيق / الدرس 11
التدفقات ومجموعات المستهلكين والإعادة
استخدم تاريخ التدفق والمعلق دون خلط التسليم والإقرار والأثر مرة واحدة، وحدد الاحتفاظ والتعافي قبل فشل المستهلك.
في هذه الصفحة
أهداف الدرس
- شرح معرفات التدفق والمجموعات والمعلق.
- تصميم إعادة بلا تكرار ودورة تاريخ محدودة.
يسجل التدفق عناصر مرتبة بهويات مستقرة
يسجل التدفق معرفات ومحتوى ويدعم التاريخ والمجموعات، وتعتمد المتانة على الاستمرار والمزامنة. لا يثبت الترتيب وقت العمل الحقيقي أو يزامن الساعات، فاحفظ الهوية والوقت. تتبع المجموعات التقدم والمعلق ولا تثبت اكتمال الخارج. اختر المجموعات وفق الاستهلاك.
افصل التسليم الجديد والإقرار والحذف
افترض غياب التدفق والمجموعة. يثبت المعرف الصريح هوية المثال، وتتيح بداية الصفر القديم. تطلب > الجديد للمجموعة ويزيل الإقرار المعلق لا عنصر التدفق، فتبقى XLEN واحدة. لا تنفذ الأوامر أو تنشئ عاملاً، ويغير الموجود النتائج أو يسبب أخطاء.
XADD lab:events 1-0 kind created
XGROUP CREATE lab:events workers 0
XREADGROUP GROUP workers worker-a COUNT 1 STREAMS lab:events >
XACK lab:events workers 1-0
XLEN lab:events
Delivered ID: 1-0
Acknowledged pending entries: 1
Remaining stream length: 1
يسلم1-0 وتعيد XACK واحدة وتبقى XLEN واحدة؛ الإقرار ليس حذفاً.
يحتاج المعلق ملكية وقواعد إعادة
قد يبقى العنصر معلقاً بعد الفشل وتفحصه XPENDING وتنقل ملكيته أوامر مدعومة. ظهرت XAUTOCLAIM في6.2 ولا تثبت توقف القديم أو غياب أثره. حدد الخمول والهوية والتكرار من الحمل لا مهلة عامة، وميز البطيء والميت؛ قد تعيد السيطرة أثراً مكتملًا فتحتاج هوية مستقرة.
نمذج الإقرار دون فقد التاريخ
يفصل النموذج التاريخ والمعلق ويزيل الإقرار العلامة فقط. لسلوك Redis والتقليم والحذف والإعادة تفاصيل إصدار تفحص. يكشف التحقق خطأ مساواة الإقرار بالحذف ولا ينفذ تسليماً أو متانة أو نقل ملكية أو مرة واحدة ولا ينشئ تدفقاً.
history = {'1-0': {'kind': 'created'}}
pending = {'1-0'}
pending.remove('1-0') # local model of acknowledgment
assert '1-0' not in pending
assert history['1-0']['kind'] == 'created'
assert len(history) == 1
يبقى التاريخ وتزول علامة المعلق، وهو تحقق محلي اصطناعي فقط.
الاحتفاظ والتأخر وإعادة البناء تصميم واحد
قد يمنع التقليم الإعادة أو يزيل محتوى يحتاجه المعلق. تضيف الإصدارات خيارات لعلاقة المجموعات والعناصر، فالتزم بالأساس. راقب الأقدم والتأخر والتاريخ والذاكرة وصمم البناء عند الفقد. تختلف Pub/Sub ولا تعوض التاريخ، ولا يثبت اسم المجموعة أو معدل الإقرار اكتمال الأثر وتعافيه.
الأخطاء الشائعة وإصلاحها
يفترض حذف العنصر بعد إقراره
- لماذا يحدث؟
- اختلط المعلق بالتاريخ.
- كيف تصلحه؟
- راجع XACK وافصل التنظيف.
- كيف تتجنب تكراره؟
- اختبر التاريخ والمعلق مستقلين.
ينتج العمل المستحوذ أثراً مكرراً
- لماذا يحدث؟
- اعتبر النقل إثبات غياب المعالجة.
- كيف تصلحه؟
- استخدم هوية وتسليماً بلا تكرار.
- كيف تتجنب تكراره؟
- اختبر الفشل بين الأثر والإقرار.
لا يعيد المستهلك التاريخ اللازم
- لماذا يحدث؟
- قصر الاحتفاظ عن التأخر والتعافي.
- كيف تصلحه؟
- استخدم البناء الموثق وراجع السعة.
- كيف تتجنب تكراره؟
- راقب فرق التقدم وأفق التاريخ.
اختبر فهمك
1. يعالج مستهلك عنصراً وينهار قبل XACK. ما الاستنتاج الآمن؟
اعرض الحل المشروح
قد يبقى العنصر معلقاً، ولا يثبت ذلك أن أثره التجاري لم يحدث. يجب أن يستخدم المستهلك المستعيد الهوية المستقرة وبروتوكول الأثر ونقطة الحفظ المصمم قبل إعادة التطبيق. تدعم السيطرة والإقرار إدارة التسليم، ولا تنسقان نظاماً خارجياً مع Redis ذرياً.
2. تبقى XLEN بعد XACK. هل فشل الإقرار؟
اعرض الحل المشروح
ليس بالضرورة. تزيل XACK المرجع المعلق للمجموعة ولا تحذف عنصر التدفق نفسه. افحص حالة المعلق ورد الأمر، ثم قيم الاحتفاظ منفصلاً. قد يدمر حذف التاريخ لمجرد خفض XLEN إعادةً تحتاجها مجموعات أو مستهلكون آخرون، لذلك يجب أن يتبع التنظيف سياسة صريحة.
أهم ما تعلمته
- التاريخ والتسليم والملكية والاكتمال مختلفة.
- تحتاج الإعادة هوية وأفق احتفاظ كافياً.