Best practice per Cloud Storage

Questa pagina contiene un indice di 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 ideale, perché non ti insegna le nozioni di base su come utilizzare Cloud Storage. Se sei un nuovo utente, ti suggeriamo di iniziare consultando la sezione Scopri l'archiviazione di oggetti con la console Google Cloud o Scopri l'archiviazione di oggetti con lo strumento gcloud.

Denominazione

Per i requisiti e le considerazioni relative ai nomi, consulta Denominazione dei bucket e Denominazione degli oggetti.

Traffico

  • Esegui una stima back-of-the-envelope della quantità di traffico che verrà inviata a Cloud Storage. Nello specifico, pensa a:

    • Operazioni al secondo. Quante operazioni al secondo prevedi, sia per i bucket che per gli oggetti, per le operazioni di creazione, aggiornamento ed eliminazione.

    • Larghezza di banda. Quanti dati verranno inviati e in quale periodo di tempo? Valuta l'utilizzo di uno strumento come Wolfram Alpha per evitare errori nei calcoli.

    • Controllo cache. Se specifichi i metadati Cache-Control su oggetti accessibili pubblicamente, la latenza di lettura sarà vantaggiosa sugli oggetti attivi o ad accesso frequente. Per istruzioni su come impostare i metadati degli oggetti, come Cache-Control, consulta Visualizzazione e modifica dei metadati.

  • Progetta la tua applicazione per ridurre al minimo i picchi di traffico. Se esistono client della tua applicazione che eseguono aggiornamenti, distribuiscili nell'arco della giornata.

  • Quando progetti applicazioni per tassi di richieste elevati, considera i limiti di frequenza per determinate operazioni. Conoscere i limiti di larghezza di banda per determinati tipi di traffico in uscita e seguire le linee guida per tasso di richieste e distribuzione degli accessi. Presta particolare attenzione alla scalabilità automatica e alla necessità di aumentare gradualmente il numero di richieste per ottenere le migliori prestazioni.

  • Quando gestisci gli errori:

    • Assicurati che l'applicazione utilizzi una strategia di nuovo tentativo per evitare problemi dovuti a grandi burst di traffico.

    • Riprova utilizzando una nuova connessione ed eventualmente risolvi il nome del dominio. Ciò consente di evitare la "stickiness del server", in cui un nuovo tentativo tenta di seguire lo stesso percorso e raggiunge lo stesso componente non integro dell'hit 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 di ridurre la latenza di coda. Lo fanno senza ridurre la scadenza delle richieste, il che potrebbe causare il timeout prematura delle richieste. Per maggiori 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 durante la creazione di nuovi bucket. Ad esempio, valuta la possibilità di collocare le risorse di computing insieme ai bucket Cloud Storage per le applicazioni di analisi.

Opzioni per posizioni e archiviazione 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 Cloud Storage si riferiscono ai bucket e agli oggetti in base al nome. Di conseguenza, anche se gli ACL impediscono a terze parti non autorizzate di operare su bucket o oggetti, una terza parte può tentare le 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 tuoi bucket o degli oggetti, dovresti prendere 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 enumerare altri nomi di bucket in questo ambito.

    • Evita l'uso di informazioni sensibili come nomi di bucket o oggetti. Ad esempio, anziché assegnare il nome al bucket mysecretproject-prodbucket, assegnagli il nome somemeaninglesscodename-prod. In alcune applicazioni, è consigliabile mantenere i metadati sensibili nelle intestazioni Cloud Storage personalizzate, come x-goog-meta, anziché codificare i metadati nei nomi degli oggetti.

  • È preferibile utilizzare i gruppi per elencare esplicitamente un numero elevato di utenti. Non solo migliora la scalabilità, 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 in quanto non è necessario 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 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 molte posizioni, quindi è di fatto 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 possono essere scrivibili pubblicamente. Sebbene configurare un bucket in questo modo possa essere pratico per vari scopi, sconsigliamo di utilizzare questa autorizzazione, che 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 memorizzati nei propri bucket.

    Se vuoi rendere i contenuti disponibili in modo sicuro agli utenti che non hanno account utente, ti consigliamo di utilizzare 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 gli aggiornamenti sull'avanzamento, non chiudere e riaprire la connessione se rilevi che l'avanzamento si è bloccato. Questo crea un ciclo di feedback positivo negativo durante i periodi di congestione della rete. Quando la rete è congestionata, i callback XHR possono arrivare in backlog dietro l'attività di conferma (ACK/NACK) dello stream di caricamento, mentre la chiusura e la riapertura della connessione in questo caso utilizzano una maggiore capacità di rete nel momento in cui te lo sei meno.

  • Per il traffico di caricamento, consigliamo di impostare timeout ragionevolmente lunghi. Per una buona esperienza per l'utente finale, puoi impostare un timer lato client che aggiorni la finestra di stato del client con un messaggio (ad es. "congestione di rete") quando l'applicazione non riceve un callback XHR da molto tempo. Non limitarti a chiudere la connessione e riprova quando succede.

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

    Generalmente, un oggetto caricato in formato gzip può essere pubblicato anche in formato gzip. Tuttavia, evita di caricare contenuti con entrambi i valori content-encoding: gzip e content-type compressi, poiché ciò potrebbe causare comportamenti imprevisti.

  • Ti consigliamo di utilizzare i caricamenti ripristinabili, che 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 in parallelo parti di un file, riducendo potenzialmente il tempo di completamento del 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 evitare che i tuoi dati vengano eliminati erroneamente dal software dell'applicazione o dagli utenti.