Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
archiviazione code di Azure archivia i messaggi per l'elaborazione asincrona. Questo articolo descrive le strategie di partizionamento, i modelli di isolamento e le funzionalità di Queue Storage per soluzioni multi-tenant. Fornisce indicazioni che consentono di distribuire il carico dei messaggi, isolare i messaggi dei tenant e gestire l'accesso, la crittografia e l'utilizzo.
Strategie di partizionamento
Queue Storage non espone una chiave di partizione o una coda secondaria all'interno di una coda. La queue è il confine più piccolo che è possibile usare per distribuire il caricamento dei messaggi e l'account di archiviazione è il confine successivo. Una coda condivisa non fornisce un throughput o un isolamento delle prestazioni specifici del tenant.
Per i messaggi di 1 KiB, una singola coda ha un throughput target fino a 2.000 messaggi al secondo e un account di archiviazione ha una frequenza massima di richieste di 20.000 messaggi al secondo. Le dimensioni dei messaggi e i modelli di accesso influiscono sul throughput ottenuto dal carico di lavoro. I messaggi in coda possono essere fino a 64 KiB. Per i messaggi più grandi o le funzionalità avanzate del broker, è consigliabile usare bus di servizio di Azure.
Se il carico di lavoro può superare l'obiettivo per coda, distribuire i messaggi tra più code. A seconda dei requisiti operativi e del routing, è possibile partizionare le code in base al tenant, al gruppo di tenant o al livello di servizio, al carico di lavoro funzionale, al deployment stamp o all'area. Un tenant con volumi elevati che condivide una coda con altri tenant può consumare una quota sproporzionata della velocità effettiva della coda e causare la limitazione per altri tenant.
Più code nello stesso account di archiviazione condividono comunque la capacità dell'account e la configurazione a livello di account. Se il carico di lavoro aggregato può superare il limite dell'account di archiviazione o se un tenant necessita di scalabilità indipendente o configurazione regionale, distribuire le code tra più account di archiviazione. Monitorare il throttling, usare i tentativi di backoff esponenziale e testare il carico di lavoro rispetto agli obiettivi di scalabilità di Queue Storage documentati. Per le opzioni di accesso ai tenant e isolamento dei dati, vedere Modelli di isolamento.
Modelli di isolamento
Dopo aver determinato come distribuire il carico dei messaggi, determinare il livello di isolamento del tenant da applicare. Archiviazione code di Azure supporta code condivise, code per ogni tenant e account di archiviazione per ogni tenant. La tabella seguente riepiloga le differenze tra i principali modelli di isolamento della tenancy per l'Archiviazione code.
| Consideration | Code condivise | Coda per ogni istanza | Account di archiviazione per ogni tenant |
|---|---|---|---|
| Isolamento dei dati | Basso. Il programma assicura l'isolamento. | Basso medio | High |
| Isolamento delle prestazioni | Low | Basso. La maggior parte delle quote e dei limiti si applica all'intero account di archiviazione. | High |
| Complessità della distribuzione | Low | Medium | High |
| Complessità operativa | Low | Medium | High |
| Scenario di esempio | Una soluzione multi-tenant di grandi dimensioni ha un livello applicazione condiviso. | Gli URL della firma di accesso condiviso con ambito del tenant vengono emessi. | Ogni tenant ha un proprio timbro di distribuzione. |
Note
Prendere in considerazione quote e limiti quando si seleziona un modello di isolamento. Questi limiti includono limiti del servizio Azure, obiettivi di scalabilità di Queue Storage e obiettivi di scalabilità per il provider di risorse di archiviazione.
Code condivise
Se si condivide una coda, tutti i tenant condividono il suo obiettivo di throughput. Un tenant con carico elevato può causare limitazioni per altri tenant. Per le strategie per distribuire il carico dei messaggi, vedere Strategie di partizionamento.
Le code non forniscono il partizionamento o sottocode, quindi tutti i dati dei tenant potrebbero diventare mescolati. L'applicazione deve identificare il tenant per ogni messaggio e applicare l'isolamento durante l'elaborazione. Non concedere ai tenant l'accesso diretto a una coda condivisa se non devono accedere ai messaggi di altri tenant.
Coda per ogni istanza
È possibile creare singole code per ogni tenant all'interno dello stesso account di archiviazione. Non esiste alcun limite al numero di code che è possibile creare all'interno di un account di archiviazione.
Le code per ogni tenant forniscono un routing e un confine di controllo di accesso, ma non forniscono l'isolamento delle prestazioni. Tutte le code nell'account condividono gli obiettivi di capacità e prestazioni dell'account di archiviazione.
Per questo scenario, è possibile usare il controllo di accesso ad Archiviazione code, inclusa la firma di accesso condiviso, per gestire l'accesso ai dati di ogni tenant.
Quando si creano code in modo dinamico per ogni tenant, considerare il modo in cui il livello dell'applicazione utilizza i messaggi della coda di ogni tenant. Per scenari avanzati, è consigliabile usare bus di servizio di Azure, che supporta funzionalità quali sessioni, inoltro automatico dei messaggi e topic e sottoscrizioni.
Account di archiviazione per ogni tenant
Il livello di isolamento più elevato usa un account di archiviazione dedicato per ogni tenant. Questo modello garantisce l'isolamento completo delle chiavi dell'account di archiviazione, che è possibile ruotare in modo indipendente. Consente anche di ridimensionare la soluzione oltre i limiti e le quote per ogni account di archiviazione. Si consideri questo modello per i tenant con volumi elevati e costanti di messaggi o che richiedono configurazione regionale indipendente o obiettivi di prestazioni indipendenti. È tuttavia necessario considerare anche il numero massimo di account di archiviazione consentiti all'interno di una singola sottoscrizione di Azure.
Funzionalità di Queue Storage che supportano la multi-tenancy
Le funzionalità di Queue Storage seguenti consentono di implementare e gestire il modello di isolamento scelto.
Firme di accesso condiviso
Quando si usa Queue Storage da un'applicazione client, valutare se instradare le richieste tramite il livello applicazione o consentire ai client di connettersi direttamente a una coda. L'accesso client diretto può ridurre il carico sulle applicazioni back-end e il numero di hop di rete.
Una firma di accesso condiviso (SAS) consente di fornire alle applicazioni client l'accesso limitato a una coda. È possibile limitare le operazioni che un client può eseguire e il periodo di tempo in cui è consentito l'accesso. Ad esempio, è possibile emettere un token SAS che consente a un tenant di aggiungere messaggi alla propria coda senza consentirgli di leggere o eliminare messaggi.
Usare il modello Valet Key per rilasciare token SAS vincolati e con ambito dal tier applicazione. Autentica il client usando il sistema di autenticazione dell'applicazione, determina a quale coda del tenant può accedere e rilascia un token solo per le operazioni necessarie.
I criteri di accesso archiviati consentono di definire un singolo criterio da usare quando si rilasciano più token di firma di accesso condiviso del servizio. I criteri di accesso archiviati non si applicano ai token SAS di delega utente o ai token SAS dell'account.
Firma di accesso condiviso con delega utente
Una firma di accesso condiviso (SAS) del servizio o una firma di accesso condiviso (SAS) dell'account è firmata con una delle chiavi dell'account di archiviazione. Una SAS di delega utente è protetta con credenziali Microsoft Entra. Il livello applicazione richiede una chiave di delega utente usando la propria identità gestita, quindi firma i token con ambito limitato al tempo per ogni tenant. Non si distribuiscono o si archiviano le chiavi dell'account. Microsoft consiglia di usare una SAS di delega utente anziché una SAS con chiave dell'account quando la progettazione lo supporta.
Usare durate di token brevi e pianificare come revocare l'accesso se un token viene compromesso. Per correlare i log dell'applicazione con i log di Queue Storage, impostare un ID richiesta client (x-ms-client-request-id) nelle richieste di archiviazione e registrarlo insieme all'ID tenant.
Controllo degli accessi in base all'identità
Queue Storage fornisce il controllo degli accessi in base all'identità tramite Microsoft Entra ID. Usare le identità gestite e il controllo degli accessi in base al ruolo di Azure per autorizzare l'applicazione ad accedere alle code senza archiviare le chiavi dell'account. Limitare l'accesso alla coda di ogni tenant quando i tenant richiedono l'accesso diretto. L'autorizzazione a livello di coda non isola i messaggi dei singoli tenant all'interno di una coda condivisa.
Encryption
Queue Storage crittografa i dati archiviati con chiavi gestite da Microsoft per impostazione predefinita. Per usare le chiavi gestite dal cliente, configurare l'account di archiviazione per usare una chiave di crittografia con ambito account per le code quando si crea l'account. Non è possibile modificare questo ambito della chiave di crittografia dopo la creazione dell'account.
Se i tenant richiedono chiavi separate gestite dal cliente, usare account di archiviazione separati. Gli ambiti di crittografia di gestione rete virtuale di Azure e le chiavi fornite dal cliente nelle singole richieste non si applicano a Queue Storage. Pianificare la rotazione e la revoca delle chiavi insieme al ciclo di vita del tenant.
Monitoring
In una soluzione multi-tenant valutare se è necessario misurare il consumo per ogni tenant. Definire le metriche specifiche di cui tenere traccia, ad esempio il numero di messaggi o operazioni per ogni tenant. È anche possibile usare l'allocazione dei costi per tenere traccia del costo dell'utilizzo di ogni tenant e abilitare il chargeback tra più sottoscrizioni.
Queue Storage offre funzionalità di monitoraggio predefinite. Quando i tenant condividono una coda, includete gli identificatori del tenant nei dati di telemetria dell'applicazione in modo da poter attribuire l'elaborazione e l'utilizzo dei messaggi al tenant corretto.
Monitorare le frequenze delle richieste e le risposte HTTP 500 e 503 per rilevare code o risorse che si avvicinano agli obiettivi di scalabilità. Correlare questi dati di telemetria con gli identificatori del tenant in modo che sia possibile identificare i tenant il cui utilizzo influisce sulla capacità condivisa.
È possibile raccogliere i log delle richieste, quindi aggregarli e analizzarli insieme ai dati di telemetria dell'applicazione. Nelle soluzioni che creano volumi elevati di richieste, valutare se il vantaggio giustifica il costo per acquisire ed elaborare tali log.
Contributors
Microsoft gestisce questo articolo. I seguenti collaboratori hanno scritto questo articolo.
Autore principale:
John Downs | Principal Software Engineer, Azure Patterns & Practices
Altri contributori:
- Dr. Christian Geuer-Pollmann | Ingegnere Capo Clienti, FastTrack per Azure
- Patrick Horn | Senior Customer Engineering Manager, FastTrack per Azure
- Ben Hummerstone | Principal Customer Engineer, FastTrack per Azure
- Vic Perdana | Cloud Solution Architect, Azure ISV
- Daniel Scott-Raynsford | Partner Solution Architect, Data & AI
- Arsen Vladimirskiy | Ingegnere principale per i clienti, FastTrack per Azure
Per visualizzare i profili LinkedIn non pubblici, accedere a LinkedIn.