當你在 Synology Photos 中滑動數萬張相片,或是與團隊成員輕鬆共享整個專案的影像資料時,一切都是那麼滑順、自然。在這份體驗的背後,Synology Photos 後端系統可說是搭載了一套精細的運作邏輯。
你可以將 Synology Photos 的後端,想像成一個精密的工廠,其核心是一套開發團隊稱為「任務中心」(Task Center)的高效產線。每一秒,都有成千上萬的任務流轉於這條產線:從你手機上傳的照片備份、為相片計算相似度、讀取檔案資訊、產生縮圖、辨識人臉與物件,再到更新地理位置等等。在如此繁忙且複雜的產線中,Synology Photos 如何確保系統能精準分工、順暢運作,避免一個小小的錯誤就癱瘓整條產線?答案,就在於我們為這套產線設計的一系列環環相扣的工程實踐。
實踐一:非同步處理與優先順序排程——確保關鍵任務先行
一座效率高的工廠,其流水線絕不能因為一個耗時的零件加工而停擺。同理,你的操作介面,也就是你眼前的「主線道」,也絕不應該被任何一個後端任務卡住。
在軟體世界中,每一次點擊都是在向伺服器發送一個請求,而兩者之間的溝通橋樑,就是軟體工程師常說的 API(應用程式介面)。開發團隊將所有可能耗時的操作,都設計為非同步(Asynchronous)處理,也就是說你的操作會被放入精密產線中排隊,而 API 會立刻送回一個「任務已受理」的回應,讓你的介面馬上恢復運作。
然而,非同步只是基礎。這條流水線真正的精妙之處,在於它的優先順序排程。上述提到的所有加工程序,其重要性和緊急程度各不相同。例如使用者最關心的可能是盡快看到相片。因此這條產線被設計為:一旦最根本的檔案索引和縮圖生成完成,這張相片就會馬上出現在 Synology Photos 介面中,伺服器會主動將這個更新回傳到瀏覽器,無需手動刷新。
而人臉辨識、地理位置查詢等處理相對耗時、且不影響你立即瀏覽的任務,則排在較低的優先順序,在產線的後續站點,利用系統的閒置資源繼續處理。這種設計確保了主要體驗(看見相片)的即時性,同時也保證了後續的豐富功能(如按地圖或人物搜尋)能完成,實現了體驗與效能的完美平衡。
實踐二:任務的精細化拆解——在極端任務中確保絕對可靠
另一個產線運作的挑戰,是如何處理極端化的任務,像是刪除一個包含 700 萬張相片的資料夾。如果處理不當,不僅可能耗盡系統所有記憶體,甚至讓任務永遠無法完成。要確保這類任務的可靠性,必須深入到資料庫操作的核心概念——Transaction。
一個 Transaction,可以理解為一組「要嘛全部成功,要嘛全部失敗」的操作指令,假設開發團隊將「刪除 700 萬張相片」設計成一個巨大、單一的 Transaction,將會面臨災難性的後果:
- 資源耗盡:系統需要一次性將 700 萬筆照片的刪除任務,全部載入記憶體,極為容易觸發記憶體耗盡,導致整個任務從一開始就失敗。
- 長時間鎖定:在這個巨大 Transaction 執行的數小時內,會鎖定相關資料庫,完全無法讀寫這些資料。
- 高失敗風險:如果在處理到第 699 萬張相片時發生任何意外(例如 NAS 重新啟動),之前數小時的工作將前功盡棄,一切歸零。
開發團隊的解決方案,是將這個龐大的任務拆解成「微型 Transaction」的方案。但真正的難點在於「拆分顆粒度」的拿捏:
- 拆得太大(例如每 10 萬張相片一個 Transaction):雖然減少了資料庫提交的次數,但單次執行的時間依然很長,一旦失敗,損失的工作量依然巨大,且長時間鎖定資料庫也會影響其他操作。
- 拆得太細(例如每 1 張相片一個 Transaction):雖然單次失敗的損失極小,但極度頻繁的資料庫提交與關閉操作,會對硬碟讀寫的過程造成巨大壓力,反而會因為硬碟忙於處理這些瑣碎的請求而拖慢整體效能。
要找到最佳的「甜蜜點」,沒有一體適用的公式,而是需要大量的測試、經驗累積,以及針對不同任務特性的彈性調整。例如,刪除任務的 Transaction 顆粒度,就會與更新中繼資料的任務有所不同。經過反覆調整,我們為不同類型的任務設定了最佳的批次大小,例如在套件升級時,每 100 筆項目的舊資料更新,就會被包裹成一個獨立的 Transaction。
這個設計帶來了兩大核心優勢:
- 可靠性:每一個「微型 Transaction」都是一個獨立的操作。即使在處理過程中發生意外,也只會影響到當前正在處理的那個小批次。任務可以在解決問題後,從中斷的地方繼續執行。
- 即時回饋進度:以刪除相片為例,因為資料是批次從資料庫中移除,這個進度可以迅速反映在 UI 介面上。你看到的不再是長時間的等待後,所有相片瞬間消失;而是一批一批相片平滑地、逐漸地從你的視野中移除。這不僅提供了直覺的進度感,更讓你確信,系統正在穩定地為你工作。
為你的資料打造一條永不堵塞的精密產線
Synology Photos 的穩定與高效,源自於開發團隊在產品底層對任務處理的系統性思考。透過非同步 API 設計,將「等待」從你的眼前移走;透過將大型操作拆解為「微型 Transaction」,為最極端的資料處理提供了高度的可靠性與反應能力。
我們相信,最好的使用者體驗,是讓你完全感受不到背後複雜的運作機制。開發團隊持續投入與改善架構,正是為了打造這樣一條永遠為你保持暢通、值得信賴的任務產線,確保無論你的資料庫如何增長,Synology Photos 都能從容應對,穩定運作。