洞察整合約 4 分鐘閱讀

檔案交換仍不可避免時:SFTP 整合的可靠性設計

SFTP 解決的是安全傳輸,不是完整的系統整合。真正穩定的檔案交換,需要把每個檔案視為一筆有狀態、可驗證、可重播的業務交易。

檔案交換仍不可避免時:SFTP 整合的可靠性設計

先定義交換契約,不要只交換連線資訊

SFTP 常被視為「給帳號、主機與目錄就能開始」,但連線成功只是最低門檻。可靠性通常取決於雙方是否先定義清楚交換契約:誰產生檔案、何時可視為完成、接收方多久處理、失敗由誰負責,以及原始檔案保留多久。若這些規則只存在於郵件或口頭約定中,任何欄位、排程或檔名調整都可能演變成難以定位的營運事故。

契約至少應涵蓋檔名格式、目錄用途、字元編碼、分隔符號、日期與時區、空值表示、欄位型別、版本欄位及資料筆數或控制總額。CSV 看似簡單,實際上常在換行、引號、前導零與 Excel 自動轉型上出問題;固定寬度格式則需要明確定義位元組長度與編碼。若內容涉及敏感資料,也要區分傳輸加密與檔案本身的加密需求,必要時使用 PGP,並事先安排金鑰輪替流程。

用原子式交付避免讀到半個檔案

最危險的設計,是接收端看到檔名後立刻開始解析。大型檔案仍在上傳時,輪詢程序可能讀到不完整內容;即使再次執行成功,也可能已將部分資料寫入下游。較穩健的方式是先以上傳中副檔名或暫存目錄傳送,確認傳輸完成後,再於同一個 SFTP 檔案系統內重新命名或移入正式收件目錄。重新命名通常比跨系統搬移更接近原子操作,但仍應以實際伺服器行為驗證。

若對方平台無法重新命名,可以要求額外的完成標記檔,或讓接收端連續觀察檔案大小與修改時間,確認穩定後才處理。後者只是折衷方案,等待時間過短會誤判,過長則增加延遲。無論採用哪一種方式,都應驗證檔案大小、雜湊值或簽章;只依賴 SFTP 連線成功,無法證明業務檔案完整且未被錯置。

  • 上傳:先寫入暫存名稱,完成後才發布正式檔名。
  • 驗證:檢查格式、版本、必要欄位、筆數與雜湊值。
  • 處理:只有通過驗證的檔案才能進入 ERP、CRM 或資料平台。
  • 歸檔:保留原始檔、處理結果與時間戳,錯誤檔則移入隔離區。

以冪等性處理重送、重複與中斷

檔案交換必須假設同一個檔案會被看見不只一次。對方可能因逾時而重送,排程可能重疊,系統也可能在寫入資料庫後、標記完成前重新啟動。接收程序若只靠「檔案目前不在收件匣」判斷是否處理過,就容易重複建立訂單、庫存異動或客戶資料。

實務上應建立處理台帳,記錄來源、檔名、大小、內容雜湊、契約版本、首次發現時間、處理狀態與結果。狀態可區分為已發現、已穩定、已驗證、處理中、已完成、失敗與已隔離。唯一識別不應只依賴檔名,因為合作方可能重複使用名稱;內容雜湊有助於辨識完全相同的重送,但若業務允許相同內容在不同日期重複出現,還要搭配業務批次編號或交換識別碼。

冪等性也必須延伸到下游。最理想的情況,是資料寫入與處理台帳更新位於同一交易邊界;若跨越多個 API 或系統,則應使用穩定的冪等鍵、逐筆結果紀錄與可恢復的狀態機。不要把「整個檔案再跑一次」當成唯一復原方式,因為部分成功的檔案需要明確決定是回滾、跳過已完成項目,還是產生補償動作。

讓重試、告警與人工重播彼此配合

所有錯誤都重試並不可靠。網路中斷、暫時性 DNS 問題或伺服器忙碌適合使用有上限的指數退避;驗證失敗、未知版本或欄位不符則不會因等待而自行修復,應立即隔離並通知負責人。權限被撤銷、主機金鑰改變或磁碟空間不足,也需要明確告警,不能在背景無限重試。

監控應回答業務與工程共同關心的問題:預期檔案是否準時抵達、檔案卡在哪個狀態、已重試幾次、最後成功時間為何,以及哪些下游資料已寫入。日誌需包含交換識別碼與檔案指紋,但不應直接輸出敏感內容或憑證。告警訊息最好附上來源、檔名、狀態、錯誤分類與建議處置,否則值班人員仍需從多個系統拼湊線索。

人工重播必須是正式能力,而不是登入伺服器手動搬檔。操作介面或指令應要求指定檔案、重播範圍與原因,沿用原有冪等規則,並留下操作者與結果紀錄。原始檔及驗證結果要依資料治理要求保存,使團隊能重現問題,同時避免把 SFTP 目錄誤當成永久檔案庫。

上線前用故障情境驗證設計

整合測試不應只驗證一個正確範例。至少要模擬傳輸中斷、截斷檔案、空檔案、重複檔名、相同內容重送、延遲到達、順序顛倒、格式版本不支援、編碼錯誤、下游逾時,以及處理完成前程序重啟。安全面則要驗證 SSH 主機金鑰釘選、最小權限帳號、來源網路限制、私鑰保管與輪替。主機金鑰改變時應停止並確認,而不是自動接受新的身分。

最後,為每條交換流程指定業務與技術負責人,定義服務時段、延遲容忍、補件截止時間與事件處理方式。若檔案交換已成為關鍵營運鏈路,應將契約、台帳、監控與重播能力視為正式整合元件。與有經驗的整合團隊合作時,重點也應放在這些可運作、可稽核的機制,而不只是把 SFTP 連通。

開始

有類似的需求?

告訴我們你的產業、目前系統狀態與預算範圍。我們會在 2 個工作天內回覆,並安排 30 分鐘免費諮詢。

LINE 諮詢