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 posto migliore per iniziare, perché non ti 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 Google Cloud console o Scopri l'archiviazione di oggetti con Google Cloud CLI.

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

Denominazione

Consulta Nomi dei bucket e Nomi 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-Control sugli oggetti accessibili pubblicamente avvantaggia la latenza di lettura degli oggetti attivi o a cui si accede di frequente. Consulta Visualizzazione e modifica dei metadati per istruzioni sull'impostazione dei metadati degli oggetti, ad esempio Cache-Control.

  • Progetta l'applicazione in modo da ridurre al minimo i picchi di traffico. Se i client dell'applicazione eseguono aggiornamenti, distribuiscili durante la 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 prestazioni ottimali.

  • Quando gestisci gli errori:

    • Assicurati che l'applicazione utilizzi una strategia di nuovi tentativi per evitare problemi dovuti a grandi picchi di traffico.

    • Riprova utilizzando una nuova connessione e, se possibile, 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 protette. Le richieste protette ti consentono di riprovare più velocemente e di ridurre la latenza di coda. Lo fanno senza ridurre la scadenza della richiesta, il che potrebbe causare un timeout prematuro delle richieste. Per ulteriori informazioni, consulta La coda su larga scala.

  • Comprendi 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à dei bucket per indicazioni su come archiviare al meglio i dati.

ACL e controllo dell'accesso

  • Le richieste di Cloud Storage fanno riferimento a bucket e 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 inviare richieste con nomi di bucket o oggetti e determinarne l'esistenza osservando le risposte di errore. È quindi possibile che le informazioni nei nomi dei bucket o degli oggetti vengano divulgate. Se ti preoccupa la privacy dei nomi dei bucket o degli oggetti, devi adottare 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 dei bucket o degli oggetti. Ad esempio, anziché denominare il bucket mysecretproject-prodbucket, chiamalo somemeaninglesscodename-prod. In alcune applicazioni, potresti voler conservare i metadati sensibili nelle intestazioni personalizzate di Cloud Storage, ad esempio x-goog-meta, anziché codificare i metadati nei nomi degli oggetti.

  • È preferibile utilizzare i gruppi anziché elencare esplicitamente un numero elevato di utenti. Non solo è più scalabile, ma fornisce anche un modo molto efficiente per aggiornare il controllo dell'accesso per un numero elevato di oggetti contemporaneamente. Infine, è più economico perché non devi inviare una richiesta per oggetto per modificare le 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 sono leggibili pubblicamente. Assicurati che 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 riacquisire 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 comoda per vari scopi, ti sconsigliamo di utilizzare questa autorizzazione: può essere utilizzata in modo illecito per distribuire contenuti illegali, virus e altri malware e il proprietario del bucket è legalmente e finanziariamente responsabile dei contenuti archiviati nei suoi bucket.

    Se devi rendere i contenuti disponibili in modo sicuro 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 lo stato di avanzamento è bloccato. In questo modo si crea un ciclo di feedback positivo errato durante i periodi di congestione della rete. Quando la rete è congestionata, i callback XHR possono accumularsi dietro l'attività di riconoscimento (ACK/NACK) dello stream 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 di 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 l'applicazione non ha ricevuto un callback XHR per un lungo periodo di tempo. Non chiudere semplicemente la connessione e riprovare quando si verifica questa situazione.

  • 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ò in genere essere pubblicato anche in formato gzip. Tuttavia, evita di caricare contenuti con content-encoding: gzip e un content-type compresso, 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, il che potenzialmente riduce 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 controllare i cicli di vita dei dati per proteggere i tuoi dati dall'eliminazione erronea da parte del software dell'applicazione o degli utenti.