API Management의 백 엔드
적용 대상: 모든 API Management 계층
API Management의 백 엔드(또는 API 백 엔드)는 프런트 엔드 API와 해당 작업을 구현하는 HTTP 서비스입니다.
특정 API를 가져올 경우 API Management는 자동으로 API 백 엔드를 구성합니다. 예를 들어 API Management는 다음을 가져올 때 백 엔드 웹 서비스를 구성합니다.
- OpenAPI 사양.
- SOAP API.
- HTTP 트리거 Azure Function 앱 또는 논리 앱과 같은 Azure 리소스.
API Management는 다음과 같은 다른 Azure 리소스를 API 백 엔드로 사용하는 것도 지원합니다.
- Service Fabric 클러스터.
- 사용자 지정 서비스.
백 엔드 이점
API Management는 API의 백 엔드 서비스를 관리할 수 있도록 백 엔드 엔터티를 지원합니다. 백 엔드 엔터티는 백 엔드 서비스에 대한 정보를 캡슐화하고 API와 향상된 거버넌스에서 재사용을 승격합니다.
다음 중 하나 이상에 백 엔드를 사용합니다.
- 백 엔드 서비스에 대한 요청의 자격 증명 권한 부여
- 헤더나 쿼리 매개 변수 인증에 명명된 값이 구성된 경우 API Management 기능을 활용하여 Azure Key Vault에서 비밀을 유지합니다.
- 너무 많은 요청으로부터 백 엔드를 보호하기 위한 회로 차단기 규칙 정의
- 요청을 여러 백 엔드로 라우팅 또는 부하 분산
Azure Portal에서 또는 Azure API 또는 도구를 사용하여 백 엔드 엔터티를 구성 및 관리합니다.
set-backend-service 정책을 사용하여 백 엔드 참조
백 엔드를 만든 후 API에서 백 엔드를 참조할 수 있습니다. set-backend-service
정책을 사용하여 들어오는 API 요청을 백 엔드로 보냅니다. API에 대한 백 엔드 웹 서비스를 이미 구성한 경우 set-backend-service
정책을 사용하여 대신 백 엔드 엔터티로 요청을 리디렉션할 수 있습니다. 예시:
<policies>
<inbound>
<base />
<set-backend-service backend-id="myBackend" />
</inbound>
[...]
<policies/>
set-backend-service
정책과 함께 조건부 논리를 사용하여 위치, 호출된 게이트웨이 또는 기타 식에 따라 유효 백 엔드를 변경할 수 있습니다.
예를 들어 호출된 게이트웨이를 기준으로 트래픽을 다른 백 엔드로 라우팅하는 정책은 다음과 같습니다.
<policies>
<inbound>
<base />
<choose>
<when condition="@(context.Deployment.Gateway.Id == "factory-gateway")">
<set-backend-service backend-id="backend-on-prem" />
</when>
<when condition="@(context.Deployment.Gateway.IsManaged == false)">
<set-backend-service backend-id="self-hosted-backend" />
</when>
<otherwise />
</choose>
</inbound>
[...]
<policies/>
회로 차단기
API Management는 백 엔드 리소스에 회로 차단기 속성을 노출하여 백 엔드 서비스가 너무 많은 요청에 의해 과부하되지 않도록 보호합니다.
- 회로 차단기 속성은 정의된 시간 간격 동안의 오류 조건 수 또는 백분율, 오류를 나타내는 상태 코드 범위와 같이 회로 차단기를 발생시키는 규칙을 정의합니다.
- 회로 차단기가 발생되면 API Management는 정의된 시간 동안 백 엔드 서비스에 대한 요청 전송을 중지하고 클라이언트에 503 서비스를 사용할 수 없음 응답을 반환합니다.
- 구성된 발생 기간이 지나면 회로가 다시 설정되고 트래픽이 백 엔드로 다시 시작됩니다.
백 엔드 회로 차단기는 백 엔드가 오버로드 상황에서 복구할 수 있도록 하는 회로 차단기 패턴의 구현입니다. API Management 게이트웨이 및 백 엔드 서비스를 보호하기 위해 구현할 수 있는 일반적인 속도 제한 및 동시성 제한 정책을 보강합니다.
참고 항목
- 현재 백 엔드 회로 차단기는 API Management의 소비 계층에서 지원되지 않습니다.
- API Management 아키텍처의 분산 특성으로 인해 회로 차단기 발생 규칙은 근사값입니다. 게이트웨이의 다른 인스턴스는 동기화되지 않으며 동일한 인스턴스의 정보에 따라 회로 차단기 규칙을 적용합니다.
- 현재 백 엔드 회로 차단기에 대해 하나의 규칙만 구성할 수 있습니다.
예시
API Management REST API나 Bicep 또는 ARM 템플릿을 사용하여 백 엔드에서 회로 차단기를 구성합니다. 다음 예제에서는 한 시간내 서버 오류를 나타내는 세 개 이상의 5xx
상태 코드가 있는 경우 API Management 인스턴스 myAPIM 트립의 myBackend에 있는 회로 차단기가 발생합니다.
회로 차단기는 1시간 후에 다시 설정됩니다. 응답에 Retry-After
헤더가 있는 경우 회로 차단기는 값을 수락하고 백 엔드에 요청을 다시 보내기 전에 지정된 시간 동안 기다립니다.
회로 차단기가 있는 백 엔드 리소스에 대한 Bicep 템플릿에 다음과 유사한 코드 조각을 포함합니다.
resource symbolicname 'Microsoft.ApiManagement/service/backends@2023-09-01-preview' = {
name: 'myAPIM/myBackend'
properties: {
url: 'https://mybackend.com'
protocol: 'http'
circuitBreaker: {
rules: [
{
failureCondition: {
count: 3
errorReasons: [
'Server errors'
]
interval: 'PT1H'
statusCodeRanges: [
{
min: 500
max: 599
}
]
}
name: 'myBreakerRule'
tripDuration: 'PT1H'
acceptRetryAfter: true
}
]
}
}
}
부하 분산 풀
API Management는 API에 대한 여러 백 엔드를 구현하고 해당 백 엔드에서 요청을 부하 분산하려는 경우 백 엔드풀을 지원합니다.
다음과 같은 시나리오에 백 엔드 풀을 사용합니다.
- 부하를 여러 백 엔드로 분산합니다. 이 백 엔드에는 개별 백 엔드 회로 차단기가 있을 수 있습니다.
- 업그레이드를 위해 한 백 엔드 집합에서 다른 백 엔드 집합으로 부하를 이동합니다(파란색-녹색 배포).
백 엔드 풀을 만들려면 백 엔드의 type
속성을 pool
로 설정하고 풀을 구성하는 백 엔드 목록을 지정합니다.
참고 항목
- 현재 백 엔드 풀에는 단일 백 엔드만 포함할 수 있습니다. 다른 백 엔드 풀에
pool
형식의 백 엔드를 추가할 수 없습니다. 풀에 최대 30개의 백 엔드를 포함할 수 있습니다. - API Management 아키텍처의 분산 특성으로 인해 백 엔드 부하 분산은 근사값입니다. 게이트웨이의 다른 인스턴스는 동기화되지 않으며 동일한 인스턴스의 정보에 따라 부하를 분산합니다.
부하 분산 옵션
API Management는 백 엔드 풀에 대해 다음과 같은 부하 분산 옵션을 지원합니다.
- 라운드 로빈: 기본적으로 요청은 풀의 백 엔드에 균등하게 분산됩니다.
- 가중치: 가중치는 풀의 백 엔드에 할당되고 요청은 각 백 엔드에 할당된 상대 가중치에 따라 백 엔드에 분산됩니다. 청록색 배포 수행과 같은 시나리오에 이 옵션을 사용합니다.
- 우선 순위 기반: 백 엔드는 우선 순위 그룹으로 구성되고 요청은 우선 순위 그룹의 순서대로 백 엔드로 전송됩니다. 우선 순위 그룹 내에서 요청은 백 엔드에 균등하게 분산되거나(할당된 경우) 각 백 엔드에 할당된 상대 가중치에 따라 분산됩니다.
참고 항목
우선 순위가 낮은 그룹의 백 엔드는 회로 차단기 규칙이 트립되기 때문에 우선 순위가 높은 그룹의 모든 백 엔드를 사용할 수 없는 경우에만 사용됩니다.
예시
API Management REST API나 Bicep 또는 ARM 템플릿을 사용하여 백 엔드 풀을 구성합니다. 다음 예제에서는 API Management 인스턴스 myAPIM의 백 엔드 myBackendPool이 백 엔드 풀로 구성됩니다. 풀의 예제 백 엔드 이름은 backend-1 및 backend-2입니다. 두 백 엔드 모두 우선 순위가 가장 높은 그룹에 있습니다. 그룹 내에서 백 엔드-1는 백 엔드-2 보다 큰 가중치를 줍니다.
부하 분산 풀이 있는 백 엔드 리소스에 대한 Bicep 템플릿에 다음과 유사한 코드 조각을 포함합니다.
resource symbolicname 'Microsoft.ApiManagement/service/backends@2023-09-01-preview' = {
name: 'myAPIM/myBackendPool'
properties: {
description: 'Load balancer for multiple backends'
type: 'Pool'
pool: {
services: [
{
id: '/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ApiManagement/service/<APIManagementName>/backends/backend-1'
priority: 1
weight: 3
}
{
id: '/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ApiManagement/service/<APIManagementName>/backends/backend-2'
priority: 1
weight: 1
}
]
}
}
}
제한 사항
- 개발자 및 프리미엄 계층의 경우 내부 가상 네트워크에 배포된 API Management 인스턴스는 게이트웨이 엔드포인트 URL 및 백 엔드 URL이 동일할 때 HTTP 500
BackendConnectionFailure
오류가 발생할 수 있습니다. 이 제한 사항이 발생하면 기술 커뮤니티 블로그의 내부 가상 네트워크 모드에서 자체 연결 API Management 요청 제한 문서의 지침을 따릅니다. - 현재 백 엔드 회로 차단기에 대해 하나의 규칙만 구성할 수 있습니다.
관련 콘텐츠
- 블로그: Azure OpenAI Service를 사용하여 Azure API Management 회로 차단기 및 부하 분산 사용
- Azure Portal을 사용하여 Service Fabric 백 엔드를 설정합니다.