概要
Apigee ハイブリッドでは、最大 30 MB の大規模なメッセージ ペイロードがサポートされています。理論上の上限は 75 MB です。デフォルトのメッセージ ペイロード サイズは 10 MB です。メッセージ ペイロードのサイズをご覧ください。
最大 30 MB のメッセージ ペイロードのサポートを構成する
ハイブリッド インストールの環境で大規模なメッセージ ペイロードをサポートするには、ランタイム構成を次のように変更する必要があります。
- ヒープサイズを 4 Gi 以上に増やします。
- メモリ上限を 6 Gi 以上に増やします。
- メモリリソースのリクエストを 4 Gi 以上に増やします。
これらの設定は、個々の環境またはインストール内のすべての環境に対して構成できます。
大規模なメッセージ ペイロードをサポートするように個々の環境を構成する
大規模なメッセージ ペイロードをサポートするように構成されたプロキシのエンドポイントがインストール内の 1 つまたは少数の環境のみにある場合は、大規模なペイロードをサポートするように環境を構成できます。これにより、大規模なペイロードをサポートする必要がない環境にメモリを追加しなくて済みます。
大規模なメッセージ ペイロードをサポートするように個々の環境を構成するには、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 ドキュメントの 3 つの大きなコンセプトをご覧ください。 - 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 ~ 75 MB のメッセージ ペイロードに関するガイドライン
大きなペイロード シナリオのメッセージ プロセッサに最適なヒープサイズを決定するのは、特定のユースケースによって異なります。ただし、Apigee はこのプロセスを支援するための一般的なガイドラインを提供しています。
Message Processor(MP)あたりのヒープサイズを計算するには、次の値を使用します。
Q- MP Pod あたりの最大 QPSL- リクエストあたりのラウンドトリップ レイテンシ(予想されるレイテンシの 95 パーセンタイル)C- MP あたりの合計同時実行数。特定の時点で MP に同時に保持できるリクエストの最大数。これはC = Q * Lとして計算されます。P_req- クライアントが Apigee に送信したリクエストのペイロード サイズ(MB 単位)P_resp- ターゲットから受信したレスポンスのペイロード サイズ(MB 単位)S- 安全係数(Apigee では 1.5 ~ 2 の範囲を推奨)BASE_HEAP- プロキシ構成などのリクエスト関連以外のリソースを考慮するベースヒープサイズ。(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 は、推奨されるヒープよりも 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: 4752Mi
考慮事項
トラフィック バースト
HPA は、QPS の増加に応じて MP がスケーリングされるようにします。ただし、HPA がスケールアップをトリガーするまでに約 60 秒かかります。トラフィックのバーストが過度に高いと、MP でメモリ不足(OOM)エラーが発生する可能性があります。
このようなトラフィックの急増が予想される場合は、適切な安全係数を使用してヒープ使用量をスケールアップしてください。例: S = 2
ヒープ = BASE_HEAP + (Q * L) * (P_req + P_resp) * 2
ポリシーの使用状況
上記の計算には、ポリシーの使用量は含まれていません。Apigee では、リクエスト / レスポンス ペイロードのコピーを作成できます。これにより、ヒープ使用量が大幅に変化する可能性があります。
たとえば、ターゲット レスポンス全体を 3 つコピーする JavaScript ポリシーがある場合、使用する方程式は次のようになります。
Heap per MP = Base Heap + (Q * L) * (P_req + P_resp * 4) * S
メモリ使用量が増加する可能性があるポリシーの例は次のとおりです。
- AssignMessage
- JavaScript Callout
- JavaCallout
モニタリング
ここで提供するガイドラインは、出発点としての役割を果たすことを目的としています。メモリ使用量のモニタリングとアラートを設定することを強くおすすめします。ヒープ使用率が常に高い場合は、安全係数を増やします。
関連情報:
- メッセージ ペイロードのサイズ
envs[].components.runtime.resources.limits.memoryenvs[].components.runtime.resources.requests.memoryruntime.resources.limits.memoryruntime.resources.requests.memory