Comprendere la fatturazione del database in tempo reale

Firebase fattura i dati archiviati nel database e tutto il traffico di rete in uscita a livello di sessione (livello 5) del modello OSI. Lo spazio di archiviazione viene fatturato a 5 USD per ogni GB/mese, valutato giornalmente. La fatturazione non è influenzata dalla posizione del tuo database. Il traffico in uscita include il sovraccarico di connessione e crittografia derivante da tutte le operazioni del database e dai dati scaricati tramite letture del database. Sia le letture che le scritture del database possono comportare costi di connessione in bolletta. Tutto il traffico da e verso il tuo database, comprese le operazioni negate dalle regole di sicurezza, comporta costi fatturabili.

Alcuni esempi comuni di traffico fatturato includono:

  • Dati scaricati: quando i clienti ottengono dati dal tuo database, Firebase addebita i dati scaricati. In genere, questo costituisce la maggior parte dei costi della larghezza di banda, ma non è l'unico fattore nella 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 sottostante, questo traffico potrebbe includere: sovraccarico del protocollo in tempo reale di Firebase Realtime Database, sovraccarico di WebSocket e sovraccarico dell'intestazione HTTP. Ogni volta che viene stabilita una connessione, questo sovraccarico, combinato con qualsiasi sovraccarico di crittografia SSL, contribuisce ai costi di connessione. Anche se non si tratta di molta larghezza di banda per una singola richiesta, può costituire una parte sostanziale della bolletta se i carichi utili sono piccoli o se si effettuano connessioni frequenti e brevi.
  • Sovraccarico di crittografia SSL: è previsto un costo associato al sovraccarico di crittografia SSL necessario per connessioni sicure. In media, questo costo è di circa 3,5 KB per l'handshake iniziale e di circa decine di byte per le intestazioni dei record TLS su ciascun messaggio in uscita. Per la maggior parte delle app, si tratta di una piccola percentuale della fattura. Tuttavia, questa percentuale può diventare 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 di connessione SSL.
  • Dati della console Firebase: sebbene di solito non rappresenti una parte significativa dei costi di Realtime Database, Firebase addebita i dati letti e scritti dalla console Firebase.

Stimare l'utilizzo fatturato

Per visualizzare le connessioni attuali del Realtime Database e l'utilizzo dei dati, controlla la scheda Utilizzo nella console Firebase. Puoi verificare 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 simultanee, attualmente aperte, in tempo reale al tuo database. Sono incluse le seguenti connessioni in tempo reale: WebSocket, polling lungo ed eventi inviati dal server HTML. Non include le richieste RESTful.
  • Archiviazione: quanti dati sono archiviati nel database. Ciò non include l'hosting Firebase o i dati archiviati tramite altri prodotti Firebase.
  • Download: tutti i byte scaricati dal database, inclusi protocollo e sovraccarico di crittografia.
  • Carico: questo grafico mostra la quantità di database in uso, elaborando le richieste, in un dato intervallo di 1 minuto. Potresti riscontrare problemi di prestazioni quando il tuo database si avvicina al 100%.

Ottimizza l'utilizzo

Esistono alcune best practice che puoi adottare per ottimizzare l'utilizzo del database e i costi della larghezza di banda.

  • Utilizza gli SDK nativi: quando possibile, utilizza gli SDK che corrispondono alla piattaforma della tua app, anziché l'API REST. Gli SDK mantengono connessioni aperte, riducendo i costi di crittografia SSL che in genere si sommano all'API REST.
  • Verifica la presenza di bug: se i costi della larghezza di banda sono inaspettatamente elevati, verifica che la tua app non sincronizzi più dati o si sincronizzi più spesso di quanto inizialmente previsto. Per individuare i problemi, utilizza lo strumento profiler per misurare le operazioni di lettura e attivare la registrazione del debug negli SDK Android , Objective-C e Web . Controlla i processi in background e di sincronizzazione nella tua 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 di piccole dimensioni possono essere più costose di una singola connessione continua utilizzando l'SDK nativo. Se utilizzi l'API REST, prendi in considerazione l'utilizzo di eventi keep-alive o inviati dal server HTTP, che possono ridurre i costi derivanti dagli handshake SSL.
  • Utilizza ticket di sessione TLS: riduci i costi generali di crittografia SSL sulle connessioni riprese emettendo ticket di sessione TLS . Ciò è particolarmente utile se sono necessarie connessioni frequenti e sicure al database.
  • Query di indicizzazione: l'indicizzazione dei dati riduce la larghezza di banda totale utilizzata per le query, con il doppio vantaggio di ridurre i costi e aumentare le prestazioni del database. Utilizza lo strumento profiler per trovare query non indicizzate nel tuo database.
  • Ottimizza i tuoi ascoltatori: aggiungi query per limitare i dati restituiti dalle tue operazioni di ascolto e utilizza ascoltatori che scaricano solo aggiornamenti ai dati, ad esempio on() anziché once() . Inoltre, posiziona i tuoi ascoltatori il più lontano possibile dal percorso per limitare la quantità di dati che sincronizzano.
  • Riduci i costi di archiviazione: esegui processi di pulizia periodici e riduci eventuali dati duplicati nel database.
  • Regole d'uso: impedisci qualsiasi operazione potenzialmente costosa e non autorizzata sul tuo database. Ad esempio, l'utilizzo delle regole di sicurezza del database Firebase Realtime potrebbe evitare uno scenario in cui un utente malintenzionato scarica ripetutamente l'intero database. Ulteriori informazioni sull'utilizzo delle regole del database Firebase Realtime .

Il miglior piano di ottimizzazione per la tua app dipende dal tuo caso d'uso particolare. Sebbene questo non sia un elenco esaustivo delle migliori pratiche, puoi trovare ulteriori consigli e suggerimenti dagli esperti Firebase sul nostro canale Slack o su Stack Overflow .