在 Apigee Hybrid 中設定大型訊息酬載支援功能

總覽

Apigee Hybrid 支援大型訊息酬載,上限為 30 MB。從 Hybrid 1.15.1 開始,Hybrid 可允許大型訊息酬載,上限為 75 MB。預設訊息酬載大小為 10 MB。請參閱「訊息酬載大小」。

設定支援大小不超過 30 MB 的訊息酬載

如要讓混合式安裝中的環境支援大型訊息酬載,您必須對執行階段設定進行下列變更:

  • 將堆積大小增加至至少 4Gi。
  • 將記憶體限制提高至至少 6Gi。
  • 將記憶體資源要求提高至至少 4Gi。

您可以為個別環境或安裝中的所有環境進行這些設定。

設定個別環境,支援大型訊息酬載

如果設定為支援大型訊息酬載的 Proxy,在安裝作業中只有一個或幾個環境有端點,您可以設定這些環境支援大型酬載。這樣一來,就不必為不需要支援大型酬載的環境增加記憶體。

如要設定個別環境來支援大型訊息酬載,可以使用 envs[].components.runtime 屬性。對 overrides.yaml 檔案進行下列變更:

  1. 在 overrides.yaml 檔案中新增下列段落:
    envs:
    - name: ENV_NAME
      components:
        runtime:
          cwcAppend:
            bin_setenv_max_mem: 4096m   # Increase max heap size to 4 gigs
          resources:
            requests:
              memory: 4Gi
            limits:
              memory: 6Gi
    

    請參閱:

  2. 為要更新的每個環境升級 apigee-env 圖表:

    模擬測試:

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE \
      --dry-run=server
    
    • ENV_RELEASE_NAME 是用來追蹤 apigee-env 圖表安裝和升級作業的名稱。這個名稱不得與安裝作業中的其他 Helm 版本名稱重複。 通常與 ENV_NAME 相同。不過,如果環境與環境群組同名,則必須為環境和環境群組使用不同的版本名稱,例如 dev-env-release 和 dev-envgroup-release。如要進一步瞭解 Helm 中的版本,請參閱 Helm 說明文件中的「Three big concepts」(三大概念)。
    • ENV_NAME 是要升級的環境名稱。
    • OVERRIDES_FILE 是編輯過的 overrides.yaml 檔案。
  3. 升級圖表:

    模擬測試:

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE
    

設定所有環境,支援大型訊息酬載

變更 runtime 段落,即可為安裝作業中的所有環境設定堆積和記憶體限制。您可以使用 envs[].components.runtime 屬性,覆寫個別環境的設定。

  1. 在 overrides.yaml 檔案中新增下列段落:
    runtime:
      cwcAppend:
        bin_setenv_max_mem: 4096m   # Increase max heap size to 4 gigs
      resources:
        requests:
          memory: 4Gi
        limits:
          memory: 6Gi
    

    請參閱:

  2. 為安裝中的每個環境升級 apigee-env 圖表:

    模擬測試:

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE \
      --dry-run=server
    

    升級圖表:

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE
    

訊息酬載介於 30 MB 至 75 MB 的規範

在大型酬載情境中,訊息處理器的最佳堆積大小取決於您的特定用途,但 Apigee 提供一般指南,協助您完成這項程序。

如要計算每個訊息處理器 (MP) 的堆積大小,請使用下列值:

  • Q:每個 MP Pod 的 QPS 上限
  • L:每項要求的來回延遲時間 (預期延遲時間的第 95 個百分位數)
  • C:每個 MP 的總並行數量,即 MP 在任何指定時間可同時保留的要求數量上限。計算方式為 C = Q * L。
  • P_req:用戶端傳送至 Apigee 的要求酬載大小 (以 MB 為單位)
  • P_resp:從目標收到的回應酬載大小 (以 MB 為單位)
  • S - 安全係數 (Apigee 建議範圍為 1.5 至 2)
  • BASE_HEAP:基本堆積大小,用於考量與要求無關的資源,例如 Proxy 設定。(Apigee 建議使用 3072Mi)

考量安全係數 S 和基本堆積大小,每 MP 的總堆積計算方式如下:

每個 MP 的堆積大小 = BASE_HEAP + C * (P_req + P_resp) * S

大型酬載情境的基本覆寫設定如下:

envs:
  components:
    runtime:
      resources:
        requests:
          cpu: 2000m
          memory: 2Gi
        limits:
          cpu: 4000m
          memory: 4Gi
      cwcAppend:
        bin_setenv_max_mem: 3072m # base heap size

計算範例

以下是使用下列值計算的範例:

  • QPS 上限,Q:2
  • 延遲時間,L:7 秒
  • 要求酬載大小,P_req:40 MB
  • 回應酬載大小,P_resp:40 MB
  • 安全係數 S:1.5
  • 基本堆積大小,BASE_HEAP:3072Mi

Heap size = 3072 + (2 * 7) * (40+40) * 1.5 = 4752Mi

limits.memory預計會比建議的堆積大小多 1 Gi。

在這個範例中,您會將以下內容新增至 overrides.yaml:

envs:
  components:
    runtime:
      resources:
        requests:
          memory: 4Gi
        limits:
          memory: 5.75Gi # approximately 1Gi over 4.75Gi
      cwcAppend:
        bin_setenv_max_mem: 4752m

注意事項

流量暴增

HPA 可確保 MP 隨著 QPS 增加而擴充。不過,HPA 大約需要 60 秒才會觸發向上擴充。流量突然暴增可能導致 MP 發生記憶體不足 (OOM) 錯誤。

如果您預期會出現這類流量暴增的情況,請使用適當的安全係數,提高堆積用量。例如 S = 2。

Heap = BASE_HEAP + (Q * L) * (P_req + P_resp) * 2

政策使用情形

上述計算不含政策用量。Apigee 允許客戶複製要求 / 回應酬載,這可能會大幅改變堆積用量。

舉例來說,如果 JavaScript 政策會複製 3 份完整目標回應,則應使用下列方程式:

Heap per MP = Base Heap + (Q * L) * (P_req + P_resp * 4) * S

可能增加記憶體用量的政策範例如下:

  • AssignMessage
  • JavaScript 呼叫
  • JavaCallout

監控

本文提供的指南僅供參考,強烈建議您監控記憶體用量並設定警示。如果堆積用量持續偏高,請提高安全係數。

另請參閱: