مثال توضيحي فقط: تدير مؤسسة نورث ستار كوميونيتي، وهي مؤسسة غير ربحية افتراضية، خادمًا منزليًا من نوع ماتريكس سينابس. تتزايد قاعدة بياناتها ومتجر الوسائط الخاص بها، ويرغب المسؤول في حذف سجلات الغرف القديمة والوسائط غير المستخدمة دون حذف المناقشات الحالية أو صور الملفات الشخصية عن طريق الخطأ. هذا المثال ليس تقريرًا عن عملية نشر حقيقية أو نتيجة تم اختبارها.
يكمن الحل في التعامل مع سجل الرسائل والوسائط كعمليتي تنظيف منفصلتين. يوفر Synapse واجهة برمجة تطبيقات لحذف سجل الغرفة وأدوات تنظيف وسائط منفصلة؛ كما يمكن لإعدادات الاحتفاظ بالوسائط إزالة الملفات مع بقاء أحداث Matrix التي تشير إليها. حدد أولًا ما يجب أن يبقى متاحًا، ثم أنشئ نسخة احتياطية من قاعدة البيانات ومخزن الوسائط، واختر الطريقة المناسبة، وتحقق من كلا منطقتي التخزين بعد ذلك.
حدد معنى كلمة "قديم" بالنسبة لخادمك
قبل تغيير الإعدادات أو استدعاء نقطة نهاية مُتلفة، دوّن قاعدة للاحتفاظ بالبيانات. على سبيل المثال، في شركة نورث ستار، لنفترض أن مجلس الإدارة وافق على الاحتفاظ بسجل الغرف العادي لمدة 180 يومًا، والاحتفاظ بالملفات المُحمّلة محليًا وفقًا لسياسة مماثلة، والتعامل مع الوسائط البعيدة كذاكرة تخزين مؤقتة يُمكن استرجاعها عند الحاجة. قد تحتاج مؤسسة أخرى إلى سنوات من الاحتفاظ بالبيانات لأسباب قانونية أو تشغيلية أو مجتمعية. هذه الفترات الزمنية أمثلة وليست توصيات عامة.
قسّم البيانات إلى فئتين:
- أحداث الغرفة: الرسائل والأحداث الأخرى المخزنة في قاعدة بيانات Synapse. يؤدي حذف الأحداث إلى تغيير مدى إمكانية تصفح المستخدمين للسجلات السابقة في الغرفة.
- الوسائط: الملفات المرفوعة، والصور المصغرة، والنسخ المخزنة مؤقتًا من الملفات من خوادم منزلية أخرى. توجد هذه الملفات في مستودع الوسائط أو في مستودع خارجي مُهيأ.
توضح وثائق Synapse الرسمية سياسات الاحتفاظ بالأحداث وتنظيف الوسائط بشكل منفصل. لا يُعدّ حذف سجل الغرفة دليلاً كافياً على تنظيف مخزن الوسائط، كما أن حذف ملف وسائط لا يمحو الحدث المرتبط به. ابدأ بتسجيل حجم قاعدة البيانات، وحجم مخزن الوسائط، والغرف المتأثرة، وتاريخ الإيقاف المُراد. راجع دليل تكوين Synapse .
قم بعمل نسخة احتياطية قبل الحذف
قم بعمل نسخة احتياطية لقاعدة البيانات باستخدام الإجراء الموصى به لمحرك قاعدة البيانات الخاص بك، وقم أيضًا بعمل نسخة احتياطية لمستودع الوسائط أو مخزن الوسائط الخارجي. لا تضمن النسخة الاحتياطية لقاعدة البيانات وحدها حفظ الملفات التي تم تحميلها، كما أن النسخة الاحتياطية للوسائط وحدها لا تستعيد أحداث الغرفة. تأكد من إمكانية قراءة النسخ الاحتياطية وأنك تعرف كيفية استعادتها قبل المتابعة. إذا كان برنامج Synapse يعمل في حاويات أو يستخدم وحدات معالجة منفصلة، فقم بتضمين التكوين ووحدات التخزين ذات الصلة في خطة الصيانة الخاصة بك.
بالنسبة لخادم نورث ستار الافتراضي، يقوم المسؤول بتسجيل أحجام قاعدة البيانات ومخزن الوسائط، ويتأكد من وجود نقطة استعادة حديثة قبل إجراء أي تغييرات على الغرف المشتركة. يُعدّ هذا مفيدًا لأن عملية "التنظيف" لا تنجح إلا إذا أزالت البيانات المقصودة مع الحفاظ على إمكانية استعادة المحتوى المطلوب.
اختر الاحتفاظ المجدول للتنظيف المستمر
إذا كنت ترغب في أن يستمر برنامج Synapse في تطبيق سياسة معينة، فقم بتكوين الاحتفاظ بالأحداث والاحتفاظ بالوسائط بشكل منفصل في إعدادات الخادم الرئيسي. على سبيل المثال، يمكن للمسؤول تعديل هذا المثال لخادم تكون سياسته المعتمدة هي 180 يومًا لسجل الغرفة والوسائط المحلية، مع ذاكرة تخزين مؤقتة للوسائط البعيدة لمدة 30 يومًا.
retention:
enabled: true
default_policy:
max_lifetime: 180d
media_retention:
local_media_lifetime: 180d
remote_media_lifetime: 30d
هذا مثال توضيحي، وليس سياسة جاهزة للتطبيق على جميع الخوادم. تشير وثائق Synapse إلى أن ميزة الاحتفاظ بالأحداث معطلة افتراضيًا. default_policyينطبق هذا على الغرف التي لا تحتوي على m.room.retentionأحداث حالة؛ يمكن لمسؤولي الغرف تحديد سياسات الغرف، بينما يمكن لمسؤولي الخوادم تحديد مدة صلاحية السياسات باستخدام إعدادات مدة الصلاحية المسموح بها الموثقة. إذا كنت بحاجة إلى حد أقصى ثابت، فراجع عناصر التحكم هذه وسياسات الغرف المستخدمة حاليًا بدلًا من افتراض أن الإعداد الافتراضي يغطي جميع الغرف.
تُحسب مدة بقاء الوسائط بناءً على الوقت المنقضي منذ آخر وصول إليها. إذا لم يتم الوصول إلى عنصر ما مطلقًا، يستخدم Synapse وقت إنشائه. ينطبق هذا الإعداد على الملفات الأصلية والصور المصغرة؛ ولا تؤدي مدة البقاء غير المُحددة أو الفارغة إلى حذف فئة الوسائط هذه. قد يُطلب عنصر مُخزّن مؤقتًا عن بُعد من مصدره مرة أخرى بعد حذفه. تُستثنى الوسائط المعزولة والوسائط المحمية محليًا من ذلك، ولا تُزال بواسطة إعدادات الاحتفاظ هذه. يتم تشغيل عملية تنظيف الوسائط على عملية Synapse أو العامل المُفعّل enable_media_repo. راجع مرجع الاحتفاظ الحالي و media_retention ، ثم طبّق التكوين باستخدام إجراء إعادة التشغيل أو النشر المعتاد لتثبيتك.
قبل اعتماد النموذج، قارن سلوكه باحتياجاتك. إذا كان يجب أن تبقى رسالة الغرفة قابلة للقراءة مع مرفقها لمدة 180 يومًا، فلا تختر مدة صلاحية أقصر للوسائط إلا إذا كنت تقبل أن الرسالة قد تبقى لفترة أطول من الملف الموجود محليًا. تحقق مما إذا كانت وسائطك مخزنة في Synapse نفسه أو في مستودع وسائط خارجي؛ إذ لا تقوم واجهة برمجة تطبيقات حذف الوسائط المحلية في Synapse بإزالة الوسائط المخزنة في مستودع خارجي.
تنظيف فعاليات الغرف القديمة عند الطلب
لإجراء عملية تنظيف لمرة واحدة، استخدم واجهة برمجة تطبيقات إدارة سجلات Synapse. يتطلب ذلك رمز وصول خاص بمسؤول الخادم ؛ علمًا بأن إدارة غرفة فردية لا تمنح نفس الصلاحية. توصي Synapse بإبقاء واجهة برمجة تطبيقات الإدارة مخفية عن العامة، وعادةً ما تُجرى هذه الطلبات من الخادم أو مضيف إدارة موثوق. تجنب لصق رمز الوصول الفعلي في سجلات الأوامر المشتركة، أو التذاكر، أو السجلات.
يجب أن يحدد الطلب حدًا زمنيًا باستخدام مُعرّف حدث أو طابع زمني يونكس بالمللي ثانية. المثال التالي في سطر الأوامر توضيحي. استبدل الخادم الرئيسي، ومعرّف الغرفة، ومتغير الرمز المميز، والحد الزمني النموذجي بالقيم التي راجعتها. يطلب المثال صراحةً حذف أحداث رسائل المستخدم المحلي أيضًا.
export SYNAPSE_ADMIN_TOKEN='replace-with-a-server-admin-token'
PURGE_CUTOFF_MS=1760000000000 # replace with the approved UTC cutoff
curl --fail-with-body -X POST \
-H "Authorization: Bearer $SYNAPSE_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"purge_up_to_ts\": $PURGE_CUTOFF_MS, \"delete_local_events\": true}" \
"https://matrix.example.org/_synapse/admin/v1/purge_history/!room:example.org"
بدون delete_local_events: trueتفعيل خيار حذف سجل الأحداث، يحتفظ Synapse افتراضيًا بالأحداث المرسلة من المستخدمين المحليين؛ بينما يمكن حذف الأحداث المرسلة عن بُعد. كما يتم الاحتفاظ بحالة الغرفة، مثل حالة العضوية والموضوع. ويحتفظ Synapse أيضًا برسالة واحدة على الأقل في كل غرفة. قد تستغرق العملية عدة دقائق أو أكثر، ولا يمكن للمستخدمين الرجوع إلى الصفحات السابقة في الجزء الذي يتم حذفه أثناء تشغيلها. تُعيد واجهة برمجة التطبيقات (API) مُعرّف الحذف فورًا؛ استعلم عن /_synapse/admin/v1/purge_history_status/<purge_id>الحالة حتى تصبح صحيحة، completeأو تحقق من الخطأ إذا كانت خاطئة failed. راجع وثائق واجهة برمجة تطبيقات حذف السجل قبل تحديد تاريخ انتهاء الصلاحية. على وجه الخصوص، راجع ما إذا كان حذف الأحداث المحلية مناسبًا لغرفك.
قم بتنظيف الوسائط المحلية وذاكرة التخزين المؤقت البعيدة بشكل منفصل
للتنظيف الدوري، استخدم media_retentionواختر فترات صلاحية تتناسب مع مستوى التوافر الذي تعد به المستخدمين. أما للتنظيف لمرة واحدة، فيوفر Synapse نقاط نهاية مميزة.
- الوسائط المحلية:
POST /_synapse/admin/v1/media/delete?before_ts=<timestamp_ms> يزيل الوسائط المحلية المؤهلة بناءً على آخر وقت استخدام لها. تقبل واجهة برمجة التطبيقات أيضًا حدًا أقصى للحجم. يتم الاحتفاظ بوسائط الملف الشخصي وصورة الغرفة افتراضيًا؛ لا تعطل هذه الحماية إلا بعد مراجعة العواقب عن قصد.
- الوسائط البعيدة المخزنة مؤقتًا:
POST /_synapse/admin/v1/purge_media_cache?before_ts=<timestamp_ms> يزيل هذا الخيار الوسائط البعيدة المخزنة مؤقتًا التي كان آخر وصول إليها قبل تاريخ انتهاء الصلاحية. إذا طلب المستخدم ملفًا بعيدًا تمت إزالته لاحقًا، يمكن لبرنامج Synapse طلبه من الخادم الرئيسي مرة أخرى.
تستخدم كلتا نقطتي النهاية طابعًا زمنيًا موجبًا بنظام يونكس بالمللي ثانية، ويعتمد تاريخ انتهاء صلاحية الوسائط على آخر وصول إليها، وليس فقط تاريخ التحميل أو الإنشاء. تزيل واجهة برمجة تطبيقات حذف الوسائط المحلية الملف والصور المصغرة من وحدة تخزين Synapse، بما في ذلك النسخ المخزنة محليًا من الملفات البعيدة؛ ولا تنظف مستودع الوسائط الخارجي. يُبلغ الرد عن عدد العناصر المحذوفة. راجع واجهة برمجة تطبيقات إدارة وسائط Synapse للاطلاع على المعلمات الحالية وتفاصيل نقطة النهاية قبل تنفيذ أي طلب.
في مثال نورث ستار، يقوم المسؤول أولاً باختبار الحد الأقصى للذاكرة وفقًا للسياسة المعتمدة، ويتحقق مما إذا كانت معرّفات أو أعداد البيانات المُعادة من نقطة النهاية تتطابق مع التوقعات. إذا كانت ذاكرة التخزين المؤقت البعيدة هي المصدر الوحيد للنمو، فإن حذف الملفات المرفوعة محليًا سيكون إجراءً خاطئًا. أما إذا كان من الضروري إبقاء الملفات المرفوعة محليًا متاحة، فيُفضّل اختيار مدة صلاحية محلية أطول أو تجنّب نقطة نهاية حذف الوسائط المحلية.
قم بقياس النتيجة وتغيير المسار عند الحاجة
بعد كل عملية تنظيف، تأكد من إتمامها بنجاح، وراجع عدد استجابات واجهة برمجة التطبيقات (API)، وتأكد من أن الغرف النموذجية تعرض حدود السجل المتوقعة، وقارن استخدام قاعدة البيانات ومساحة تخزين الوسائط بشكل منفصل. قد لا يظهر انخفاض عدد صفوف قاعدة البيانات فورًا كانخفاض مماثل في استخدام قرص نظام التشغيل؛ إذ يعتمد استعادة مساحة قاعدة البيانات على محرك قاعدة البيانات وإجراءات صيانته. اتبع إرشادات مُورّد قاعدة البيانات بدلًا من حذف ملفات قاعدة البيانات يدويًا.
إذا تقلص حجم قاعدة البيانات بينما بقي حجم مخزن الوسائط كما هو، فراجع إعدادات الاحتفاظ بالوسائط، وحالة عامل الوسائط enable_media_repo(سواءً كانت حالة الحجر الصحي أو الحماية)، وما إذا كانت الملفات مخزنة خارجيًا. إذا انخفض استخدام الوسائط مع بقاء الرسائل القديمة، فهذا متوقع عند حذف الوسائط فقط. أما إذا بقيت الأحداث بشكل غير متوقع، فتحقق مما إذا كان الاحتفاظ بالوسائط مُفعّلاً، وما إذا كانت الغرفة تحتفظ بحالة الاحتفاظ الخاصة بها، وما إذا تم الاحتفاظ بالأحداث المحلية عمدًا، وما إذا كانت حالة الحذف قد اكتملت.
بالنسبة لشركة نورث ستار، لا يقتصر معيار النجاح على مجرد "صغر حجم القرص". بل يشمل أيضاً أن يكون نطاق السجل القديم المعتمد مرئياً، وأن تظل الرسائل والمرفقات الحالية المطلوبة تعمل، وأن تكون فئة الوسائط المقصودة قد نُظفت، وأن تظل النسختان الاحتياطيتان متاحتين. في حال فشل هذه الفحوصات، أوقف عمليات التنظيف الإضافية، وافحص سياسة الغرفة، واستجابة واجهة برمجة التطبيقات، وتكوين العامل، ووحدة التخزين الخلفية قبل توسيع نطاق عملية التنظيف.
حدود يجب مراعاتها
لا تُغني سياسات الاحتفاظ بالبيانات عن المراجعة القانونية أو مراجعة حفظ السجلات التي تُجريها المؤسسة. يعني نظام الاتحاد أن الخوادم المنزلية الأخرى قد تحتفظ بنسخها الخاصة من الأحداث أو الوسائط، ولا يضمن Synapse حذفها من تلك الخوادم. يؤدي حذف الوسائط عن بُعد إلى إزالة ذاكرة التخزين المؤقت لهذا الخادم، ولكنه لا يحذف الملف الأصلي على خادمه المنزلي. وبالمثل، فإن حذف حدث محلي أو عنصر وسائط من Synapse لا يسترجع نسخةً قام مشارك آخر بتنزيلها مسبقًا.
استخدم الاحتفاظ المجدول عندما تحتاج إلى سياسة قابلة للتكرار؛ واستخدم واجهات برمجة تطبيقات الإدارة لإجراء عملية تنظيف مُراجعة ومُستهدفة. احتفظ بالعمليتين منفصلتين في سجل التغييرات، لأن مؤشرات نجاحهما وتأثيراتهما مختلفة.