從單體式應用程式遷移至微服務

若開始使用舊版的單體式應用程式,您必須找出能夠分解並移至獨立微服務的組件。通常,結構良好的單體式應用程式會有非常自然的分區,而服務類別會做為資料儲存和業務邏輯層的介面。這類類別是將用戶端呼叫連結至微服務的理想位置。

區隔單體式應用程式中的功能

您可以採取幾種方法來區隔應用程式:

  • 在應用程式中尋找可以區隔的業務邏輯。
  • 找出本質上獨立的程式碼,例如使用靜態程式碼分析工具來辨別區段。
  • 檢查應用程式的邏輯,找出應用程式中您可能會因不同的資源配置設定或記憶體需求而受益的部分。這樣做有機會能夠節省成本並提高資源利用率。

您可能需要重構程式碼,以移除不合常理的依附元件。我們建議在您將應用程式區隔成不同服務之前,先在舊版程式碼中執行重構作業,接著再部署到實際工作環境。

微服務的共用區域包含下列項目:

  • 使用者或帳戶資訊
  • 授權和工作階段管理
  • 偏好設定或配置設定
  • 通知和通訊服務
  • 相片和媒體 (特別是中繼資料)
  • 工作佇列工作站

遷移應用程式的步驟

將一組類別識別為微服務的候選類別後,接下來的步驟包括:

  • 不移動現有的程式碼,並保持程式碼在舊版應用程式中運作,以加快復原作業。
  • 建立新的程式碼存放區,或至少在現有存放區中建立子目錄。
  • 將類別複製到新位置。
  • 編寫可提供 HTTP API 掛鉤的檢視層,並以適合的方式設定回應文件的格式。
  • 將新程式碼的格式設為獨立的應用程式 (建立 app.yaml)。
  • 將新的微服務部署為服務或個別專案。
  • 測試程式碼,確保運作正常。
  • 將資料從舊版應用程式遷移至新的微服務。請參閱下方的說明。
  • 更改現有的舊版應用程式,以使用新的微服務應用程式。
  • 部署更改過的舊版應用程式。
  • 確認所有項目皆依照預期運作,而且不需要復原到舊版應用程式。
  • 移除舊版應用程式所有無用的程式碼。

遷移運作中應用程式的資料

遷移運作中應用程式的資料可能很棘手,完全視您的狀況而定。為了便於執行更新和復原,您通常需要編寫能夠填入新舊 Cloud Datastore 實體的程式碼,方法可能是透過微服務上的臨時 API,然後編寫能夠遷移現有資料集的程式碼,例如將資料做為 MapReduce。這個過程通常會用到一些暫時性程式碼和備援資料。視您的具體狀況而定,您可能也需要在發布後執行資料遷移以跟上最新情況。提醒您,請勿以舊資料覆寫新資料。

雖然整個過程中要進行的作業似乎不少,但這些工作不會太特別。此外,在發生新微服務轉換失敗的情況下,能夠執行更新及復原作業的能力也相當重要。只有在您確認一切均已正確遷移並依預期運作後,才可以移除暫時性程式碼,並從舊的儲存位置中刪除資料。請務必在過程中隨時備份。

後續步驟