개요
Apigee Hybrid는 최대 30MB의 대용량 메시지 페이로드를 지원하며 이론상 최대 75MB입니다. 기본 메시지 페이로드 크기는 10MB입니다. 메시지 페이로드 크기를 참고하세요.
최대 30MB의 메시지 페이로드 지원 구성
하이브리드 설치의 환경에서 대용량 메시지 페이로드를 지원하도록 하려면 런타임 구성을 다음과 같이 변경해야 합니다.
- 힙 크기를 4Gi 이상으로 늘립니다.
- 메모리 한도를 6Gi 이상으로 늘립니다.
- 메모리 리소스 요청을 4Gi 이상으로 늘립니다.
이러한 설정은 설치의 개별 환경 또는 모든 환경에 대해 구성할 수 있습니다.
대용량 메시지 페이로드를 지원하도록 개별 환경 구성
대용량 메시지 페이로드를 지원하도록 구성된 프록시에 설치의 한 개 또는 몇 개의 환경에만 엔드포인트가 있는 경우 대용량 페이로드를 지원하도록 환경을 구성할 수 있습니다. 이렇게 하면 대용량 페이로드를 지원할 필요가 없는 환경에 메모리를 추가하지 않아도 됩니다.
대용량 메시지 페이로드를 지원하도록 개별 환경을 구성하려면 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 문서의 세 가지 주요 개념을 참조하세요. - 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
30MB~75MB의 메시지 페이로드 가이드라인
대규모 페이로드 시나리오의 메시지 프로세서에 대한 최적의 힙 크기를 결정하는 것은 특정 사용 사례에 따라 다르지만 Apigee에서는 이 프로세스를 지원하는 일반적인 가이드라인을 제공합니다.
메시지 프로세서(MP)당 힙 크기를 계산하려면 다음 값을 사용하세요.
Q- MP 포드당 최대 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: 7s - 요청 페이로드 크기,
P_req: 40MB - 응답 페이로드 크기,
P_resp: 40MB - 안전 계수,
S: 1.5 - 기본 힙 크기,
BASE_HEAP: 3,072Mi
힙 크기 = 3072 + (2 * 7) * (40+40) * 1.5 = 4752Mi
limits.memory는 권장 힙보다 1Gi 더 클 것으로 예상됩니다.
이 예에서는 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
- 자바스크립트 콜아웃
- JavaCallout
모니터링
여기에 제공된 가이드라인은 시작점으로 사용하기 위한 것입니다. 메모리 사용량 모니터링 및 알림을 적극 권장합니다. 힙 사용량이 지속적으로 높은 경우 안전 계수를 늘려 사용하세요.
관련 주제에 대한 추가 정보
- 메시지 페이로드 크기
envs[].components.runtime.resources.limits.memoryenvs[].components.runtime.resources.requests.memoryruntime.resources.limits.memoryruntime.resources.requests.memory