總覽
Apigee Hybrid 支援大型訊息酬載,上限為 30 MB。從 Hybrid 1.15.1 開始,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: 4096m # 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: 4096m # 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 提供一般指南,協助您完成這項程序。
如要計算每個訊息處理器 (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
監控
本文提供的指南僅供參考,強烈建議您監控記憶體用量並設定警示。如果堆積用量持續偏高,請提高安全係數。
另請參閱:
- 訊息酬載大小
envs[].components.runtime.resources.limits.memoryenvs[].components.runtime.resources.requests.memoryruntime.resources.limits.memoryruntime.resources.requests.memory