離線運作:低網路環境必備的系統設計
有一類系統,從設計第一天起就要假設「網路不存在」。
不是因為網路不好,而是因為它根本不可靠——出勤現場、偏遠山區、災難應變現場、地下室倉庫。在這些地方,你的系統如果需要連回總部伺服器才能動,它就是一個有問題的設計。
「離線支援」跟「離線優先」是兩件事
大多數人說的「支援離線」,是在系統建好之後,發現在某些環境用不了,才回頭加上離線功能。這種做法幾乎都會遇到麻煩:資料結構沒有為同步設計,快取的邊界不清楚,使用者操作離線版本後回到線上,資料衝突的處理完全沒考慮過。
「離線優先(Offline First)」是另一回事。它的假設是:網路是一種你偶爾能用到的資源,不是你可以依賴的基礎設施。
這個假設翻轉了很多決策。資料先存本地,再找機會同步。功能設計圍繞著「沒有網路的時候,使用者還需要做什麼」。
本地端服務的幾種形式
最常見的是在設備上跑一個輕量的本地服務,負責接受前端請求、讀寫本地資料庫。設備本身就是一個小型伺服器,不需要出去就能完整運作。
另一種是把服務部署在同一個區域網路(LAN)裡的一台機器上,區域內的所有設備都連這台機器,不出外網。這適合有固定場域但網路不穩定的情境,比如工廠、急救站、船上。
還有一種更極端的做法是邊緣運算(Edge Computing)——把運算能力放在最靠近資料來源的地方,減少對中央伺服器的依賴。這在 IoT 場域很常見,感測器收到的資料先在本地處理、過濾、分析,只把需要的結果往上送。
最麻煩的部分:同步
離線容易,同步難。
當設備重新連線,要把本地發生的事情送回去,同時要接收中央系統在這段時間的更新。如果兩邊同時修改了同一筆資料,誰的版本算數?
這個問題沒有一個通用答案,但有幾個常見的處理策略:
時間戳記 + 後寫優先:誰的修改時間比較晚就用誰的。簡單,但在時間不準確的設備上會出問題。
版本號 + 衝突偵測:每筆資料帶一個版本號,只要版本不一致就標記為衝突,讓使用者或系統決定怎麼合併。
只增不改(Append-Only):資料只能新增,不能修改。這樣同步就沒有衝突問題,代價是資料量增長快,查詢邏輯比較複雜。
我們在做嘉義 DMAT 物資系統的第三期時,選的是本地端網路部署。打包區自己架一台機器,所有操作都在這台機器上跑,完全不依賴外部網路。這不是因為技術上複雜,而是因為在出勤現場,任何依賴網路的流程都是一個潛在的斷點——這個斷點不能存在。
什麼情況真的需要離線設計
不是每個系統都需要這樣設計,也不應該。離線優先的代價是複雜度——本地儲存、同步邏輯、衝突處理,都是額外的工程量。
值得考慮的情境:
- 使用場域的網路不穩定或完全沒有
- 系統斷線會直接影響作業流程(不只是「用起來慢」)
- 資料在本地產生,之後才需要回傳彙整
不需要的情境:
- 系統主要在辦公室或穩定網路環境使用
- 即時資料一致性比離線功能更重要
- 使用者可以接受「請稍後再試」
判斷的核心問題只有一個:如果網路斷了,使用者被擋住了多嚴重? 如果答案是「完全沒辦法工作」而且這個情境真實存在,那這個問題值得在設計初期就正面處理,而不是等到上線後回頭補。
準備好開始你的專案了嗎?
讓我們一起規劃最適合的數位解決方案,從需求訪談到上線部署,全程陪伴。
Start a Project →