แพลตฟอร์มจัดการภาพถ่ายแบบโอเพนซอร์ส Immich ได้เปิดตัวการออกแบบระบบซิงโครไนเซชันมือถือใหม่หมด เพื่อแก้ไขปัญหาประสิทธิภาพที่มีมานานและทำให้ผู้ใช้ที่มีไลบรารีภาพถ่ายขนาดใหญ่รู้สึกหงุดหงิด การใช้งาน Sync v2 ใหม่สัญญาว่าจะแก้ปัญหาหน่วยความจำ ลดการใช้แบตเตอรี่ และขจัดความล้มเหลวในการซิงค์ที่เคยเป็นปัญหาของระบบเดิม
สถาปัตยกรรมแบบสตรีมมิงแทนที่วิธีการที่ใช้หน่วยความจำมาก
การเปลี่ยนแปลงที่สำคัญที่สุดคือการเปลี่ยนจากการประมวลผลข้อมูลทั้งหมดในหน่วยความจำไปเป็นวิธีการแบบสตรีมมิง ระบบใหม่อ่านข้อมูลจากฐานข้อมูล PostgreSQL เป็นชิ้นเล็กๆ ทำการซีเรียลไลซ์แบบค่อยเป็นค่อยไป และส่งผ่าน HTTP โดยใช้รูปแบบ JSON Lines ซึ่งขจัดความจำเป็นในการโหลดข้อมูลเมตาของภาพถ่ายจำนวนมากเข้าสู่หน่วยความจำในครั้งเดียว ซึ่งเคยทำให้แอปค้างหรือขัดข้องระหว่างการซิงค์
JSON Lines เป็นรูปแบบข้อมูลที่แต่ละบรรทัดมีออบเจ็กต์ JSON แยกต่างหาก ทำให้ง่ายต่อการประมวลผลข้อมูลทีละชิ้นแทนที่จะทำทั้งหมดพร้อมกัน
การปรับปรุงหลักของ Sync v2
- การสตรีมแบบ end-to-end: ข้อมูลไหลเป็นชิ้นเล็กชิ้นน้อยจากฐานข้อมูลเซิร์ฟเวอร์ไปยังฐานข้อมูลมือถือ
- การซิงค์แบบต่อเนื่องได้: การขัดจังหวะของเครือข่ายไม่จำเป็นต้องเริ่มต้นใหม่อีกต่อไป
- การอัปเดตแบบเพิ่มหน่วย: ส่งเฉพาะข้อมูลที่เปลี่ยนแปลงเท่านั้น
- ประสิทธิภาพหน่วยความจำ: กำจัด JSON objects ขนาดใหญ่ในหน่วยความจำ
- การใช้งาน UUIDv7: ตัวระบุเฉพาะแบบอิงเวลาสำหรับการเรียงลำดับที่เชื่อถือได้
- รูปแบบ JSON Lines: แต่ละบรรทัดประกอบด้วย JSON object แยกต่างหากสำหรับการสตรีม
การซิงค์แบบต่อเนื่องป้องกันการเริ่มใหม่ตั้งแต่ต้น
หนึ่งในฟีเจอร์ที่ผู้ใช้ขอมากที่สุดแก้ไขปัญหาที่ผู้ใช้หงุดหงิดกันทั่วไป คือเมื่อการเชื่อมต่อเครือข่ายขัดข้อง จะบังคับให้กระบวนการซิงค์ทั้งหมดเริ่มใหม่ตั้งแต่ต้น ระบบใหม่ใช้จุดตรวจสอบและโทเค็นการยืนยันเพื่อติดตามความคืบหน้า ทำให้ผู้ใช้สามารถดำเนินต่อได้ตรงจุดที่หยุดไว้หากการเชื่อมต่อขาดหาย
การใช้งานอาศัยตัวระบุ UUIDv7 ซึ่งรวมการประทับเวลากับค่าเฉพาะเพื่อสร้างระบบการเรียงลำดับที่เชื่อถือได้ ซึ่งรับประกันว่าแม้จะมีการประมวลผลภาพถ่ายหลายภาพพร้อมกัน การซิงค์ก็สามารถกำหนดได้อย่างแม่นยำว่าควรดำเนินต่อจากจุดไหน
UUIDv7 เป็นตัวระบุประเภทพิเศษที่รวมข้อมูลการประทับเวลาใน 48 บิตแรก ทำให้มีทั้งความเป็นเอกลักษณ์และการเรียงลำดับตามเวลา
การตอบสนองของชุมชนเน้นย้ำถึงความท้าทายที่ยังคงมีอยู่
ผู้ใช้ในชุมชน Immich แสดงความกระตือรือร้นต่อการปรับปรุงประสิทธิภาพ ขณะเดียวกันก็เน้นย้ำถึงปัญหาเพิ่มเติมที่ยังต้องได้รับการแก้ไข ผู้ใช้หลายคนรายงานปัญหาการจัดการการประทับเวลาจากภาพถ่าย iCloud และความล้มเหลวในการอัปโหลดเป็นครั้งคราวที่ต้องรีสตาร์ทแอป
ฉันสังเกตเห็นปัญหาเพียงสองอย่างกับแอปมือถือ และหนึ่งในนั้นเกี่ยวกับประสิทธิภาพ - มันจะติดขัดในการอัปโหลดภาพไปยังเซิร์ฟเวอร์ และไม่ว่าจะรอนานแค่ไหนก็ไม่สามารถทำให้เสร็จสมบูรณ์ได้
การอภิปรายยังเผยให้เห็นการสนับสนุนจากชุมชนที่แข็งแกร่งต่อโปรเจ็กต์ โดยผู้ใช้หลายคนย้ายจาก Google Photos ไปยังการติดตั้ง Immich แบบโฮสต์เองได้สำเร็จ อย่างไรก็ตาม ผู้ใช้บางคนสังเกตเห็นฟีเจอร์ที่ขาดหายไป เช่น การซิงค์แบบสองทิศทาง ซึ่งการลบภาพถ่ายจากอุปกรณ์จะลบออกจากเซิร์ฟเวอร์ด้วย
รายละเอียดการใช้งานทางเทคนิค
ทีมพัฒนาแก้ไขความท้าทายในการติดตามรายการที่ถูกลบโดยการใช้ทริกเกอร์ฐานข้อมูลที่เก็บบันทึกการลบไว้ชั่วคราว ซึ่งทำให้อุปกรณ์มือถือสามารถเรียนรู้เกี่ยวกับการลบในรอบการซิงค์ครั้งถัดไป เพื่อรับประกันความสอดคล้องของข้อมูลข้ามแพลตฟอร์ม
การเปลี่ยนจาก TypeORM ไปเป็น Kysely สำหรับการดำเนินการฐานข้อมูลแสดงให้เห็นการปรับปรุงประสิทธิภาพในส่วนอื่นๆ ของแอปพลิเคชันแล้ว ซึ่งมีส่วนช่วยในการเพิ่มประสิทธิภาพของระบบโดยรวม
ระบบซิงค์ใหม่เป็นขั้นตอนสำคัญสู่การเปิดตัวเวอร์ชันเสถียรของ Immich โดยแก้ไขหนึ่งในอุปสรรคทางเทคนิคสำคัญสุดท้ายสำหรับผู้ใช้ที่จัดการคอลเลกชันภาพถ่ายขนาดใหญ่ที่เกิน 100,000 รายการ
อ้างอิง: Sync v2