Partilhar via


APIs ambientalmente sustentáveis no Gerenciamento de API do Azure (visualização)

APLICA-SE A: Desenvolvedor | Básico | Padrão | Prémio

Este artigo apresenta recursos no Gerenciamento de API do Azure que ajudam a reduzir a pegada de carbono do tráfego da API. Use os recursos para ajustar o tráfego de API com base nas emissões de carbono em diferentes regiões do Azure.

Observação

  • As características de sustentabilidade ambiental estão atualmente em pré-visualização limitada. Para se inscrever, preencha o formulário.
  • Esses recursos estão atualmente disponíveis em regiões selecionadas nas camadas clássicas do Gerenciamento de API do Azure (Desenvolvedor, Básico, Standard, Premium).

Sobre APIs sustentáveis

As organizações estão cada vez mais focadas em reduzir o seu impacto ambiental através da sua infraestrutura digital.

O Gerenciamento de API permite que você atinja essas metas com recursos que ajudam:

Ao otimizar como suas APIs lidam com o tráfego com base em fatores ambientais, você pode:

  • Reduza as emissões de carbono do seu tráfego de API
  • Apoiar iniciativas corporativas de sustentabilidade e compromissos ambientais
  • Demonstrar responsabilidade ambiental às partes interessadas

Mudança de tráfego

A mudança de tráfego requer a configuração de um recurso backend numa região do Azure suportada, que fornece dados sobre a intensidade de carbono. Em seguida, em um pool de back-end com balanceamento de carga, especifique o nível máximo aceitável de emissão de carbono para o back-end regionalizado, usando uma das categorias de intensidade de carbono.

Esse recurso, combinado com suas estratégias existentes de balanceamento de carga e roteamento, ajuda a excluir o tráfego para back-ends em regiões com emissões de carbono relativamente mais altas.

Em tempo de execução:

  • O Gerenciamento de API faz um esforço melhor para rotear o tráfego para backends "verdes" (em regiões com emissões abaixo dos limites especificados) e exclui backends "sujos" (em regiões com emissões acima dos limites especificados).
  • O Gerenciamento de API roteia o tráfego para back-ends "sujos" sob certas condições para garantir a continuidade do serviço - por exemplo, quando todos os back-ends regionalizados estão "sujos" e outros back-ends não estão disponíveis.

Diagrama de redirecionamento de tráfego para um backend com emissões mais baixas num pool balanceado por carga.

Exemplo de configuração

Primeiro, configure um back-end em uma região do Azure com suporte definindo a propriedade opcional azureRegion :

{
    "type": "Microsoft.ApiManagement/service/backends", 
    "apiVersion": "2024-10-01-preview", 
    "name": "sustainable-backend", 
    "properties": {
        "url": "https://mybackend.example.com",
        "protocol": "http",
        "azureRegion": "westeurope",
        [...]
  }
}

Em seguida, use o back-end regionalizado em um pool com balançamento de carga e defina o limite de emissão usando a propriedade preferredCarbonEmission.

Neste exemplo, se a intensidade de carbono na região westeurope exceder Medium, o tráfego para o sustainable-backend é excluído em comparação com os outros back-ends no pool.

{
    [...]
    "properties": {
        "description": "Load balancer for multiple backends",
        "type": "Pool",
        "pool": {
            "services": [
                {
                    "id": "<sustainable-backend-id>",
                    "weight": 1,
                    "priority": 1,
                    "preferredCarbonEmission": "Medium"
                }
                {
                    
                    "id": "<regular-backend-id>",
                    "weight": 1,
                    "priority": 1
                }
                {
                    "id": "<fallback-backend-id>",
                    "weight": 1,
                    "priority": 2
                }
            ]
        }
    }
} 

Modelagem de tráfego

A modelagem de tráfego permite ajustar o comportamento da API com base nos níveis relativos de emissão de carbono na região (ou regiões) do seu serviço de Gerenciamento de API. O Gerenciamento de API expõe a variável de context.Deployment.SustainabilityInfo.CurrentCarbonIntensitycontexto, que indica a categoria de intensidade de carbono atual para sua instância de Gerenciamento de API.

Em implantações multirregionais, o gateway fornece a intensidade de carbono da respetiva região em que é executado.

Use essa variável de contexto em suas políticas para permitir um processamento de tráfego mais intensivo durante períodos de baixas emissões de carbono ou reduzir o processamento durante altas emissões de carbono.

Exemplo: Ajustar o comportamento em períodos de alta emissão de carbono

No exemplo a seguir, o Gerenciamento de API estende as durações do cache, implementa limites de taxa mais rígidos e reduz os detalhes de registro durante períodos de alta emissão de carbono.

<policies>
    <inbound>
        <base />
        <choose>
          <when condition="@(context.Deployment.SustainabilityInfo.CurrentCarbonIntensity == CarbonIntensityCategory.High)">
            <!-- Policies for high carbon emission periods -->
            <cache-store duration="3600" />
            <rate-limit-by-key calls="100" renewal-period="60" counter-key="@(context.Request.IpAddress)" />
            <set-variable name="enableDetailedLogging" value="false" />
          </when>
          <when condition="@(context.Deployment.SustainabilityInfo.CurrentCarbonIntensity == CarbonIntensityCategory.Medium)">
            <!-- Policies for medium carbon emission periods -->
            <cache-store duration="1800" />
            <rate-limit-by-key calls="200" renewal-period="60" counter-key="@(context.Request.IpAddress)" />
            <set-variable name="enableDetailedLogging" value="true" />
          </when>
          <otherwise>
            <!-- Policies for low carbon emission periods -->
            <cache-store duration="900" />
            <rate-limit-by-key calls="300" renewal-period="60" counter-key="@(context.Request.IpAddress)" />
            <set-variable name="enableDetailedLogging" value="true" />
          </otherwise>
        </choose>
    
        <!-- Use the logging variable elsewhere -->
        <choose>
          <when condition="@(context.Variables.GetValueOrDefault<bool>("enableDetailedLogging"))">
            <log-to-eventhub logger-id="detailed-logger">
              @{
                  return JObject.FromObject(context).ToString();
              }
            </log-to-eventhub>
          </when>
          <otherwise>
            <log-to-eventhub logger-id="basic-logger">
              @{
                  var log = new JObject();
                  log["requestId"] = context.RequestId;
                  log["method"] = context.Request.Method;
                  log["url"] = context.Request.Url.ToString();
                  log["statusCode"] = context.Response.StatusCode;
                  return log.ToString();
              }
            </log-to-eventhub>
          </otherwise>
        </choose>
    </inbound>
    [...]    
</policies>

Exemplo: Propagar informações de intensidade de carbono para backend ou em logs

O exemplo a seguir mostra como acessar a intensidade de carbono atual e propagá-la para o back-end ou em logs.

<policies>
    [...]
    <outbound>
        <base />
        <set-header name="X-Sustainability-CarbonEmission" exists-action="override">
            <value>@(context.Deployment.SustainabilityInfo.CurrentCarbonIntensity.ToString())</value>
        </set-header>
    </outbound>
    [...]
</policies>

Exemplo: Ajustar o nível de detalhe do rastreio com base na intensidade de carbono

O exemplo a seguir mostra como usar as informações atuais de intensidade de carbono para ajustar a quantidade de informações propagadas em um rastreamento personalizado.

<policies>
    [...]
    <inbound>
        <base />
        <choose>
            <when condition="@(context.Deployment.SustainabilityInfo.CurrentCarbonIntensity >= CarbonIntensityCategory.High)">
                <trace source="Orders API" severity="verbose">
                    <message>Lead Created</message>
                </trace>
            </when>
            <otherwise>
                <trace source="Orders API" severity="information">
                    <message>Lead Created</message>
                </trace>
            </otherwise>
        </choose>
    </inbound>
    [...]    
</policies>

Disponibilidade da região

O quadro seguinte indica:

  • Regiões onde as instâncias nas camadas do API Management Classic (Developer, Basic, Standard, Premium) oferecem suporte a recursos de sustentabilidade (após a inscrição para visualização)
  • Regiões onde estão disponíveis informações sobre a intensidade das emissões de carbono, por exemplo, para a criação de backends regionalizados para a mudança de tráfego
Região Suporte de gerenciamento de API Informação sobre a intensidade de carbono
Austrália Central
Austrália Central 2
Leste da Austrália
Austrália Sudeste
Sul do Brasil
Brasil Sudeste
Canadá Central
Leste do Canadá
Índia Central
E.U.A. Central
Chile Central
Ásia Leste
E.U.A. Leste
E.U.A. Leste 2
Centro de França
Sul de França
Norte da Alemanha
Alemanha Centro-Oeste
Indonésia Central
Israel Central
Norte de Itália
Leste do Japão
Oeste do Japão
Jio Índia Central
Jio Índia Oeste
Coreia Central
Sul da Coreia
Malásia Sul
México Central
Norte da Nova Zelândia
E.U.A. Centro-Norte
Europa do Norte
Leste da Noruega
Oeste da Noruega
Polónia Central
Catar Central
Norte da África do Sul
Oeste da África do Sul
E.U.A. Centro-Sul
Sul da Índia
Sudeste Asiático
Espanha Central
Suécia Central
Sul da Suécia
Norte da Suíça
Oeste da Suíça
Norte de Taiwan
Noroeste de Taiwan
Oeste de Taiwan
E.A.U. Central
Norte dos E.A.U.
Sul do Reino Unido
Oeste do Reino Unido
E.U.A. Centro-Oeste
Europa Ocidental
Índia Ocidental
E.U.A. Oeste
E.U.A. Oeste 2
E.U.A. Oeste 3

Categorias de intensidade carbónica

A tabela a seguir explica as categorias de intensidade de carbono usadas nos recursos de transferência e regulação de tráfego. Os valores são expressos em gramas de CO₂e por KWh para as emissões do escopo 2.

Categoria g CO₂e
Não Disponível N/A
Muito baixo ≤ 150
Low 151-300
Médio 301-500
High 501-700
Muito alto > 700