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 密钥保管库中维护机密。
  • 定义断路器规则以保护后端免受过多请求的阻止。
  • 将请求路由或负载均衡到多台后端服务器。

可以在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-limiting 和 concurrency-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-1 和 backend-2 的后端,请将 backend-1 的权重设置为 3,并将 后端 的权重设置为 1,并将两个后端的优先级设置为 1。
    • 选择 创建。

Context.Backend 变量

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

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

资产 DESCRIPTION
Id 后端实体的资源标识符。
Type 后端的类型: Single 或 Pool。
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>

限制