ตัวอย่างสถานการณ์ (เพื่อเป็นตัวอย่างเท่านั้น):ชุมชนนอร์ธสตาร์ ซึ่งเป็นองค์กรไม่แสวงหาผลกำไรสมมติ ใช้เซิร์ฟเวอร์บ้าน Matrix Synapse ฐานข้อมูลและพื้นที่จัดเก็บสื่อกำลังเติบโตขึ้น และผู้ดูแลระบบต้องการลบประวัติห้องสนทนาเก่าและสื่อที่ไม่ใช้งานแล้วโดยไม่ลบการสนทนาปัจจุบันหรือรูปโปรไฟล์โดยไม่ตั้งใจ ตัวอย่างนี้ไม่ใช่รายงานการใช้งานจริงหรือผลลัพธ์ที่ผ่านการทดสอบแล้ว
หัวใจสำคัญคือการจัดการประวัติข้อความและไฟล์มีเดียแยกกัน Synapse มี API สำหรับล้างประวัติห้องสนทนาและเครื่องมือล้างไฟล์มีเดียแยกต่างหาก นอกจากนี้ การตั้งค่าการเก็บรักษาไฟล์มีเดียยังสามารถลบไฟล์ได้ในขณะที่เหตุการณ์ Matrix ที่อ้างอิงถึงไฟล์เหล่านั้นยังคงอยู่ ขั้นแรกให้ตัดสินใจว่าอะไรควรคงอยู่ จากนั้นสำรองข้อมูลฐานข้อมูลและพื้นที่จัดเก็บไฟล์มีเดีย เลือกวิธีการที่เหมาะสม และตรวจสอบพื้นที่จัดเก็บทั้งสองหลังจากนั้น
กำหนดความหมายของคำว่า “เก่า” สำหรับเซิร์ฟเวอร์ของคุณ
ก่อนที่จะเปลี่ยนแปลงการตั้งค่าหรือเรียกใช้เอนด์พอยต์ที่อาจก่อให้เกิดความเสียหาย ให้เขียนกฎการเก็บรักษาข้อมูลไว้ก่อน สมมติว่าในตัวอย่างของ Northstar คณะกรรมการอนุมัติให้เก็บประวัติการใช้งานห้องประชุมทั่วไปไว้ 180 วัน เก็บไฟล์ที่อัปโหลดในเครื่องไว้ภายใต้นโยบายเดียวกัน และถือว่าสื่อจากระยะไกลเป็นแคชที่สามารถเรียกใช้ใหม่ได้หากจำเป็น องค์กรอื่นอาจต้องการเก็บรักษาข้อมูลเป็นเวลาหลายปีด้วยเหตุผลทางกฎหมาย การดำเนินงาน หรือเหตุผลของชุมชน ระยะเวลาดังกล่าวเป็นเพียงตัวอย่าง ไม่ใช่คำแนะนำสากล
แยกข้อมูลออกเป็นสองหมวดหมู่:
- เหตุการณ์ในห้อง:ข้อความและเหตุการณ์อื่นๆ ที่จัดเก็บไว้ในฐานข้อมูลของ Synapse การล้างเหตุการณ์จะเปลี่ยนแปลงระยะเวลาที่ผู้ใช้สามารถเรียกดูเหตุการณ์ย้อนหลังในห้องได้
- สื่อ:ไฟล์ที่อัปโหลด รูปภาพขนาดย่อ และสำเนาไฟล์ที่แคชไว้จากโฮมเซิร์ฟเวอร์อื่นๆ ไฟล์เหล่านี้จะอยู่ในที่เก็บสื่อหรือในที่เก็บข้อมูลภายนอกที่กำหนดค่าไว้
เอกสารอย่างเป็นทางการของ Synapse อธิบายถึงนโยบายการเก็บรักษาข้อมูลสำหรับเหตุการณ์และการล้างข้อมูลสื่อแยกจากกัน การล้างประวัติห้องไม่ได้หมายความว่าพื้นที่จัดเก็บสื่อได้รับการล้างแล้ว และการลบไฟล์สื่อไม่ได้ลบเหตุการณ์ที่เชื่อมโยงกับไฟล์นั้น เริ่มต้นด้วยการบันทึกขนาดฐานข้อมูล ขนาดพื้นที่จัดเก็บสื่อ ห้องที่ได้รับผลกระทบ และจุดสิ้นสุดที่ต้องการ ดูคู่มือการกำหนดค่า Synapse
สำรองข้อมูลก่อนทำการล้างข้อมูล
ทำการสำรองข้อมูลฐานข้อมูลโดยใช้ขั้นตอนที่แนะนำสำหรับเอนจินฐานข้อมูลของคุณ และสำรองข้อมูลที่เก็บสื่อหรือที่เก็บสื่อภายนอกด้วย การสำรองข้อมูลฐานข้อมูลเพียงอย่างเดียวจะไม่เก็บรักษาไฟล์ที่อัปโหลดไว้ และการสำรองข้อมูลสื่อเพียงอย่างเดียวจะไม่สามารถกู้คืนเหตุการณ์ในห้องได้ ตรวจสอบให้แน่ใจว่าสามารถอ่านไฟล์สำรองได้และคุณรู้วิธีการกู้คืนก่อนดำเนินการต่อ หาก Synapse ทำงานในคอนเทนเนอร์หรือใช้เวิร์กเกอร์แยกต่างหาก ให้รวมการกำหนดค่าและวอลุ่มจัดเก็บข้อมูลที่เกี่ยวข้องไว้ในแผนการบำรุงรักษาของคุณด้วย
สำหรับเซิร์ฟเวอร์จำลองของ Northstar ผู้ดูแลระบบจะบันทึกขนาดของฐานข้อมูลและพื้นที่จัดเก็บสื่อ และตรวจสอบจุดคืนค่าล่าสุดก่อนที่จะแตะต้องห้องที่ใช้ร่วมกัน ซึ่งมีประโยชน์เพราะการ "ล้างข้อมูล" จะสำเร็จก็ต่อเมื่อลบข้อมูลที่ต้องการออกไป ในขณะที่ยังคงรักษาเนื้อหาที่จำเป็นให้สามารถกู้คืนได้
เลือกกำหนดระยะเวลาการเก็บรักษาข้อมูลเพื่อการทำความสะอาดอย่างต่อเนื่อง
หากคุณต้องการให้ Synapse ยังคงใช้ policy ต่อไป ให้กำหนดค่าการเก็บรักษาเหตุการณ์และการเก็บรักษาสื่อแยกกันในการตั้งค่า homeserver ตัวอย่างเช่น ผู้ดูแลระบบสามารถปรับตัวอย่างนี้สำหรับเซิร์ฟเวอร์ที่มี policy ที่ได้รับการอนุมัติคือ 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 เองหรือในที่เก็บสื่อภายนอก API การลบสื่อในเครื่องของ Synapse ไม่สามารถลบสื่อที่จัดเก็บไว้ในที่เก็บภายนอกได้
ลบกิจกรรมในห้องเก่าๆ ตามต้องการ
สำหรับการล้างข้อมูลครั้งเดียว ให้ใช้ Synapse Purge History Admin API การดำเนินการนี้ต้องใช้ โทเค็นการเข้าถึง ของผู้ดูแลระบบเซิร์ฟเวอร์ การเป็นผู้ดูแลระบบของห้องแต่ละห้องนั้นไม่เหมือนกัน Synapse แนะนำให้ซ่อน Admin API จากการมองเห็นของสาธารณะ และโดยทั่วไปแล้วให้ทำการร้องขอเหล่านี้จากเซิร์ฟเวอร์หรือโฮสต์การดูแลระบบที่เชื่อถือได้ อย่าวางโทเค็นการเข้าถึงที่ใช้งานอยู่ลงในประวัติเชลล์ที่ใช้ร่วมกัน ตั๋ว หรือบันทึกต่างๆ
คำขอต้องระบุเวลาตัดยอดโดยใช้รหัสเหตุการณ์หรือการประทับเวลาแบบ Unix ในหน่วยมิลลิวินาที ตัวอย่างคำสั่งเชลล์ต่อไปนี้เป็นเพียงตัวอย่างประกอบ โปรดแทนที่ homeserver, รหัสห้อง, ตัวแปรโทเค็น และเวลาตัดยอดตัวอย่างด้วยค่าที่คุณได้ตรวจสอบแล้ว ตัวอย่างนี้ยังร้องขอให้ลบเหตุการณ์ข้อความของผู้ใช้ภายในเครื่องด้วย:
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โปรดดูเอกสารประกอบ API การลบประวัติก่อนเลือกจุดตัด โดยเฉพาะอย่างยิ่ง ให้ตรวจสอบว่าการลบเหตุการณ์ภายในเครื่องเหมาะสมกับห้องของคุณหรือไม่
ล้างแคชสื่อในเครื่องและแคชระยะไกลแยกกัน
สำหรับการล้างข้อมูลที่เกิดขึ้นซ้ำๆmedia_retentionให้เลือกช่วงเวลาการใช้งานที่ตรงกับระยะเวลาการใช้งานที่คุณสัญญาไว้กับผู้ใช้ สำหรับการล้างข้อมูลแบบครั้งเดียว Synapse มีเอนด์พอยต์ที่แตกต่างกันดังนี้:
- สื่อในเครื่อง:
POST /_synapse/admin/v1/media/delete?before_ts=<timestamp_ms>ลบสื่อในเครื่องที่เข้าเกณฑ์โดยอิงจากเวลาใช้งานครั้งล่าสุด API ยังยอมรับเกณฑ์ขนาดด้วย สื่อโปรไฟล์และรูปประจำตัวห้องจะถูกเก็บไว้โดยค่าเริ่มต้น อย่าปิดใช้งานการป้องกันนี้เว้นแต่คุณได้ตรวจสอบผลที่ตามมาอย่างรอบคอบแล้ว
- แคชสื่อระยะไกล:
POST /_synapse/admin/v1/purge_media_cache?before_ts=<timestamp_ms>ลบแคชสื่อระยะไกลที่มีการเข้าถึงครั้งสุดท้ายก่อนเวลาที่กำหนด หากผู้ใช้ร้องขอไฟล์ระยะไกลที่ถูกลบในภายหลัง Synapse สามารถร้องขอไฟล์นั้นจากโฮมเซิร์ฟเวอร์ต้นทางได้อีกครั้ง
ปลายทางทั้งสองใช้การประทับเวลา Unix ที่เป็นบวกในหน่วยมิลลิวินาที และการตัดข้อมูลสื่อจะขึ้นอยู่กับการเข้าถึงครั้งล่าสุด ไม่ใช่เพียงแค่การอัปโหลดหรือวันที่สร้าง API การลบสื่อในเครื่องจะลบไฟล์และภาพขนาดย่อออกจากพื้นที่จัดเก็บข้อมูลของ Synapse เอง รวมถึงสำเนาที่แคชไว้ในเครื่องของไฟล์ระยะไกลด้วย แต่จะไม่ล้างข้อมูลในที่เก็บสื่อภายนอก การตอบสนองจะรายงานจำนวนรายการที่ถูกลบ ตรวจสอบAPI การจัดการสื่อของ Synapseสำหรับพารามิเตอร์ปัจจุบันและรายละเอียดปลายทางก่อนเรียกใช้คำขอ
สำหรับตัวอย่างของ Northstar ผู้ดูแลระบบจะต้องทดสอบค่าตัดกับนโยบายที่ได้รับการอนุมัติก่อน และตรวจสอบว่า ID หรือจำนวนที่ส่งคืนจากปลายทางตรงกับที่คาดไว้หรือไม่ หากแคชระยะไกลเป็นแหล่งที่มาของการเติบโตเพียงอย่างเดียว การล้างข้อมูลที่อัปโหลดในเครื่องจะเป็นการดำเนินการที่ไม่ถูกต้อง หากต้องคงข้อมูลที่อัปโหลดในเครื่องไว้ให้ใช้งานได้ ให้เลือกอายุการใช้งานในเครื่องที่ยาวขึ้น หรือหลีกเลี่ยงปลายทางสำหรับการล้างข้อมูลสื่อในเครื่อง
วัดผลลัพธ์และปรับเปลี่ยนแนวทางเมื่อจำเป็น
หลังจากเสร็จสิ้นแต่ละงาน ให้ตรวจสอบว่าการล้างข้อมูลเสร็จสมบูรณ์แล้ว ตรวจสอบจำนวนการตอบสนองของ API ยืนยันว่าห้องตัวอย่างแสดงขอบเขตประวัติที่คาดหวัง และเปรียบเทียบการใช้งานฐานข้อมูลและพื้นที่จัดเก็บสื่อแยกกัน การลดลงของจำนวนแถวในฐานข้อมูลอาจไม่ปรากฏให้เห็นในทันทีว่าเป็นการลดลงของการใช้งานดิสก์ของระบบปฏิบัติการที่เท่ากัน การเรียกคืนพื้นที่ฐานข้อมูลขึ้นอยู่กับเอนจินฐานข้อมูลและขั้นตอนการบำรุงรักษา ปฏิบัติตามคำแนะนำของผู้จำหน่ายฐานข้อมูลแทนการลบไฟล์ฐานข้อมูลด้วยตนเอง
หากฐานข้อมูลลดขนาดลง แต่พื้นที่จัดเก็บสื่อไม่ลดขนาดลง ให้ตรวจสอบการเก็บรักษาสื่อ ตัวจัดการสื่อที่มีenable_media_repoสถานะการกักกันหรือการป้องกัน และตรวจสอบว่าไฟล์ถูกจัดเก็บไว้ภายนอกหรือไม่ หากการใช้งานสื่อลดลง แต่ข้อความเก่าๆ ยังคงอยู่ นั่นเป็นเรื่องปกติเมื่อมีการล้างข้อมูลสื่อเท่านั้น หากเหตุการณ์ยังคงอยู่โดยไม่คาดคิด ให้ตรวจสอบว่าเปิดใช้งานการเก็บรักษาไว้หรือไม่ ห้องสนทนามีสถานะการเก็บรักษาของตัวเองหรือไม่ เหตุการณ์ในเครื่องถูกเก็บรักษาไว้โดยเจตนาหรือไม่ และสถานะการล้างข้อมูลเสร็จสมบูรณ์แล้วหรือไม่
สำหรับ Northstar เกณฑ์ความสำเร็จไม่ได้อยู่ที่เพียงแค่ “ดิสก์มีขนาดเล็ลง” เท่านั้น แต่หมายถึงว่าขอบเขตประวัติเก่าที่ได้รับการอนุมัติยังคงมองเห็นได้ ข้อความและไฟล์แนบปัจจุบันที่จำเป็นยังคงใช้งานได้ หมวดหมู่สื่อที่ต้องการได้รับการล้างข้อมูล และการสำรองข้อมูลทั้งสองยังคงใช้งานได้ หากการตรวจสอบเหล่านี้ล้มเหลว ให้หยุดการล้างข้อมูลเพิ่มเติมและตรวจสอบนโยบายห้อง การตอบสนอง API การกำหนดค่าตัวทำงาน และระบบจัดเก็บข้อมูลเบื้องหลังก่อนที่จะขยายขอบเขตการล้างข้อมูล
ข้อจำกัดที่ควรคำนึงถึง
นโยบายการเก็บรักษาข้อมูลไม่ใช่สิ่งที่จะมาทดแทนการตรวจสอบทางกฎหมายหรือการเก็บรักษาบันทึกขององค์กรได้ การเชื่อมต่อแบบเฟเดอเรชั่นหมายความว่าโฮมเซิร์ฟเวอร์อื่นๆ อาจเก็บสำเนาของเหตุการณ์หรือสื่อต่างๆ ไว้ และ Synapse ไม่สามารถรับประกันการลบข้อมูลจากเซิร์ฟเวอร์เหล่านั้นได้ การล้างแคชสื่อระยะไกลจะลบแคชของเซิร์ฟเวอร์นี้ แต่จะไม่ลบไฟล์ต้นฉบับบนโฮมเซิร์ฟเวอร์ต้นทาง ในทำนองเดียวกัน การลบเหตุการณ์หรือวัตถุสื่อในเครื่องจาก Synapse จะไม่เรียกคืนสำเนาที่ผู้เข้าร่วมรายอื่นดาวน์โหลดไว้แล้ว
ใช้การเก็บรักษาตามกำหนดเวลาเมื่อคุณต้องการนโยบายที่ทำซ้ำได้ ใช้ Admin API สำหรับการล้างข้อมูลที่ได้รับการตรวจสอบและกำหนดเป้าหมาย แยกการดำเนินการทั้งสองออกจากกันในบันทึกการเปลี่ยนแปลงของคุณ เนื่องจากสัญญาณความสำเร็จและผลกระทบของการดำเนินการทั้งสองแตกต่างกัน