Best practice per Cloud Storage

Questa pagina contiene un indice delle best practice per Cloud Storage. Puoi utilizzare le informazioni raccolte qui come riferimento rapido per ciò che devi tenere presente quando crei un'applicazione che utilizza Cloud Storage.

Se stai appena iniziando a utilizzare Cloud Storage, questa pagina potrebbe non essere il punto di partenza migliore, perché non spiega le nozioni di base su come utilizzare Cloud Storage. Se sei un nuovo utente, ti consigliamo di iniziare con Scopri l'archiviazione di oggetti con la console Google Cloud o Scopri l'archiviazione di oggetti con lo strumento gcloud.

Denominazione

Consulta le sezioni Denominazione dei bucket e Denominazione degli oggetti per i requisiti e le considerazioni relativi ai nomi.

Traffico

  • Esegui una stima approssimativa della quantità di traffico che verrà inviata a Cloud Storage. In particolare, tieni presente quanto segue:

    • Operazioni al secondo. Quante operazioni al secondo prevedi, sia per i bucket che per gli oggetti, nonché 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 della cache. La specifica dei metadati Cache-Control sugli oggetti accessibili pubblicamente migliora la latenza di lettura per gli oggetti ad accesso frequente o di uso frequente. Consulta Visualizzazione e modifica dei metadati per istruzioni su come impostare i metadati degli oggetti, ad esempio Cache-Control.

  • Progetta l'applicazione in modo da ridurre al minimo i picchi di traffico. Se i clienti della tua applicazione eseguono aggiornamenti, suddividili nell'arco della giornata.

  • Quando progetti applicazioni per tassi di richieste elevati, tieni presente i limiti di frequenza per determinate operazioni. Tieni presente i limiti di larghezza di banda per alcuni 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 le frequenze di richiesta per ottenere il rendimento migliore.

  • Quando gestisci gli errori:

    • Assicurati che la tua 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 "coerenza del server", in cui un nuovo tentativo tenta di seguire lo stesso percorso e colpisce lo stesso componente non funzionante colpito dalla richiesta iniziale.

  • Se la tua applicazione è sensibile alla latenza, utilizza le richieste protette. Le richieste coperte ti consentono di riprovare più velocemente e di ridurre la latenza finale. Ciò avviene senza ridurre la scadenza della richiesta, il che potrebbe causare il timeout delle richieste in modo prematuro. Per ulteriori informazioni, consulta The Tail at Scale.

  • Scopri il livello di prestazioni che i clienti si aspettano dalla tua applicazione. Queste informazioni ti aiutano a scegliere un'opzione di archiviazione e una regione quando crei nuovi bucket. Ad esempio, valuta la possibilità di collocare le risorse di calcolo con i bucket Cloud Storage per le applicazioni di analisi.

Località e opzioni di archiviazione dei dati

Consulta gli argomenti Classe di archiviazione e Località del bucket per indicazioni su come memorizzare al meglio i dati.

ACL e controllo dell'accesso

  • Le richieste Cloud Storage fanno riferimento ai bucket e agli oggetti tramite i relativi nomi. Di conseguenza, anche se gli ACL impediscono a terze parti non autorizzate di operare su bucket o oggetti, una terza parte può tentare richieste con nomi di bucket o oggetti e determinarne l'esistenza osservando le risposte di errore. Potrebbe quindi essere possibile che le informazioni nei nomi dei bucket o degli oggetti vengano divulgate. Se temi per la 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 non poter essere dedotto da terze parti non autorizzate o da cui è possibile enumerare altri nomi di bucket.

    • Evitare l'uso di informazioni sensibili nei nomi dei bucket o degli oggetti. Ad esempio, anziché chiamare il bucketmysecretproject-prodbucket, chiamalo somemeaninglesscodename-prod. In alcune applicazioni, ti consigliamo di conservare i metadati sensibili nelle intestazioni Cloud Storage personalizzate, come x-goog-meta, anziché codificarli nei nomi degli oggetti.

  • È preferibile utilizzare i gruppi anziché elencare esplicitamente un numero elevato di utenti. Non solo è più scalabile, ma offre anche un modo molto efficiente per aggiornare il controllo dell'accesso dell'accesso per un numero elevato di oggetti contemporaneamente. Infine, è più economico perché non è necessario effettuare una richiesta per oggetto per modificare le ACL.

  • Esamina e segui le best practice per il controllo dell'accesso.

  • Il sistema di controllo dell'accesso di Cloud Storage include la possibilità di specificare che gli oggetti sono pubblicamente leggibili. 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 della 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 comoda per vari scopi, sconsigliamo di utilizzare questa autorizzazione, in quanto potrebbe essere utilizzata in modo improprio per distribuire contenuti illegali, virus e altro malware. Inoltre, il proprietario del bucket è legalmente e finanziariamente responsabile dei contenuti archiviati nei suoi bucket.

    Se devi rendere disponibili in modo sicuro i contenuti per gli utenti che non dispongono di account, 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, puoi controllare 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 è in stallo. In questo modo si crea un cattivo loop di feedback positivo 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 e la chiusura e la riapertura della connessione in questi casi comporta un utilizzo maggiore della capacità della rete proprio nel momento in cui meno te lo puoi permettere.

  • Per il traffico in upload, consigliamo di impostare timeout ragionevolmente lunghi. Per un'esperienza positiva dell'utente finale, puoi impostare un timer lato client che aggiorna la finestra dello stato del client con un messaggio (ad es. "congestione della rete") quando la tua applicazione non riceve un callback XHR per molto tempo. In questi casi, non chiudere la connessione e riprovare.

  • Un modo semplice e pratico per ridurre la larghezza di banda necessaria per ogni richiesta è attivare la compressione gzip. Anche se questo richiede un tempo CPU aggiuntivo per decompressare i risultati, il trade-off con i costi di rete di solito lo rende molto utile.

    In genere, un oggetto caricato in formato gzip può essere pubblicato anche in formato gzip. Tuttavia, evita di caricare contenuti che includono sia content-encoding: gzip sia un content-type compresso, in quanto questo potrebbe comportare comportamenti imprevisti.

  • Ti consigliamo di utilizzare i caricamenti riavviabili, che ti consentono di riprendere il trasferimento dei dati anche quando un errore di comunicazione ha interrotto il flusso. Puoi anche utilizzare i caricamenti multiparte dell'API XML per caricare parti di un file in parallelo, il che potrebbe ridurre il tempo necessario per completare il caricamento complessivo.

Eliminazione dei dati

Consulta Eliminare 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 contribuire a proteggere i tuoi dati dall'eliminazione erronea da parte del software dell'applicazione o degli utenti.