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

總覽

從 1.14.2 版開始,Apigee Hybrid 支援最大 30 MB 的訊息酬載。自 1.14.3 版起,Apigee 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: 4096Mi   # 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-releasedev-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: 4096Mi   # 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 提供一般指南,協助您完成這項程序。

如要計算每個 Message Processor (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 - Base heap size to account for non-request related resources such as proxy configurations. (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: 3072Mi # base heap size

計算範例

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

  • 最大 QPS,Q2
  • 延遲時間,L7 秒
  • 要求酬載大小,P_req40 MB
  • 回應酬載大小,P_resp40 MB
  • 安全係數 S1.5
  • 基礎堆積大小 BASE_HEAP3072Mi

堆積大小 = 3072 + (2 * 7) * (40+40) * 1.5 = 4752Mi

limits.memory 預計會比建議的堆積多出 1Gi,以因應 OS 負荷和其他非堆積記憶體用量。

在本例中,您會在 overrides.yaml 中新增下列內容:

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

注意事項

流量爆量

HPA 可確保 MP 會隨著每秒查詢次數增加而擴充。不過,HPA 大約需要 60 秒才會觸發擴大作業。如果流量突然暴增,可能會導致 MP 發生記憶體不足 (OOM) 錯誤。

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

堆積 = 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

監控

這裡提供的準則僅供參考。強烈建議監控記憶體用量並設定警示。如果堆積使用量持續偏高,請提高安全係數。

另請參閱: