แอปมือถือ Immich ได้รับการปรับปรุงประสิทธิภาพครั้งใหญ่ด้วยระบบซิงค์ใหม่

ทีมชุมชน BigGo
แอปมือถือ Immich ได้รับการปรับปรุงประสิทธิภาพครั้งใหญ่ด้วยระบบซิงค์ใหม่

แพลตฟอร์มจัดการภาพถ่ายแบบโอเพนซอร์ส 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