總覽
從 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 檔案進行下列變更:
-
在
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請參閱:
-
針對要更新的每個環境,升級
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檔案。
- ENV_RELEASE_NAME 是用於追蹤
-
升級圖表:
模擬測試:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
設定所有環境,支援大型訊息酬載
變更 runtime 節點會為安裝中的所有環境設定堆積和記憶體限制。您可以使用 envs.components.runtime 屬性,覆寫個別環境的這些設定。
-
在
overrides.yaml檔案中新增下列節:runtime: cwcAppend: bin_setenv_max_mem: 4096Mi # Increase max heap size to 4 gigs resources: requests: memory: 4Gi limits: memory: 6Gi請參閱:
-
升級安裝中每個環境的
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,
Q:2 - 延遲時間,
L:7 秒 - 要求酬載大小,
P_req:40 MB - 回應酬載大小,
P_resp:40 MB - 安全係數
S:1.5 - 基礎堆積大小
BASE_HEAP:3072Mi
堆積大小 = 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
監控
這裡提供的準則僅供參考。強烈建議監控記憶體用量並設定警示。如果堆積使用量持續偏高,請提高安全係數。
另請參閱:
- 訊息酬載大小
envs[].components.runtime.resources.limits.memoryenvs[].components.runtime.resources.requests.memoryruntime.resources.limits.memoryruntime.resources.requests.memory