Il problema delle Throughput Unit statiche
Chi ha già lavorato con Azure Event Grid Namespaces conosce bene il concetto di Throughput Unit (TU): ogni TU definisce una capacità fissa di ingress/egress per gli eventi, di publish MQTT e di connessioni client MQTT. Fino ad oggi, il numero di TU andava impostato in fase di creazione del namespace e poi regolato manualmente ogni volta che il pattern di traffico cambiava — tipicamente sovradimensionando “per sicurezza” durante i picchi, con conseguente spreco di capacità (e di budget) nei periodi di bassa attività.
Microsoft ha da poco introdotto in public preview la funzionalità Autoscale per Event Grid Namespaces (tier Standard), che elimina questa gestione manuale: il servizio monitora il carico e regola automaticamente le TU tra un minimo e un massimo configurati dall’amministratore.
Come funziona Autoscale
Il funzionamento è deliberatamente semplice, in linea con la filosofia “meno configurazione, più automazione” che Azure sta applicando a diversi servizi PaaS. Event Grid valuta continuamente l’utilizzo su quattro categorie:
- Event ingress: tasso di eventi in ingresso sui namespace topic HTTP.
- Event egress: tasso di eventi in uscita verso i sottoscrittori.
- MQTT publish rate (inbound/outbound): frequenza dei messaggi pubblicati e ricevuti sul broker MQTT.
- MQTT client count: numero di client MQTT registrati e connessi.
Quando una qualunque di queste metriche supera la soglia di scale-up, il servizio aggiunge automaticamente Throughput Unit. Quando tutte le categorie scendono sotto la soglia di scale-down, le TU in eccesso vengono rilasciate. L’amministratore non definisce policy o soglie personalizzate: si limita a impostare i limiti minimo e massimo di TU, e Event Grid gestisce internamente le decisioni di scaling.
Un richiamo ai concetti di namespace
Per chi non ha ancora familiarità con il modello a namespace di Event Grid (distinto dai topic “classici” di Event Grid Basic), vale la pena ricordare la struttura:
- Un namespace è un contenitore di gestione che espone un FQDN unico e due endpoint: uno HTTP per i namespace topic, uno MQTT per scenari IoT.
- I namespace topic supportano sia la pull delivery (il consumer si collega ed estrae i messaggi con semantica queue-like) sia la push delivery (attualmente verso Event Hubs come destinazione).
- Gli eventi pubblicati devono rispettare lo standard CloudEvents 1.0 del CNCF, con binding HTTP e formato JSON.
Autoscale agisce a livello di namespace, quindi tutte le risorse contenute (topic, topic space MQTT, client, client group) beneficiano della stessa capacità elastica senza bisogno di scaling indipendente per ciascuna.
Abilitare Autoscale: portale, ARM e REST API
La funzionalità, essendo in preview, va abilitata esplicitamente. Dal portale Azure basta aprire il namespace Event Grid, andare nella sezione di configurazione della capacità e attivare l’opzione Autoscale specificando TU minime e massime.
Per chi gestisce l’infrastruttura as code, lo stesso risultato si ottiene via ARM template (o Bicep) impostando le proprietà di scaling sulla risorsa del namespace:
{
"type": "Microsoft.EventGrid/namespaces",
"apiVersion": "2025-04-01-preview",
"name": "ns-iot-produzione",
"location": "westeurope",
"sku": {
"name": "Standard",
"capacity": 4
},
"properties": {
"isZoneRedundant": true,
"topicsConfiguration": {},
"publicNetworkAccess": "Enabled",
"topicSpacesConfiguration": {
"state": "Enabled"
}
}
}
Nota: al momento della stesura la configurazione fine di Autoscale (min/max TU) va completata tramite portale o REST API dedicata, poiché lo schema ARM per questa preview è ancora in evoluzione — vale la pena controllare la pagina di supporto ufficiale prima di automatizzare il deployment in pipeline CI/CD.
Via REST API, la capacità del namespace si legge e modifica sulla stessa risorsa esposta dall’API di gestione di Event Grid:
GET https://management.azure.com/subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.EventGrid/namespaces/{namespaceName}?api-version=2025-04-01-preview
Quando ha senso usarlo
Autoscale è pensato in particolare per due categorie di carico che chi lavora con architetture event-driven conosce bene:
- Workload IoT con MQTT: il numero di dispositivi connessi e il fan-out delle sottoscrizioni possono variare rapidamente (pensiamo a una flotta di sensori che si riattiva tutta insieme dopo un’interruzione di rete). Dimensionare le TU staticamente per il picco significa pagare capacità inutilizzata per la maggior parte del tempo.
- Event broker con traffico “a burst”: pipeline di ingestion che ricevono ondate di eventi correlate a batch job, deployment, o processi di business con picchi orari/giornalieri (fine mese, chiusura contabile, campagne marketing).
Per i .NET developer che costruiscono microservizi basati su eventi, questo significa poter progettare la sottoscrizione a namespace topic senza dover stimare a priori il traffico di picco con lo stesso margine di sicurezza richiesto finora — riducendo sia il rischio di throttling sotto carico sia i costi nei periodi di quiete.
Conclusione
Autoscale per Event Grid Namespaces arriva in un’area, il messaging event-driven, dove il dimensionamento manuale è da sempre un compromesso scomodo tra costo e resilienza. Essendo ancora in public preview, prima di adottarlo su workload di produzione critici vale la pena testarlo su un namespace non critico, verificando i tempi di reazione dello scaling automatico sotto carico reale e monitorando le metriche di throttling durante la fase di transizione tra un livello di TU e l’altro.
Fonte: Petri IT Knowledgebase – Azure Event Grid Namespaces Add Autoscale for Dynamic Messaging Workloads; concetti tecnici da Microsoft Learn – Concepts for Event Grid namespace topics