Compartilhar via


APIs ambientalmente sustentáveis no Gerenciamento de API do Azure (versão prévia)

APLICA-SE A: Desenvolvedor | Básico | Padrão | Premium

Este artigo apresenta recursos no Gerenciamento de API do Azure que ajudam a reduzir o volume de carbono do tráfego de 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

  • Atualmente, as funcionalidades de sustentabilidade ambiental estão em uma prévia limitada. Para se inscrever, preencha o formulário.
  • Atualmente, esses recursos estão 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 seu impacto ambiental por meio de sua infraestrutura digital.

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

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

  • Reduzir as emissões de carbono do tráfego de API
  • Apoiar iniciativas de sustentabilidade corporativa 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 de back-end em uma região do Azure com suporte que fornece informações de 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.

Essa funcionalidade, combinada com suas estratégias de balanceamento de carga e roteamento existentes, ajuda você a excluir o tráfego para back-ends em regiões com emissões de carbono relativamente maiores.

Durante o tempo de execução

  • O Gerenciamento de API faz um melhor esforço para rotear o tráfego para back-ends "verdes" (em regiões com emissões abaixo dos limites especificados) e exclui back-ends "sujos" (em regiões com emissões acima dos limites especificados).
  • O Gerenciamento de API roteia o tráfego para back-ends "sujos" em determinadas 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 do redirecionamento de tráfego para um back-end com emissões mais baixas em um pool balanceado.

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, utilize o back-end regionalizado em um pool balanceado por carga e defina o limiar de emissão utilizando 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 formatação 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 serviço de Gerenciamento de API. O Gerenciamento de API expõe a context.Deployment.SustainabilityInfo.CurrentCarbonIntensityvariável de contexto, que indica a categoria de intensidade de carbono atual para sua instância de Gerenciamento de API.

Em implantações de várias regiões, o gateway fornece a intensidade de carbono da respectiva região em que ele é 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 de cache, implementa uma limitação de taxa mais rigorosa e reduz os detalhes de registro em log 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 back-end ou em logs

O exemplo a seguir mostra como acessar a intensidade de carbono atual e propagar para o back-end ou nos 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 detalhamento de rastreamento 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 de região

A tabela a seguir indica:

  • Regiões em que as instâncias nas camadas Clássicas de Gerenciamento de API (Developer, Basic, Standard, Premium) dão suporte a recursos de sustentabilidade (após a inscrição para visualização)
  • Regiões em que informações sobre a intensidade das emissões de carbono são disponibilizadas, por exemplo, para criação de back-ends regionalizados para redirecionamento de tráfego.
Região Suporte ao Gerenciamento de API Informações de intensidade de carbono
Austrália Central
Austrália Central 2
Leste da Austrália
Sudeste da Austrália
Sul do Brasil
Sudeste do Brasil
Canadá Central
Leste do Canadá
Índia Central
EUA Central
Chile Central
Ásia Oriental
Leste dos EUA
Leste dos EUA 2
França Central
Sul da França
Norte da Alemanha
Centro-oeste da Alemanha
Indonésia Central
Israel Central
Norte da Itália
Leste do Japão
Oeste do Japão
Jio Índia Central
Jio Índia Ocidental
Coreia Central
Sul da Coreia
Sul da Malásia
México Central
Norte da Nova Zelândia
Centro-Norte dos EUA
Europa Setentrional
Leste da Noruega
Oeste da Noruega
Polônia Central
Catar Central
Norte da África do Sul
Oeste da África do Sul
Centro-Sul dos EUA
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
EAU Central
Norte dos EAU
Sul do Reino Unido
Oeste do Reino Unido
Centro-oeste dos EUA
Oeste da Europa
Índia Ocidental
Oeste dos EUA
Oeste dos EUA 2
Oeste dos EUA 3

Categorias de intensidade de carbono

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

Categoria g CO₂e (gramas de CO₂ equivalente)
Não disponível N/A
Muito Baixo ≤ 150
Low 151-300
Medium 301-500
High 501-700
VeryHigh > 700