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 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 ti insegna 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 Google Cloud console o Scopri l'archiviazione di oggetti con lo strumento gcloud.

Per le best practice per i carichi di lavoro multimediali, consulta Best practice per i carichi di lavoro multimediali.

Denominazione

Consulta le sezioni 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. Nello specifico, pensa a:

    • Operazioni al secondo. Quante operazioni al secondo prevedi, per bucket e 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-Control sugli oggetti accessibili pubblicamente migliorerà la latenza di lettura degli oggetti ad accesso frequente. Consulta Visualizzazione e modifica dei metadati per istruzioni sulla configurazione dei metadati degli oggetti, ad esempio Cache-Control.

  • Progetta la tua applicazione in modo da ridurre al minimo i picchi di traffico. Se ci sono clienti della tua applicazione che 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 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 percentuali di richieste per ottenere le migliori prestazioni.

  • Quando gestisci gli errori:

    • Assicurati che la tua applicazione utilizzi una strategia di ripetizione per evitare problemi dovuti a picchi di traffico elevati.

    • Riprova a utilizzare una nuova connessione e, se necessario, risolvi di nuovo il nome di dominio. In questo modo si evita la "persistenza del server", in cui un nuovo tentativo segue lo stesso percorso e raggiunge lo stesso componente non integro della richiesta iniziale.

  • Se la tua applicazione è sensibile alla latenza, utilizza le richieste di copertura. Le richieste protette ti consentono di riprovare più velocemente e ridurre la latenza di coda. senza ridurre la scadenza della richiesta, il che potrebbe causare la scadenza prematura delle richieste. Per ulteriori informazioni, consulta la sezione The Tail at Scale.

  • Comprendere 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 insieme ai 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 archiviare al meglio i dati.

ACL e controllo dell'accesso

  • Le richieste Cloud Storage fanno riferimento a bucket e oggetti in base ai loro 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. In questo modo, le informazioni nei nomi dei bucket o degli oggetti potrebbero essere divulgate. Se ti preoccupa la privacy dei nomi dei bucket o degli oggetti, devi prendere le precauzioni appropriate, ad esempio:

    • Scegliere nomi difficili da indovinare per bucket e oggetti. Ad esempio, un bucket denominato mybucket-gtbytul3 è sufficientemente casuale da non poter essere indovinato o enumerato da terze parti non autorizzate.

    • Evitare l'uso di informazioni sensibili nei nomi di bucket o oggetti. Ad esempio, anziché chiamare il bucket mysecretproject-prodbucket, chiamalo somemeaninglesscodename-prod. In alcune applicazioni, potresti voler conservare i metadati sensibili nelle intestazioni Cloud Storage personalizzate come x-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 è più scalabile, ma fornisce 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 devi effettuare una richiesta per oggetto per modificare gli ACL.

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

  • Il sistema di controllo dell'accesso di Cloud Storage include la possibilità di specificare che gli oggetti siano 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 recuperare il controllo di lettura di un oggetto scritto con questa autorizzazione.

  • Il sistema di controllo dell'accesso a 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 è legalmente e finanziariamente responsabile dei contenuti archiviati nei suoi bucket.

    Se devi rendere disponibili in modo sicuro i contenuti agli utenti che non hanno 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 sullo stato di avanzamento, non chiudere e riaprire la connessione se rilevi che l'avanzamento è 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 riconoscimento (ACK/NACK) del flusso di caricamento e la chiusura e la riapertura della connessione in questo caso utilizzano più capacità di rete esattamente nel momento in cui puoi permettertelo meno.

  • Per il traffico di caricamento, ti consigliamo di impostare timeout ragionevolmente lunghi. Per una buona esperienza utente finale, puoi impostare un timer lato client che aggiorni la finestra di stato del client con un messaggio (ad es. "congestione della rete") quando la tua applicazione non ha ricevuto un callback XHR per molto tempo. Non chiudere la connessione e riprova quando si verifica questo problema.

  • Un modo semplice e pratico per ridurre la larghezza di banda necessaria per ogni richiesta è attivare la compressione gzip. Sebbene ciò richieda ulteriore tempo della CPU per decomprimere i risultati, il compromesso con i costi di rete di solito lo rende molto utile.

    Un oggetto caricato in formato gzip può in genere essere pubblicato anche in formato gzip. Tuttavia, evita di caricare contenuti che presentano sia content-encoding: gzip sia un content-type compresso, in quanto ciò potrebbe comportare 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 dei dati. Puoi anche utilizzare i caricamenti multiparte dell'API XML per caricare le parti di un file in parallelo, il che riduce potenzialmente il tempo necessario per completare il caricamento complessivo.

Eliminazione dei dati

Consulta la pagina Eliminare oggetti per linee guida e considerazioni sull'eliminazione dei dati. Puoi anche utilizzare le funzionalità per controllare i cicli di vita dei dati per proteggere i tuoi dati dall'eliminazione errata da parte del software applicativo o degli utenti.