在 App Engine 中建構網路服務

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 ID。

進一步瞭解區域 ID

本指南將說明如何建構 App Engine 應用程式的服務和相關資源。

目錄結構

App Engine 服務的每個版本都是透過 app.yaml 設定檔定義。如要部署簡單的應用程式,您至少必須定義 app.yaml 檔案。app.yaml 檔案的作用就像是部署作業描述元,可針對服務的特定版本來定義資源調度類型和 CPU、磁碟及記憶體資源。如要部署某項服務的數個版本,您可以在相同目錄中建立多個 YAML 檔案來表示各版本的設定。

對於 Java 執行階段,設定檔採用 YAML 格式。

您於本機開發時,可以在應用程式的根目錄下建立對應各項服務的獨立目錄。即使您將應用程式託管於版本控制系統 (VCS) 之外 (如 GitHub),仍可以建構應用程式來使用存放區內的獨立目錄,或使用適用於每項服務的獨立存放區。每個目錄或存放區應代表單一服務,並且包含該服務的 app.yaml 檔案及相關原始碼。

您可以選擇為服務的每個 app.yaml 檔案指定不重複的名稱。舉例來說,您可以用服務的名稱來命名設定檔,或為這項特定服務的每個版本指定不重複的名稱,如 service1.yamlapp.flexible.yaml

其他選用的設定檔應位於應用程式的 default 服務根目錄或存放區中。這些選用的設定檔套用了應用程式中不限特定服務的所有設定,包括 dispatch.yamlindex.yamlcron.yaml 檔案。

範例

簡易應用程式只需要在應用程式的來源檔案位置中新增 app.yaml。如果是單一服務應用程式,該應用程式只會包含 default 服務,且所有檔案皆可存放在該應用程式根目錄底下的相同目錄中:

單一 YAML 服務的階層圖表

如果您在本機開發應用程式,可參考下列範例,瞭解提供三種服務的應用程式可能呈現的架構。選用的 dispatch.yaml 檔案已新增至根目錄中的應用程式。根目錄中同時還有分別適用各應用程式服務的目錄 (共三個)。service1 的子目錄含有該服務的來源和設定檔。同樣地,service2service3 位於個別的目錄中,且這些目錄含有每項服務的檔案,不過 service3 含有兩個版本的 YAML 設定檔。

YAML 服務階層圖

在下列範例中,單一服務含有選用的 dispatch.yaml 檔案,以及代表該服務不同版本的 service1.yamlservice2.yaml 兩個設定檔:

小型 YAML 服務階層圖

執行個體運作時間的設計注意事項

系統可能會無預警地發生軟硬體故障,導致作業提前終止或執行個體頻繁重新啟動,而且可能需要耗費大量時間才能解決問題。 您的應用程式應該具備處理此類故障問題的能力。

您可以採取幾項有效的策略來避免因執行個體重新啟動而導致停機的狀況:

  • 減少重新啟動執行個體或啟動新執行個體所需的時間。
  • 對於需要長時間執行的運算,請定期建立查核點,以從查核點的狀態繼續執行。
  • 您的應用程式應處於「無狀態」,才不會在執行個體上儲存任何資料。
  • 使用佇列執行非同步工作。
  • 如果您將執行個體設定為手動調整資源配置:
    • 在多個執行個體之間使用負載平衡。
    • 設定超過處理一般流量所需的執行個體數量。
    • 撰寫可在無法手動調整執行個體的資源配置時,使用快取結果的恢復邏輯。

如要進一步瞭解執行個體,請參閱「執行個體的管理方式」。

default 服務

每個 App Engine 應用程式均包含 default 服務。您必須先將應用程式的初始版本部署至 default 服務,才能為應用程式建立及部署其他服務。

您可以視需要在 app.yaml 中設定 service: default,以指定預設服務。

使用 Google Cloud 專案傳送至您應用程式的要求會傳送至 default 服務,例如 https://PROJECT_ID.REGION_ID.r.appspot.com。如要進一步瞭解如何指定其他服務當做目標,請參閱「在服務之間進行通訊」。

選用設定檔

以下設定檔可控制適用於個別應用程式中所有服務的選用功能。如需各項選用功能的詳細資訊,請參閱以下主題:

  • cron.yaml 會設定定期工作,依照指定的時間或間隔規律執行特定工作。
  • dispatch.yaml 會根據網址中的路徑或主機名稱,將傳入要求傳送至特定服務,藉此覆寫轉送預設規則。
  • index.yaml 會指定應用程式在使用 Datastore 查詢時需要哪些索引。
    • 請注意,這個檔案適用於所有執行階段,但 .NET 執行階段除外。

資料和檔案儲存空間注意事項

您可以透過 App Engine 輕鬆存取其他 Google Cloud服務,例如 DatastoreCloud SQLCloud Storage

您也可以使用外部或第三方資料庫,前提是您使用的程式語言能夠支援該資料庫,而且您也能透過自己的 App Engine 執行個體存取該資料庫。

如需進一步瞭解如何在 Google Cloud 或外部儲存檔案,請參閱「瞭解資料與檔案儲存空間」。

您也可以選擇靜態內容的提供方式。您可以直接從 App Engine 中的應用程式提供應用程式的靜態內容、在 Cloud Storage 等 Google Cloud 選項上託管靜態內容,或是使用第三方內容傳遞聯播網 (CDN)。如要進一步瞭解如何提供靜態內容,請參閱「提供靜態檔案」。

後續步驟

如果您使用多項服務,且想要一起部署,請參閱部署多項服務的步驟。