Firebase fattura i dati archiviati nel database e tutto il traffico di rete in uscita al livello di sessione (livello 5) del modello OSI. Lo spazio di archiviazione viene fatturato a 5 $ per ogni GB/mese, valutato su base giornaliera. La fatturazione non è interessata dalla posizione del database. Il traffico in uscita include l'overhead di connessione e crittografia di tutte le operazioni del database e dei dati scaricati tramite le letture del database. Sia le letture sia le scritture del database possono comportare costi di connessione in fattura. Tutto il traffico verso e dal database, incluse le operazioni negate dalle regole di sicurezza, genera costi fatturabili.
Ecco alcuni esempi comuni di traffico fatturato:
- Dati scaricati: quando i client ricevono dati dal tuo database, Firebase addebita i dati scaricati. In genere, questi costi rappresentano la maggior parte dei costi di larghezza di banda, ma non sono l'unico fattore che incide sulla fattura.
- Overhead del protocollo: è necessario un po' di traffico aggiuntivo tra il server e i client per stabilire e mantenere una sessione. A seconda del protocollo di base, questo traffico potrebbe includere: il sovraccarico del protocollo in tempo reale di Firebase Realtime Database, il sovraccarico di WebSocket e il sovraccarico dell'intestazione HTTP. Ogni volta che viene stabilita una connessione, questo overhead, combinato con l'eventuale overhead della crittografia SSL, contribuisce ai costi di connessione. Anche se non si tratta di una grande quantità di larghezza di banda per una singola richiesta, può rappresentare una parte sostanziale della tua fattura se i tuoi payload sono piccoli o se esegui connessioni brevi e frequenti.
- Overhead della crittografia SSL: è associato un costo all'overhead della crittografia SSL necessaria per le connessioni sicure. In media, questo costo è di circa 3, 5 KB per l'handshake iniziale e di circa alcune decine di byte per le intestazioni dei record TLS su ogni messaggio in uscita. Per la maggior parte delle app, si tratta di una piccola percentuale della fattura. Tuttavia, questa può diventare una percentuale elevata se il tuo caso specifico richiede molti handshake SSL. Ad esempio, i dispositivi che non supportano i ticket di sessione TLS potrebbero richiedere un numero elevato di handshake delle connessioni SSL.
- Dati della console Firebase: anche se in genere non rappresentano una parte significativa dei costi di Realtime Database, Firebase addebita i dati che leggi e scrivi dalla console Firebase.
Stimare l'utilizzo fatturato
Per visualizzare le connessioni e l'utilizzo dei dati Realtime Database attuali, controlla la scheda Utilizzo nella console Firebase. Puoi controllare l'utilizzo nel periodo di fatturazione corrente, negli ultimi 30 giorni o nelle ultime 24 ore.
Firebase mostra le statistiche di utilizzo per le seguenti metriche:
- Connessioni: il numero di connessioni in tempo reale simultanee e attualmente aperte al database. Sono incluse le seguenti connessioni in tempo reale: WebSocket, polling lungo ed eventi inviati dal server HTML. Non include le richieste RESTful.
- Spazio di archiviazione:la quantità di dati archiviati nel database. Non sono inclusi Firebase Hosting o i dati archiviati tramite altri prodotti Firebase.
- Download: tutti i byte scaricati dal tuo database, inclusi il protocollo e l'overhead di crittografia.
- Carico:questo grafico mostra la quantità di database in uso, che elabora le richieste, in un determinato intervallo di 1 minuto. Potresti riscontrare problemi di prestazioni quando il database si avvicina al 100%.
Ottimizzare l'utilizzo
Esistono alcune best practice che puoi utilizzare per ottimizzare l'utilizzo del database e i costi di larghezza di banda.
- Utilizza gli SDK nativi:se possibile, utilizza gli SDK corrispondenti alla piattaforma della tua app anziché l'API REST. Gli SDK mantengono aperte le connessioni, riducendo i costi di crittografia SSL che in genere si accumulano con l'API REST.
- Controlla la presenza di bug: se i costi di larghezza di banda sono inaspettatamente elevati, verifica che la tua app non stia sincronizzando più dati o più spesso di quanto previsto inizialmente. Per individuare i problemi, utilizza lo strumento di profilazione per misurare le operazioni di lettura e attivare la registrazione di log di debug negli SDK per Android, Objective-C e web. Controlla le procedure in background e di sincronizzazione nell'app per assicurarti che tutto funzioni come previsto.
- Riduci le connessioni:se possibile, prova a ottimizzare la larghezza di banda della connessione. Le richieste REST frequenti e piccole possono essere più costose di una singola connessione continua utilizzando l'SDK nativo. Se utilizzi l'API REST, valuta la possibilità di utilizzare un keep-alive HTTP o eventi inviati dal server, che possono ridurre i costi delle handshake SSL.
- Utilizza i ticket di sessione TLS: riduci i costi di overhead della crittografia SSL per le connessioni riprese emettendo ticket di sessione TLS. Questo è particolarmente utile se hai bisogno di connessioni frequenti e sicure al database.
- Query sull'indice: l'indicizzazione dei dati riduce la larghezza di banda totale utilizzata per le query, con il duplice vantaggio di ridurre i costi e aumentare il rendimento del database. Utilizza lo strumento di profiler per trovare le query non indicizzate nel tuo database.
- Ottimizza gli ascoltatori: aggiungi query per limitare i dati restituiti dalle operazioni di ascolto e utilizza ascoltatori che scaricano solo gli aggiornamenti dei dati, ad esempio
on()
anzichéonce()
. Inoltre, posiziona gli ascoltatori il più possibile in fondo al percorso per limitare la quantità di dati che sincronizzano. - Riduci i costi di archiviazione: esegui job di pulizia periodici e riduci i dati duplicati nel database.
- Regole di utilizzo:impedisci operazioni non autorizzate e potenzialmente costose sul database. Ad esempio, l'utilizzo di Firebase Realtime Database Security Rules potrebbe evitare uno scenario in cui un utente malintenzionato scarica ripetutamente l'intero database. Scopri di più su come utilizzare le regole di Firebase Realtime Database.
Il piano di ottimizzazione migliore per la tua app dipende dal caso d'uso specifico. Sebbene questo non sia un elenco esaustivo di best practice, puoi trovare altri consigli e suggerimenti degli esperti di Firebase nel nostro canale Slack o su Stack Overflow.