Leer en inglés

Compartir a través de

API 管理中的后端

适用于:所有 API 管理层级

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

在导入某些 API 时,API 管理会自动配置 API 后端。 例如,API 管理会在导入以下项时配置后端 Web 服务:

API 管理还支持使用其他 Azure 资源作为 API 后端,例如:

后端的优点

API 管理支持后端实体,方便你管理 API 的后端服务。 后端实体会封装有关后端服务的信息,提高在各 API 中的可重用性并改进了治理。

对以下一个或多个项使用后端:

  • 为向后端服务发出的请求的凭据授权
  • 如果已为标头或查询参数身份验证配置了命名值,则可利用 API 管理功能来维护 Azure Key Vault 中的机密。
  • 定义断路器规则来保护后端,以免请求过多
  • 将请求路由或均衡负载到多个后端

请通过 Azure 门户或者 Azure API 或工具配置和管理后端实体。

创建后端

可以在 Azure 门户中或使用 Azure API 或工具创建后端。

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

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

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

为授权凭据配置托管标识

可以使用 API 管理实例中配置的系统分配或用户分配的 托管标识 来授权访问后端服务。 若要为授权证书配置托管标识,请执行以下操作:

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

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

  3. 资源 ID 中,输入目标 Azure 服务或表示后端的 Microsoft Entra 应用程序的应用程序 ID。 示例: https://cognitiveservices.azure.com 对于 Azure OpenAI 服务。

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

  4. 选择 创建

Nota

此外,为托管标识分配适当的权限或 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/>

Nota

或者,也可使用 base-url。 通常,格式为 https://backend.com/api。 避免在末尾添加斜杠以防止配置错误。 通常,后端中的 base-url 和 HTTP(S) 终结点值应匹配,以便在前端和后端之间实现无缝集成。 请注意,API 管理实例会将后端服务名称追加到 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 管理在后端资源中公开了断路器属性,以防止后端服务因请求过多而过载。

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

后端断路器是一种断路器模式的实现方式,允许后端从过载情况中恢复。 它扩充了常规速率限制并发限制策略,实施这些策略可以保护 API 管理网关和后端服务。

Nota

  • 目前,API 管理的消耗层不支持后端断路器
  • 由于 API 管理体系结构的分布式特性,断路器跳闸规则是近似的。 网关的不同实例不同步,并且将根据同一实例上的信息应用断路器规则。
  • 目前,只能为后端断路器配置一条规则。

示例

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

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

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

负载均衡池

当想要为 API 实现多个后端,并在这些后端之间均衡负载请求时,API 管理支持使用后端池。 池是一个后端集合,这些后端被视为用于负载均衡的单个实体。

将后端池用于以下场景:

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

Nota

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

负载均衡选项

API 管理支持以下后端池负载均衡选项:

  • 轮循机制:默认情况下,请求均匀分布在池中的后端。
  • 加权:为池中的后端分配权重,并根据分配给每个后端的相对权重在后端之间分布请求。 对于执行蓝绿部署等方案,请使用此选项。
  • 基于优先级:后端划分为各优先级,请求按优先级组的顺序发送到后端。 在一个优先级组内,请求可以均匀分布到后端,也可以根据分配给每个后端的相对权重(如果已分配)进行分布。

Nota

仅当高优先级组中的所有后端都因触发断路器规则而不可用时,才会使用低优先级组中的后端。

示例

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

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

限制

  • 对于“开发人员”层级和“高级”层级,在内部虚拟网络中部署的 API 管理实例可能会在网关终结点 URL 和后端 URL 相同时引发 HTTP 500 错误。 如果遇到此限制,请按照技术社区博客中内部虚拟网络模式下的自链式 API 管理请求限制一文的说明操作。
  • 目前,只能为后端断路器配置一条规则。