Environmentálně udržitelná rozhraní API ve službě Azure API Management (Preview)

PLATÍ PRO: Vývojář | Základní | Standardní | Premium

Tento článek představuje funkce ve službě Azure API Management, které vám pomůžou snížit uhlíkovou stopu provozu rozhraní API. Funkce slouží k úpravě provozu rozhraní API na základě emisí uhlíku v různých oblastech Azure.

Poznámka:

  • Funkce udržitelnosti životního prostředí jsou v současné době ve verzi Limited Preview. Pokud se chcete zaregistrovat, vyplňte formulář.
  • Tyto funkce jsou aktuálně dostupné ve vybraných oblastech v klasických úrovních služby Azure API Management (Developer, Basic, Standard, Premium).

Informace o udržitelných rozhraních API

Organizace se stále více zaměřují na snížení dopadu na životní prostředí prostřednictvím digitální infrastruktury.

Služba API Management umožňuje dosáhnout těchto cílů pomocí funkcí, které vám pomůžou:

Optimalizací způsobu, jakým vaše rozhraní API zpracovávají provoz na základě faktorů prostředí, můžete:

  • Snížení emisí uhlíku provozu rozhraní API
  • Podpora iniciativ v oblasti udržitelnosti podniků a závazků v oblasti životního prostředí
  • Předvedení odpovědnosti za životní prostředí zúčastněným stranám

Přesouvání provozu

Posun provozu vyžaduje konfiguraci back-endového prostředku v podporované oblasti Azure , která poskytuje informace o intenzitě emisí uhlíku. Pak ve fondu back-endu s vyrovnaným zatížením určete maximální přípustnou úroveň emisí uhlíku pro regionalizovaný back-end pomocí jedné z kategorií intenzity emisí uhlíku.

Tato funkce v kombinaci se stávajícími strategiemi vyrovnávání zatížení a směrování pomáhá vyloučit provoz do back-endů v oblastech s relativně vyššími emisemi uhlíku.

Za běhu:

  • SLUŽBA API Management se snaží směrovat provoz na "zelené" back-endy (v oblastech s emisemi pod zadanými prahovými hodnotami) a vylučuje "špinavé" back-endy (v oblastech s emisemi nad zadanými prahovými hodnotami).
  • Služba API Management za určitých podmínek směruje provoz do "problematických" back-endů, aby zajistila kontinuitu služby – například, když jsou všechny regionalizované back-endy "problemové" a ostatní back-endy nejsou dostupné.

Diagram přesunu provozu na backend s nižšími emisemi v balancovaném fondu

Příklad konfigurace

Nejprve nakonfigurujte backend v podporovaném regionu Azure pomocí nastavení volitelné azureRegion vlastnosti:

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

Pak použijte regionalizovaný backend v zatíženém fondu s vyvažováním zátěže a definujte mezní hodnotu emisí pomocí vlastnosti preferredCarbonEmission.

V tomto příkladu, pokud intenzita emisí uhlíku v westeurope oblasti překročí Medium, provoz na sustainable-backend je vyloučen ve srovnání s ostatními backendy v poolu.

{
    [...]
    "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
                }
            ]
        }
    }
} 

Tvarování provozu

Upravení provozu vám umožňuje upravit fungování API na základě relativních úrovní emisí uhlíku v oblasti (nebo oblastech) služby pro správu API. SLUŽBA API Management zveřejňuje context.Deployment.SustainabilityInfo.CurrentCarbonIntensitykontextovou proměnnou, která označuje aktuální kategorii intenzity emisí uhlíku pro vaši instanci služby API Management.

V nasazeních ve více oblastech poskytuje brána uhlíkovou intenzitu příslušné oblasti, v níž je spuštěna.

Pomocí této kontextové proměnné v zásadách můžete během období s nízkými emisemi uhlíku povolit zpracování provozu s větším nárokem nebo snížit zpracování při vysokých emisích uhlíku.

Příklad: Úprava chování v obdobích s vysokými emisemi uhlíku

V následujícím příkladu služba API Management rozšiřuje dobu trvání mezipaměti, implementuje přísnější omezování rychlosti a snižuje podrobnosti protokolování během období s vysokými emisemi uhlíku.

<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>

Příklad: Šíření informací o intenzitě emisí uhlíku do back-endu nebo v protokolech

Následující příklad ukazuje, jak získat přístup k aktuální intenzitě emisí uhlíku a rozšířit ji do back-endu nebo v protokolech.

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

Příklad: Úprava podrobností trasování na základě intenzity emisí uhlíku

Následující příklad ukazuje, jak použít aktuální informace intenzity emisí uhlíku k úpravě množství informací šířených ve vlastním trasování.

<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>

Dostupnost v regionu

Následující tabulka uvádí:

  • Oblasti, kde instance na úrovních API Management Classic (Developer, Basic, Standard, Premium) podporují funkce udržitelnosti (po registraci ve verzi Preview).
  • Oblasti, kde jsou k dispozici informace o intenzitě emisí uhlíku, například pro vytváření regionalizovaných back-endů pro přesun provozu
Región Podpora služby API Management Informace o intenzitě emisí uhlíku
Austrálie – střed ✅
Austrálie – střed 2 ✅
Austrálie – východ ✅ ✅
Austrálie – jihovýchod ✅ ✅
Brazílie – jih ✅ ✅
Brazílie – jihovýchod ✅
Kanada – střed ✅
Kanada – východ ✅ ✅
Indie – střed ✅ ✅
Střed USA ✅ ✅
Chile – střed ✅
Východní Asie ✅
USA – východ​ ✅ ✅
USA – východ 2 ✅ ✅
Francie – střed ✅
Francie – jih ✅ ✅
Německo – sever ✅
Německo – středozápad ✅ ✅
Indonésie – střed ✅
Izrael – střed ✅ ✅
Itálie – sever ✅ ✅
Japonsko – východ ✅ ✅
Japonsko – západ ✅ ✅
Jio India – Centrum ✅
Jio Indie – západ ✅ ✅
Korea – střed ✅
Korea – jih ✅
Malajsie – jih ✅
Mexiko – střed ✅ ✅
Nový Zéland – sever ✅ ✅
Střed USA – sever ✅
Severní Evropa ✅ ✅
Norsko – východ ✅ ✅
Norsko – západ ✅
Polsko – střed ✅ ✅
Katar – střed ✅ ✅
Jižní Afrika – sever ✅ ✅
Jižní Afrika – západ ✅
Střed USA – jih ✅
Indie – jih ✅ ✅
Jihovýchodní Asie ✅
Španělsko – střed ✅ ✅
Švédsko – střed ✅ ✅
Švédsko – jih ✅
Švýcarsko – sever ✅ ✅
Švýcarsko – západ ✅ ✅
Tchaj-wan – sever ✅ ✅
Tchaj-wan – severozápad ✅
Tchaj-wan – západ ✅
Spojené arabské emiráty – střed ✅
Spojené arabské emiráty – sever ✅ ✅
Velká Británie – jih ✅ ✅
Velká Británie – západ ✅ ✅
Středozápadní USA ✅ ✅
Západní Evropa ✅ ✅
Indie – západ ✅
USA – západ ✅ ✅
USA – západ 2​ ✅ ✅
USA – západ 3 ✅ ✅

Kategorie intenzity emisí uhlíku

Následující tabulka vysvětluje kategorie intenzity emisí uhlíku používané při přesouvání provozu a tvarování provozu. Hodnoty jsou v gramech CO₂e na KWh pro emise z rozsahu 2.

Kategorie g CO₂e
Není k dispozici N/A
Velmi nízko ≤ 150
Low 151-300
Středně 301-500
High 501-700
VelmiVysoká > 700