將流量遷移至 Firestore

本頁說明遷移程序的最後階段,也就是監控遷移作業,並決定何時切換流量,盡量減少應用程式的停機時間。

步驟如下:

  1. 判斷資料移轉期間是否發生任何錯誤。請注意,目前資料類型和文件大小有已知限制
  2. 判斷何時適合停止寫入來源資料庫的流量。
  3. 判斷所有資料 (包括近期變更事件) 何時複製到與 MongoDB 相容的 Firestore 資料庫。此時,您可以安全地將讀取流量重新導向至新目的地。
  4. 確認所有應用程式工作負載都只從 Firestore 讀取資料後,即可安全地啟用與 MongoDB 相容的 Firestore 資料庫,並將寫入流量導向該資料庫。

查看遷移完成里程碑

如要按照本節的操作說明進行,必須在 Google Cloud 控制台中存取 Dataflow。

前往 Google Cloud 控制台的「Dataflow」頁面:

前往 Dataflow

來源資料庫正在接收所有讀取和寫入流量

啟動 Datastream 和 Dataflow 管道後,來源資料庫應會繼續接收讀取和寫入流量。您可以根據下列里程碑,判斷遷移作業何時可以進入下一個步驟:

  • Dataflow 管道的「交易寫入事件」步驟不再處理資料積壓,輸送量降至與來源資料庫的有效流量相符的低穩定狀態:

    交易寫入事件

  • Datastream「監控」分頁中的資料更新頻率至少會與來源資料庫的即時流量相近:

    資料更新間隔

資料轉移達到穩定狀態後,請繼續下一個步驟。

停止將寫入流量傳送到來源資料庫

確認 Datastream 串流已完成大量回填,且 Dataflow 範本只會以穩定速度為來源資料庫的即時變更執行交易寫入作業後,即可開始轉換程序。這個程序需要短暫停機,才能將所有剩餘流量複製到與 MongoDB 相容的目標 Firestore 資料庫。

  1. 停止所有寫入流量,以免影響 MongoDB 相容的來源資料庫。視應用程式需求和功能而定,您可能想繼續允許讀取來源資料庫的流量。

  2. 監控 Datastream 輸送量和記錄,以及 Dataflow 輸送量、資料延遲和記錄,確保最後的寫入流量已處理完畢。

  3. 檢查無效信件佇列。 判斷遷移期間是否有任何文件無法寫入目的地資料庫,並決定是否要繼續遷移。

將讀取流量遷移至 Firestore

所有待處理的變更串流事件都複製到 Firestore 後,兩個資料庫就會包含完全相同的資料。現在可以轉移讀取流量,然後再轉移寫入流量。

如果您在上一個步驟中選擇允許讀取流量存取與 MongoDB 相容的來源資料庫:

  1. 轉移讀取流量。
  2. 請確認所有原本連線至 MongoDB 相容來源資料庫的服務,都已更新為從與 MongoDB 相容的 Firestore 資料庫執行讀取作業。

將寫入流量遷移至 Firestore

完成上一個步驟後,即可安全地將應用程式的寫入流量直接重新導向至 Firestore。

停止遷移管道

遷移作業現已完成。現在可以停止 Datastream 串流和 Dataflow 工作。

暫停 Datastream 串流:

gcloud datastream streams update "$DATASTREAM_NAME" \
--location="$LOCATION" \
--state=PAUSED \
--update-mask=state

如要關閉 Dataflow 管道,請執行下列指令:

  1. 列出所有目前的工作:

    gcloud dataflow jobs list --region="$LOCATION"
    

    輸出內容會產生 Dataflow 工作清單。

  2. 在工作清單中,找出時間戳記與您在 DATAFLOW_START_TIME 環境變數中指定的時間戳記相符的 NAME 值。

    格式:dataflow-mongodb-to-firestore-DATAFLOW_START_TIME。 範例:dataflow-mongodb-to-firestore-20250514173638

  3. 取得對應的 JOB_ID。例如:2025-05-14_17_36_39-10772223470853954680

  4. 針對這個工作 ID 執行排空指令:

    gcloud dataflow jobs drain \
    JOB_ID \
    --region="$LOCATION"
    

    範例:

    gcloud dataflow jobs drain \
    2025-05-14_17_36_39-10772223470853954680 \
    --region="$LOCATION"
    

後續步驟

如需疑難排解提示,請參閱「遷移疑難排解」。