Operazioni di limitazione delle richieste nel bus di servizio di Azure

Le soluzioni native del cloud offrono una nozione di risorse illimitate che possono essere ridimensionate con il carico di lavoro. Anche se questa nozione è più vera nel cloud rispetto ai sistemi locali, esistono ancora limitazioni nel cloud. Queste limitazioni possono causare la limitazione delle richieste dell'applicazione client nei livelli Standard e Premium, come descritto in questo articolo.

Limitazione nel livello Standard

Il livello standard di bus di servizio funziona come configurazione multi-tenant con un modello di prezzi con pagamento in base al consumo. In questo caso più spazi dei nomi nello stesso cluster condividono le risorse allocate. Il livello Standard è la scelta consigliata per gli ambienti di sviluppo, gli ambienti qa e i sistemi di produzione a bassa velocità effettiva.

In passato, bus di servizio aveva limiti di limitazione grossolani strettamente dipendenti dall'utilizzo delle risorse. Tuttavia, è possibile perfezionare la logica di limitazione e fornire un comportamento prevedibile di limitazione a tutti gli spazi dei nomi che condividono queste risorse.

Nel tentativo di garantire un uso equo e la distribuzione delle risorse in tutti gli spazi dei nomi standard bus di servizio che usano le stesse risorse, bus di servizio standard usa attualmente la logica di limitazione basata sul credito.

Nota

È importante notare che la limitazione delle richieste non è nuova a bus di servizio di Azure o a qualsiasi servizio nativo del cloud.

La limitazione basata sul credito è semplicemente perfezionare il modo in cui i vari spazi dei nomi condividono le risorse in un ambiente di livello standard multi-tenant, consentendo così un utilizzo equo da parte di tutti gli spazi dei nomi che condividono le risorse.

Che cos'è la limitazione basata sul credito?

La limitazione basata sul credito limita il numero di operazioni che possono essere eseguite in uno spazio dei nomi specifico in un periodo di tempo specifico. Ecco il flusso di lavoro per la limitazione basata sul credito.

  • All'inizio di ogni periodo di tempo, bus di servizio fornisce alcuni crediti a ogni spazio dei nomi.
  • Tutte le operazioni eseguite dalle applicazioni client mittente o ricevente vengono conteggiate in base a questi crediti (e sottratte dai crediti disponibili).
  • Se i crediti vengono esauriti, le operazioni successive verranno limitate fino all'inizio del periodo di tempo successivo.
  • I crediti vengono riforniti all'inizio del periodo di tempo successivo.

Quali sono i limiti di credito?

I limiti di credito sono attualmente impostati su 1000 crediti ogni secondo (per spazio dei nomi). Non tutte le operazioni vengono create in modo uguale. Ecco i costi di credito di ognuna delle operazioni.

Operazione Costo del credito
Operazioni dati (Send, SendAsync, ReceiveReceiveAsync, , Peek) 1 credito per messaggio
Operazioni di gestione (Create, Read, Update, Delete in code, argomenti, sottoscrizioni, filtri) 10 crediti

Nota

Quando si invia a un argomento, ogni messaggio viene valutato rispetto ai filtri prima di essere resi disponibili nella sottoscrizione. Ogni valutazione del filtro viene conteggiato anche rispetto al limite di credito (ovvero 1 credito per valutazione del filtro).

Ricerca per categorie sapere che sono limitata?

Quando le richieste dell'applicazione client vengono limitate, l'applicazione client riceve la risposta server seguente.

The request was terminated because the entity is being throttled. Error code: 50009. Please wait 2 seconds and try again.

Come è possibile evitare di essere limitato?

Con le risorse condivise, è importante applicare un certo tipo di utilizzo equo in vari spazi dei nomi bus di servizio che condividono tali risorse. La limitazione garantisce che qualsiasi picco in un singolo carico di lavoro non causi la limitazione di altri carichi di lavoro nelle stesse risorse. Come accennato più avanti nell'articolo, non c'è rischio di essere limitato perché i software development kit (SDK) client e altre offerte PaaS di Azure hanno i criteri di ripetizione predefiniti predefiniti. Tutte le richieste limitate vengono ritentate con backoff esponenziale e alla fine passano quando vengono riforniti i crediti.

Comprensibilmente, alcune applicazioni possono essere sensibili alla limitazione. In tal caso, è consigliabile eseguire la migrazione dello spazio dei nomi standard corrente bus di servizio a Premium. Durante la migrazione, è possibile allocare risorse dedicate allo spazio dei nomi bus di servizio e aumentare in modo appropriato le risorse in caso di picco nel carico di lavoro e ridurre la probabilità di limitazione. Inoltre, quando il carico di lavoro si riduce ai livelli normali, è possibile ridurre le risorse allocate allo spazio dei nomi.

Limitazione nel livello Premium

Il livello premium bus di servizio alloca risorse dedicate, in termini di unità di messaggistica, a ogni spazio dei nomi configurato dal cliente. Queste risorse dedicate offrono velocità effettiva e latenza prevedibili e sono consigliate per sistemi di livello di produzione sensibili o velocità effettiva elevata. Inoltre, il livello Premium consente anche ai clienti di aumentare la capacità di velocità effettiva quando riscontrano picchi nel carico di lavoro. Per altre informazioni, vedere Aggiornare automaticamente le unità di messaggistica di uno spazio dei nomi bus di servizio di Azure.

Come funziona la limitazione in bus di servizio Premium?

Con l'allocazione esclusiva delle risorse per il livello Premium, la limitazione è basata esclusivamente sulle limitazioni delle risorse allocate allo spazio dei nomi. Se il numero di richieste supera le risorse correnti, le richieste vengono limitate.

Ricerca per categorie sapere che sono limitata?

Esistono diversi modi per identificare la limitazione nella bus di servizio livello Premium.

  • Le richieste limitate vengono visualizzate nelle metriche delle richieste di Monitoraggio di Azure per identificare il numero di richieste limitate.
  • Utilizzo elevato della CPU indica che l'allocazione delle risorse corrente è elevata e le richieste potrebbero essere limitate se il carico di lavoro corrente non riduce.
  • Utilizzo elevato della memoria indica che l'allocazione delle risorse corrente è elevata e le richieste potrebbero essere limitate se il carico di lavoro corrente non riduce.

Come è possibile evitare di essere limitato?

Poiché lo spazio dei nomi premium bus di servizio dispone già di risorse dedicate, è possibile ridurre la possibilità di limitazione aumentando il numero di unità di messaggistica allocate allo spazio dei nomi nell'evento (o previsione) di un picco del carico di lavoro. Per altre informazioni, vedere Aggiornare automaticamente le unità di messaggistica di uno spazio dei nomi bus di servizio di Azure.

Domande frequenti

In che modo la limitazione influisce sull'applicazione?

Quando una richiesta è limitata, implica che il servizio è occupato perché si trova ad affrontare più richieste rispetto alle risorse consentite. Se la stessa operazione viene ritentata dopo alcuni istanti, una volta eseguito il lavoro corrente del servizio, la richiesta può essere rispettata.

Poiché la limitazione è il comportamento previsto di qualsiasi servizio nativo del cloud, la logica di ripetizione dei tentativi è incorporata nell'SDK bus di servizio stesso. Il valore predefinito è impostato su riprova automaticamente con un back-off esponenziale per assicurarsi che non sia stata limitata la stessa richiesta ogni volta. La logica di ripetizione dei tentativi predefinita si applica a ogni operazione.

Nota

Il codice di elaborazione dei messaggi che chiama altri servizi di terze parti può essere limitato anche da tali servizi. Per altre informazioni su come gestire questi scenari, vedere la documentazione sul modello di limitazione.

La limitazione comporta la perdita di dati?

bus di servizio di Azure è ottimizzato per la persistenza. Assicurarsi che tutti i dati inviati a bus di servizio vengano sottoposti a commit nella risorsa di archiviazione prima che il servizio riconosca l'esito positivo della richiesta.

Una volta che la richiesta viene riconosciuta correttamente da bus di servizio, significa che bus di servizio ha elaborato correttamente la richiesta. Se bus di servizio restituisce un errore, significa che bus di servizio non è stato in grado di elaborare la richiesta e l'applicazione client deve ripetere la richiesta.

Tuttavia, quando una richiesta è limitata, il servizio implica che non può accettare ed elaborare la richiesta subito a causa delle limitazioni delle risorse. Non implica alcuna perdita di dati perché bus di servizio semplicemente non ha esaminato la richiesta. In questo caso, basandosi sui criteri di ripetizione dei tentativi predefiniti dell'SDK bus di servizio assicura che la richiesta venga infine elaborata.

Per altri esempi e informazioni sull'uso della messaggistica del bus di servizio, vedere gli argomenti avanzati seguenti: