將後端轉換為服務

Google 自 2014 年 3 月 13 日起已淘汰 Backend API,並已於 2019 年 3 月 13 日全面停用。開發人員必須將所有後端執行個體遷移至 Services,否則執行個體將無法進行代管,也無法繼續提供流量。

原始的 App Engine 結構是以單一前端執行個體搭配選用的後端執行個體做為基礎。如果您有使用後端的應用程式,可能會想要將後端轉換為服務格式,以充分運用服務提供的其他功能,例如版本後端的功能。

App Engine 會以預設服務的非預設新版本自動執行現有的後端。系統會將常駐後端指派為手動調整資源配置,而動態後端則會指派為基本資源配置。

您可以將後端執行個體轉換為擁有名稱的版本化服務,且具有明確的資源調度類型及執行個體類別。您必須將原始的 backends.xml 檔案替換為多個 WAR 檔案,每個服務一個檔案。程序如下:

  1. 建立頂層 EAR 目錄。
  2. 在含有 appengine-application.xmlapplication.xml 檔案的 EAR 目錄中建立 META-INF 子目錄。
  3. 將服務宣告元素新增至 application.xml 檔案。
  4. 在含有預設服務的應用程式中找到各項服務的 EAR 目錄,並在這個目錄中建立子目錄。依據慣例,各個子目錄的名稱均與子目錄定義的服務相同。
  5. 將原始 WAR 目錄的內容複製到各個子目錄。原始的 WAR 中應該會包含一個名為「WEB-INF」的子目錄,每個新的子目錄都必須具備專屬的目錄備份。
  6. 將服務設定元素新增至各個子目錄中的 appengine-web.xml 檔案,然後完成服務名稱、資源調度或執行個體類別等設定。
  7. cron.xmldispatch.xmldos.xml 等應用程式設定檔只應包含在預設服務子目錄中,請將這些檔案從其他服務子目錄中移除。

舉例來說,以下是定義 memdbworkercmdline 這三個後端的 example/backends.xml 檔案:

<backends>
 <backend name="memdb">
   <class>B8</class>
   <instances>5</instances>
 </backend>
 <backend name="worker">
   <options>
     <fail-fast>true</fail-fast>
   </options>
 </backend>
 <backend name="cmdline">
   <options>
     <dynamic>true</dynamic>
   </options>
 </backend>
</backends>

如要將這些後端轉換為服務,請先假設您已建立名為「ear」的新 EAR 目錄,然後在 ear/META- INF/application.xml 檔案中將後端宣告為服務。請注意,這個檔案也會宣告預設服務:

<?xml version="1.0" encoding="UTF-8"?>
<application
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/application_5.xsd"
  version="5">

  <description>Demo Application</description>
  <display-name>My Java App</display-name>

  <!-- Default Module -->
  <module>
    <web>
      <web-uri>default</web-uri>
      <context-root>defaultcontextroot</context-root>
    </web>
  </module>
  <!-- Other Modules -->
  <module>
    <web>
      <web-uri>memdb</web-uri>
      <context-root>memdb</context-root>
    </web>
  </module>
  <module>
    <web>
      <web-uri>worker</web-uri>
      <context-root>worker</context-root>
    </web>
  </module>
  <module>
    <web>
      <web-uri>cmdline</web-uri>
      <context-root>cmdline</context-root>
    </web>
  </module>
</application>

每個服務的設定都會寫在個別的 appengine-web.xml 檔案中,位於對應的子目錄之下。在 ear/memdb/WEB-INF/appengine-web.xml 中:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>my-java-app</application>
  <module>memdb</module>
  <version>uno</version>
  <threadsafe>true</true>
  <instance-class>F4</instance-class>
  <manual-scaling>
    <instances>5</instances>
  </manual-scaling>
</appengine-web-app>

ear/worker/WEB-INF/appengine-web.xml 中:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>my-java-app</application>
  <module>worker</module>
  <version>uno</version>
  <threadsafe>true</threadsafe>
   <!-- For failfast functionality, please use the ‘X-AppEngine-FailFast’ header on requests made to this module. -->
  <instance-class>F2</instance-class>
  <manual-scaling>
    <instances>5</instances>
  </manual-scaling>
</appengine-web-app>

ear/cmdline/WEB-INF/appengine-web.xml 中:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>my-java-app</application>
  <module>cmdline</module>
  <version>uno</version>
  <threadsafe>true</threadsafe>
  <instance-class>F2</instance-class>
  <basic-scaling>
    <max-instances>10</max-instances>
  </basic-scaling>
</appengine-web-app>
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Java 8 適用的 App Engine 標準環境