Questa pagina contiene un indice delle best practice per Cloud Storage. Puoi utilizzare le informazioni raccolte qui come riferimento rapido di ciò che devi tenere presente quando crei un'applicazione che utilizza Cloud Storage.
Se hai appena iniziato a utilizzare Cloud Storage, questa pagina potrebbe non essere il punto di partenza migliore, perché non insegna le nozioni di base su come utilizzare Cloud Storage. Se sei un nuovo utente, ti suggeriamo di iniziare con Scopri l'archiviazione di oggetti con la console Cloud de Confiance o Scopri l'archiviazione di oggetti con Google Cloud CLI.
Per le best practice relative ai workload multimediali, consulta Best practice per i workload multimediali.
Denominazione
Consulta Denominazione dei bucket e Denominazione degli oggetti per i requisiti e le considerazioni sui nomi.
Traffico
Esegui una stima approssimativa della quantità di traffico che verrà inviata a Cloud Storage. In particolare, pensa a:
Operazioni al secondo. Quante operazioni al secondo prevedi, sia per i bucket che per gli oggetti, e per le operazioni di creazione, aggiornamento ed eliminazione.
Larghezza di banda. Quanti dati verranno inviati e in quale periodo di tempo? Valuta la possibilità di utilizzare uno strumento come Wolfram Alpha per evitare errori nei calcoli.
Controllo cache. La specifica dei metadati
Cache-Controlsugli oggetti accessibili pubblicamente migliorerà la latenza di lettura sugli oggetti ad accesso frequente. Consulta Visualizzazione e modifica dei metadati per istruzioni su come impostare i metadati degli oggetti, ad esempioCache-Control.
Progetta la tua applicazione in modo da ridurre al minimo i picchi di traffico. Se i client della tua applicazione eseguono aggiornamenti, distribuiscili nel corso della giornata.
Quando progetti applicazioni per tassi di richieste elevati, tieni presente i limiti di frequenza per determinate operazioni. Conosci i limiti di larghezza di banda per determinati tipi di traffico in uscita e segui le Linee guida per tasso di richieste e distribuzione degli accessi. Presta particolare attenzione alla scalabilità automatica e alla necessità di aumentare gradualmente i tassi di richieste per ottenere le migliori prestazioni.
Quando gestisci gli errori:
Assicurati che l'applicazione utilizzi una strategia di ripetizione per evitare problemi dovuti a picchi di traffico elevati.
Riprova utilizzando una nuova connessione ed eventualmente risolvi di nuovo il nome di dominio. In questo modo si evita la "persistenza del server", in cui un nuovo tentativo cerca di seguire lo stesso percorso e raggiunge lo stesso componente non integro della richiesta iniziale.
Se la tua applicazione è sensibile alla latenza, utilizza le richieste con copertura. Le richieste con copertura consentono di riprovare più velocemente e ridurre la latenza di coda. In questo modo, non riducono la scadenza della richiesta, il che potrebbe causare il timeout prematuro delle richieste. Per saperne di più, consulta The Tail at Scale.
Comprendi il livello di prestazioni che i clienti si aspettano dalla tua applicazione. Queste informazioni ti aiutano a scegliere un'opzione di archiviazione quando crei nuovi bucket.
Località e opzioni di archiviazione dei dati
Consulta gli argomenti Classe di archiviazione e Località del bucket per indicazioni su come archiviare al meglio i tuoi dati.
ACL e controllo dell'accesso
Le richieste di Cloud Storage fanno riferimento ai bucket e agli oggetti in base ai loro nomi. Di conseguenza, anche se le ACL impediscono a terze parti non autorizzate di operare su bucket o oggetti, una terza parte può tentare di effettuare richieste con nomi di bucket o oggetti e determinarne l'esistenza osservando le risposte di errore. In questo caso, le informazioni contenute nei nomi dei bucket o degli oggetti potrebbero essere divulgate. Se hai dubbi sulla privacy dei nomi dei bucket o degli oggetti, devi adottare le precauzioni appropriate, ad esempio:
Scegli nomi difficili da indovinare per bucket e oggetti. Ad esempio, un bucket denominato
mybucket-gtbytul3è sufficientemente casuale da impedire a terze parti non autorizzate di indovinarlo o di enumerare altri nomi di bucket.Evitare l'uso di informazioni sensibili nei nomi dei bucket o degli oggetti. Ad esempio, anziché assegnare al bucket il nome
mysecretproject-prodbucket, assegnagli il nomesomemeaninglesscodename-prod. In alcune applicazioni, potresti voler conservare i metadati sensibili nelle intestazioni Cloud Storage personalizzate, comex-goog-meta, anziché codificare i metadati nei nomi degli oggetti.
L'utilizzo dei gruppi è preferibile all'elenco esplicito di un numero elevato di utenti. Non solo offre una migliore scalabilità, ma fornisce anche un modo molto efficiente per aggiornare il controllo dell'accesso per un gran numero di oggetti contemporaneamente. Infine, è più economico perché non è necessario effettuare una richiesta per oggetto per modificare le ACL.
Consulta e segui le best practice per il controllo degli accessi.
Il sistema di controllo dell'accesso di Cloud Storage include la possibilità di specificare che gli oggetti sono leggibili pubblicamente. Assicurati che tutti gli oggetti che scrivi con questa autorizzazione siano pubblici. Una volta "pubblicati", i dati su internet possono essere copiati in molti luoghi, quindi è praticamente impossibile riottenere il controllo di lettura su un oggetto scritto con questa autorizzazione.
Il sistema di controllo dell'accesso di Cloud Storage include la possibilità di specificare che i bucket sono scrivibili pubblicamente. Sebbene la configurazione di un bucket in questo modo possa essere utile per vari scopi, sconsigliamo di utilizzare questa autorizzazione, in quanto può essere utilizzata in modo improprio per distribuire contenuti illegali, virus e altri malware. Inoltre, il proprietario del bucket è responsabile dal punto di vista legale e finanziario dei contenuti archiviati nei suoi bucket.
Se devi rendere i contenuti disponibili in modo sicuro agli utenti che non dispongono di account utente, ti consigliamo di utilizzare gli URL firmati. Ad esempio, con gli URL firmati puoi fornire un link a un oggetto e i clienti della tua applicazione non devono autenticarsi con Cloud Storage per accedere all'oggetto. Quando crei un URL firmato, controlli il tipo (lettura, scrittura, eliminazione) e la durata dell'accesso.
Caricamenti di dati
Se utilizzi i callback XMLHttpRequest (XHR) per ricevere aggiornamenti sull'avanzamento, non chiudere e riaprire la connessione se rilevi che l'avanzamento si è bloccato. In questo modo si crea un ciclo di feedback positivo negativo durante i periodi di congestione della rete. Quando la rete è congestionata, i callback XHR possono accumularsi dietro l'attività di conferma (ACK/NACK) dello stream di caricamento. In questi casi, la chiusura e la riapertura della connessione consumano più capacità di rete proprio nel momento in cui non puoi permettertelo.
Per il traffico di caricamento, ti consigliamo di impostare timeout ragionevolmente lunghi. Per una buona esperienza dell'utente finale, puoi impostare un timer lato client che aggiorna la finestra di stato del client con un messaggio (ad es. "congestione della rete") quando l'applicazione non riceve un callback XHR per un lungo periodo di tempo. In questo caso, non limitarti a chiudere la connessione e riprovare.
Un modo pratico per ridurre la larghezza di banda necessaria per ogni richiesta è attivare la compressione gzip. Sebbene questa richieda tempo di CPU aggiuntivo per estrarre i risultati, il vantaggio a livello di costi di rete di solito la rende molto utile.
Un oggetto caricato in formato gzip può generalmente essere pubblicato anche in formato gzip. Tuttavia, evita di caricare contenuti che includono sia
content-encoding: gzipsia uncontent-typecompresso, in quanto ciò potrebbe causare un comportamento imprevisto.Ti consigliamo di utilizzare i caricamenti ripristinabili, che ti consentono di riprendere il trasferimento dei dati anche quando un errore di comunicazione ha interrotto il flusso di dati. Puoi anche utilizzare i caricamenti multiparte dell'API XML per caricare parti di un file in parallelo, riducendo potenzialmente il tempo necessario per completare il caricamento complessivo.
Eliminazione dei dati
Consulta Elimina oggetti per linee guida e considerazioni sull'eliminazione dei dati. Puoi anche utilizzare le funzionalità per il controllo dei cicli di vita dei dati per proteggere i tuoi dati dall'eliminazione errata da parte del software applicativo o degli utenti.