設定暖機要求以改善效能

當應用程式的程式碼載入到新建立的執行個體時,使用暖機要求可避免要求和回應延遲。

App Engine 經常需要將應用程式的程式碼載入新的執行個體。發生以下情況時,可能會載入執行個體:

  • 重新部署應用程式的版本時。
  • 因要求產生的負載超過目前運作中執行個體的容量,而建立新的執行個體時。
  • 基礎架構或實體硬體進行維護及修復時。

將應用程式的程式碼載入至新執行個體時,可能會產生載入要求。載入要求可能會增加使用者的要求延遲時間,但是使用「暖機要求」即可避免延遲增加。暖機要求會在任何即時要求到達該執行個體前,先將您應用程式的程式碼載入到新的執行個體。

如果您的應用程式啟用了暖機要求,App Engine 會嘗試偵測應用程式何時需要新的執行個體,並且發出暖機要求來初始化新的執行個體。然而,嘗試偵測的功能並非在每種情況下均能有效運作。因此,即使應用程式已啟用暖機要求,您仍可能會發生載入要求的情況。舉例來說,如果您的應用程式沒有提供流量,則向應用程式發出的第一個要求一律為載入要求,而非暖機要求。

如同其他所有向 App Engine 應用程式發出的要求,暖機要求也會計入執行個體時數。在大部分暖機要求已啟用的狀況下,您不會注意到執行個體時數增加,這是因為應用程式只是單純在暖機要求中 (而非載入要求) 進行初始化。如果您決定要執行更多工作,例如在暖機要求期間預先進行快取,則執行個體的時數使用量可能會增加。如果您有設定閒置執行個體的數量下限,則可能會在這些執行個體初次啟動時發生暖機要求,但這些執行個體從此之後就會保持可用的狀態。

啟用暖機要求

暖機要求是由 App Engine 排程器使用,排程器會依據使用者提供的設定,控制執行個體的自動調整資源配置。App Engine 會在暖機要求啟用的情況下向 GET 發出 /_ah/warmup 要求。您可以針對這個要求實作處理常式,以便執行應用程式專屬的工作,例如預先快取應用程式資料。

當排程器判定需要更多執行個體時,就會啟動執行個體。由於排程器會使用暖機要求啟動執行個體,因此即使停用了暖機要求,這些要求仍可能會出現在記錄中。

提醒您,暖機要求並不保證能夠呼叫成功,且在某些狀況下會改為傳送載入要求,例如:該執行個體為首先啟動的執行個體,或是流量發生遽增。然而,如果暖機要求已經啟用,系統會「盡可能」嘗試將要求傳送到暖機完成的執行個體。

如果已將暖機要求啟用,則排程器會在判定需要更多執行個體時啟動執行個體。由於排程器會使用暖機要求啟動執行個體,因此即使停用了暖機要求,這些要求仍可能會出現在記錄中。

如要啟用暖機要求,請在 app.yaml 檔案的 inbound_services 指令下新增 warmup 元素。例如:

inbound_services:
- warmup

註冊處理常式

如要註冊您的處理常式,請在 app.yaml 檔案中定義處理暖機要求的指令碼。例如:

inbound_services:
- warmup

handlers:
- url: /_ah/warmup
  script: main.py
  login: admin

這個範例會註冊處理常式,以監聽透過 main.py 檔案的指令碼處理常式向 /_ah/warmup 要求路徑發出的暖機要求。

建立處理常式

針對您要對應以回應 /_ah/warmup 要求路徑的處理常式,將您需要執行的邏輯建入其中。下列範例採用先前的範例做為基礎:

import webapp2

class MyWarmUpCode(webapp2.RequestHandler):
  """
  This class handles the warmup request. You should add any code that you
  need to execute in the `get` method, such as populating caches, and ensure
  that you return a successful HTTP response.
  """

  def get(self):

      # Your warmup logic goes here.

      # Return a successful response to indicate the logic completed.
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.write('Warmup successful')

  # ...

application = webapp2.WSGIApplication(
    [
        ('/_ah/warmup', MyWarmUpCode),
        # Other handlers
        # ...
    ]
)

後續步驟

上述的範例提供可供您使用的架構,請接著決定哪些邏輯屬於暖機要求處理常式。您可能要把值新增到應用程式需要的 Memcache 中。舉例來說,如果您建立及儲存網站目前的趨勢文章清單,那麼在暖機中建立該清單並將必要的資料儲存在 Memcache 中,就代表應用程式在使用者要求傳入時,已將提供服務所需的一切內容準備就緒,且不需要查詢使用者針對該資料所發出的要求,因此可加快回應速度。 相關主題:

本頁內容對您是否有任何幫助?請提供意見:

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

這個網頁
App Engine standard environment for Python 2