API Management中的后端

适用于:API 管理的所有层级

backend(或 API 后端 在 API 管理中是实现前端 API 及其操作的 HTTP 服务。

导入某些 API 时,API Management会自动配置 API 后端。 例如,API Management导入时配置后端 Web 服务:

对于其他 API(例如来自Azure服务的 API),无需显式指定后端服务,即可导入Azure资源。 示例包括:

API Management还支持将其他资源用作 API 后端,例如:

对于这些后端,可以在API Management中创建 backend 实体,并在 API 中引用它。

后端的优点

API Management支持后端实体,以便管理 API 的后端服务。 后端实体封装有关后端服务的信息,该服务可跨 API 促进可重用性并改进治理。

使用后端来完成以下一个或多个任务:

  • 验证请求发送到后端服务时使用的凭据。
  • 如果为标头或查询参数身份验证配置了命名值,则利用API Management功能在Azure Key Vault中维护机密。
  • 定义断路器规则以保护后端免受过多请求的阻止。
  • 将请求路由或负载均衡到多台后端服务器。

可以在Azure portal中或通过Azure API 或工具配置和管理后端实体。

创建后端

可以在Azure portal中创建后端,也可以使用Azure API 或工具。

注意事项

从 Microsoft Foundry 或其他 AI 服务导入某些 API 时,API Management 会自动配置后端实体。

若要在门户中创建后端,请执行以下作:

  1. 登录到 portal 并转到API Management实例。
  2. 在左侧菜单中,选择 “API>后端>+ 创建新后端”。
  3. “后端 ”页上,完成以下步骤:
    1. 输入 名称 和可选的 说明 以用于后端。
    2. 选择 Backend 托管类型,例如选择 Azure资源中的一个资源,例如 Function App 或逻辑应用,选择 自定义URL以配置自定义服务,或者选择 Service Fabric 群集。
    3. 运行时 URL 中,输入 API 请求转发到的后端服务的 URL。
    4. “高级”下,可以选择禁用后端的证书链或证书名称验证。
    5. “将此后端服务添加到后端池”下,可以选择或为后端创建 负载均衡池
    6. 断路器规则下,可以选择为后端配置 断路器
    7. Authorization 凭据下,可以选择配置凭据以授权访问后端。 选项包括请求标头、查询参数、客户端证书,或配置在 API Management 实例中的系统分配或用户分配的 托管标识
    8. 选择 创建

创建后端后,可以随时更新后端设置。 例如,可以添加断路器规则、更改运行时 URL 或添加授权凭据。

为授权凭据配置托管标识

您可以使用在 API 管理实例中配置的系统分配的或用户分配的 托管标识 来授权访问后端服务。 若要为授权凭据配置托管标识,请完成以下步骤:

  1. 在后端配置的 “授权凭据 ”部分中,选择“ 托管标识 ”选项卡,然后选择“ 启用”。

  2. 客户端标识中,选择 系统分配的标识 或实例中配置的用户分配标识。

  3. Resource ID 中,输入表示后端的你自己的Microsoft Entra 应用程序的目标Azure服务或应用程序 ID。 例如,为 Azure OpenAI 服务输入 https://cognitiveservices.azure.com

    有关更多示例,请参阅 身份验证-托管身份 策略参考。

  4. 选择 创建

注意事项

此外,为托管标识分配适当的权限或 RBAC 角色,以访问后端服务。 例如,如果后端是 Azure OpenAI 服务,请为该托管标识分配 Cognitive Services User 角色。

使用 set-backend-service 策略来引用后端

创建后端后,在 API 中引用后端标识符(名称)。 使用 set-backend-service 策略将传入的 API 请求定向到后端。 如果已为 API 配置了后端 Web 服务,请使用 set-backend-service 策略将请求重定向到后端实体。 例如:

<policies>
    <inbound>
        <base />
        <set-backend-service backend-id="myBackend" />
    </inbound>
    [...]
<policies/>

注意事项

或者,也可使用 base-url。 通常,格式为 https://backend.com/api。 避免在末尾添加斜杠以防止配置错误。 通常,后端中的 base-url 和 HTTP(S) 终结点值应匹配,以便在前端和后端之间实现无缝集成。 API Management实例将后端服务名称追加到 base-url

使用含有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 请求时自动检测和使用后端实体。 在运行时,如果有与API Management向其发送请求的后端服务的 URL 匹配的后端实体,则它使用后端实体。 无需显式使用 set-backend-service

断路器

API Management公开后端资源中的 circuit breaker 属性,以保护后端服务免受过多请求的淹没。

  • 断路器属性定义了使断路器跳闸的规则,例如,在定义的时间间隔内故障条件的数量或百分比,以及表示故障的状态代码范围。
  • 断路器发生故障时,API Management停止向后端服务发送已定义时间的请求,并向客户端返回 503 服务不可用响应。
  • 在配置的跳变持续时间过后,线路将重置,流量将恢复到后端。

后端断路器是 circuit breaker 模式的实现,允许后端从重载情况中恢复。 它增强了一般 rate-limitingconcurrency-limiting 策略,可用于保护 API Management 网关和后端服务。

注意事项

  • 目前,API Management 的Consumption 层不支持后端断路器。
  • 由于API Management体系结构的分布式性质,断路器行程规则是近似的。 网关的各个实例不会根据同一实例的信息来同步和应用断路器规则。
  • 目前,只能为后端断路器配置一个规则。

示例

使用 Azure portal、API Management REST API 或 Bicep 或 ARM 模板在后端配置断路器。 在以下示例中,API 管理实例myAPIM中的 myBackend 断路器会在1小时内出现三个或更多指示服务器错误的5xx状态码时跳闸。

此示例中的断路器在 1 小时后重置。 如果响应中存在 Retry-After 标头,断路器会接受该值,并等待指定时间后再次向后端发送请求。

  1. Azure portal 中,转到API Management实例。
  2. 在左侧菜单中,选择“API”“后端”> 你的后端。>
  3. 在后端页中,选择“设置>断路器设置”添加新设置>。
  4. “创建新的断路器 ”页中,配置规则:
    • 规则名称:输入规则的名称,例如 myBackend
    • 故障计数:输入 3。
    • 失败间隔:保留默认值 1 小时
    • 失败状态代码范围:选择 500 - 599
    • 行程持续时间:保留默认值 1 小时
    • 在 HTTP 响应中检查“Retry-After”标头:选择 True(Accept)。

负载均衡池

API Management支持后端 pools,以便为 API 实现多个后端,并在这些后端之间对请求进行负载均衡。 池是服务用于负载均衡的后端的集合,服务将其视为一个单一的实体。

将后端池用于以下场景:

  • 将负载分散到多个后端,每个后端可能具备单独的断路器。
  • 将负载从一组后端转移到另一组进行升级(蓝绿部署)。

注意事项

  • 一个池中最多可包含 30 个后端。
  • 由于API Management体系结构的分布式性质,后端负载均衡是近似的。 网关的不同实例不会根据同一实例上的信息进行同步和负载均衡。

负载均衡选项

API Management支持后端池的以下负载均衡选项:

负载均衡选项 DESCRIPTION
循环赛制 默认情况下,请求会均匀分发到池中的各个后端。
加权 为池中的后端分配权重,并根据每个后端的相对权重分配请求。 适用于蓝绿部署等场景。
基于优先级 将后端组织成优先级组。 首先将请求发送到更高的优先级组;在组中均匀分配请求,或根据分配的权重分配请求。

注意事项

仅当高优先级组中的所有后端都不可用时,API 管理服务才会使用较低优先级组中的后端,因为断路器规则已被触发。

示例

使用门户、API Management REST API 或 Bicep 或 ARM 模板配置后端池。 在以下示例中,API Management实例中的后端 myBackendPool 配置了后端池myAPIM。 池中的示例后端名为 backend-1 和 backend-2。 两个后端都处于最高优先级组中;在组中, backend-1 的权重大于 backend-2

  1. Azure portal 中,转到API Management实例。
  2. 在左侧菜单中,选择“API”“后端”> 你的后端。>
  3. Backends 页中,选择 Load balancer 选项卡。
  4. 选择 “+ 创建新池”。
  5. “创建新的负载均衡池 ”页中,输入以下信息:
    • 名称:输入池的名称,例如 myBackendPool
    • 说明:(可选)输入说明。
    • 将后端添加到池:选择要添加到池的一个或多个后端。
    • 后端权重和优先级:选择 “自定义权重和 优先级”以配置池中每个后端的权重和优先级。 例如,如果添加了两个名为 backend-1backend-2 的后端,请将 backend-1 的权重设置为 3,并将 后端 的权重设置为 1,并将两个后端的优先级设置为 1。
    • 选择 创建

Context.Backend 变量

在 API Management 中配置后端实体时,可以使用 context.Backendcontext 变量在策略中access后端属性。

下表列出了变量的属性 context.Backend

资产 DESCRIPTION
Id 后端实体的资源标识符。
Type 后端的类型: SinglePool
AzureRegion 后端区域(如果指定)。

示例

以下示例演示如何在入站策略中使用后端类型设置自定义标头:

<inbound>
  <base />
  <set-backend-service backend-id="my-backend" />
  <set-header name="X-Backend-Type" exists-action="override">
    <value>@(context.Backend?.Type ?? "n/a")</value>
  </set-header>
</inbound>

限制