Firebase obciąża opłatami za dane przechowywane w bazie danych oraz cały ruch wychodzący z sieci na poziomie sesji (poziom 5) modelu OSI. Opłaty za miejsce na dane wynoszą 5 USD za każdy GB na miesiąc. Lokalizacja bazy danych nie ma wpływu na rozliczenia. Ruch wychodzący obejmuje narzut na połączenia i szyfrowanie wynikający ze wszystkich operacji na bazie danych oraz danych pobranych przez odczyty bazy danych. Zarówno odczyty, jak i zapisy bazy danych mogą powodować koszty połączenia na Twoim rachunku. Cały ruch do bazy danych i z niej, w tym operacje odrzucone przez reguły zabezpieczeń, powoduje obciążenia.
Oto kilka przykładów ruchu objętego opłatami:
- Pobrane dane: gdy klienci pobierają dane z Twojej bazy danych, Firebase pobiera opłatę za pobrane dane. Zwykle stanowi to większość kosztów przepustowości, ale nie jest jedynym czynnikiem wpływającym na Twój rachunek.
- Nakłady związane z protokołem: aby ustanowić i utrzymywać sesję, potrzebny jest dodatkowy ruch między serwerem a klientami. W zależności od podstawowego protokołu ten ruch może obejmować: opóźnienia związane z protokołem czasu rzeczywistego Firebase Realtime Database, opóźnienia związane z WebSocket i opóźnienia związane z nagłówkiem HTTP. Za każdym razem, gdy nawiązywane jest połączenie, ten koszt, w połączeniu z kosztem szyfrowania SSL, zwiększa koszty połączenia. Chociaż nie jest to dużo przepustowości dla pojedynczego żądania, może stanowić znaczną część Twojego rachunku, jeśli ładunki są bardzo małe lub często nawiązujesz krótkie połączenia.
- Narzuty związane z szyfrowaniem SSL: związane z szyfrowaniem SSL wiążą się z kosztami. Średnio koszt ten wynosi około 3,5 KB dla początkowego uścisku dłoni i około kilkudziesięciu bajtów dla nagłówków rekordów TLS w każdej wysyłanej wiadomości. W przypadku większości aplikacji jest to niewielki odsetek Twojego rachunku. Może to być jednak duży odsetek, jeśli Twój przypadek wymaga wielu uzgadniania połączenia SSL. Na przykład urządzenia, które nie obsługują biletów sesji TLS, mogą wymagać dużej liczby procesów nawiązywania połączenia SSL.
- dane z konsoli Firebase: chociaż zwykle nie stanowią one znacznej części kosztów Realtime Database, Firebase pobiera opłaty za dane odczytywane i zapisywane z konsoli Firebase.
Oszacowanie rozliczonego wykorzystania
Aby sprawdzić bieżące połączenia Realtime Database i użycie danych, otwórz kartę Użycie w konsoli Firebase. Możesz sprawdzić wykorzystanie w bieżącym okresie rozliczeniowym, w ciągu ostatnich 30 dni lub w ciągu ostatnich 24 godzin.
Firebase wyświetla statystyki użytkowania dotyczące tych danych:
- Połączenia:liczba jednoczesnych, aktualnie otwartych połączeń z bazą danych w czasie rzeczywistym. Dotyczy to tych połączeń w czasie rzeczywistym: WebSocket, długie pollingi i zdarzenia wysyłane przez serwer w formacie HTML. Nie uwzględnia ona żądań REST.
- Pamięć: ilość danych przechowywanych w bazie danych. Nie obejmuje to Hostingu Firebase ani danych zapisanych przy użyciu innych usług Firebase.
- Pobranianie: wszystkie bajty pobierane z Twojej bazy danych, z uwzględnieniem informacji protokołu oraz narzutu wynikającego z szyfrowania.
- Obciążenie: ten wykres pokazuje, jaka część bazy danych jest używana do przetwarzania żądań w danym 1-minutowym interwale. Gdy baza danych zbliża się do 100%, mogą pojawić się problemy z wydajnością.
Optymalizowanie wykorzystania
Aby zoptymalizować wykorzystanie bazy danych i koszty przepustowości, możesz zastosować kilka sprawdzonych metod.
- Korzystaj z natywnych pakietów SDK: w miarę możliwości używaj pakietów SDK odpowiadających platformie Twojej aplikacji zamiast interfejsu API REST. Pakiety SDK utrzymują otwarte połączenia, co zmniejsza koszty szyfrowania SSL, które zwykle kumulują się w przypadku interfejsu API REST.
- Sprawdzanie błędów: jeśli koszty przepustowości są nieoczekiwanie wysokie, sprawdź, czy aplikacja nie synchronizuje więcej danych lub nie synchronizuje się częściej niż to było pierwotnie zamierzone. Aby wykryć problemy, użyj narzędzia do profilowania, aby mierzyć operacje odczytu, i włącz logowanie debugowania w pakietach SDK Androida, Objective-C i internetowych. Sprawdź procesy w tle i synchronizacji w aplikacji, aby mieć pewność, że wszystko działa zgodnie z oczekiwaniami.
- Zmniejsz liczbę połączeń: jeśli to możliwe, spróbuj zoptymalizować przepustowość połączenia. Częste, małe żądania REST mogą być droższe niż jedno ciągłe połączenie za pomocą natywnego pakietu SDK. Jeśli korzystasz z interfejsu API REST, rozważ użycie protokołu HTTP keep-alive lub zdarzeń wysyłanych przez serwer, które mogą obniżyć koszty związane z uściskiem SSL.
- Używanie biletów sesji TLS: zmniejszenie kosztów związanych z szyfrowaniem SSL w przypadku wznowionych połączeń przez wydanie biletów sesji TLS. Jest to szczególnie przydatne, jeśli wymagasz częstych, bezpiecznych połączeń z bazą danych.
- Zapytania indeksowania: indeksowanie danych obniża łączną przepustowość wykorzystywaną na zapytania, co przynosi podwójną korzyść: obniża koszty i zwiększa wydajność bazy danych. Użyj narzędzia do profilowania, aby znaleźć niezindeksowane zapytania w bazie danych.
- Zoptymalizuj słuchaczy: dodaj zapytania, aby ograniczyć dane zwracane przez operacje listen, i używaj słuchaczy, którzy pobierają tylko aktualizacje danych, na przykład
on()
zamiastonce()
. Dodatkowo umieść odbiorców jak najdalej, aby ograniczyć ilość danych, które będą synchronizowane. - Obniż koszty miejsca na dane: okresowo uruchamiaj zadania czyszczenia i usuwaj duplikaty danych w bazie danych.
- Reguły użycia: zapobiegaj potencjalnie kosztownym, nieautoryzowanym operacjom w bazie danych. Korzystając z dyrektywy Firebase Realtime Database Security Rules, można na przykład uniknąć sytuacji, w której szkodliwy użytkownik wielokrotnie pobiera całą bazę danych. Dowiedz się więcej o korzystaniu z reguł Bazy danych czasu rzeczywistego Firebase.
Najlepszy plan optymalizacji dla aplikacji zależy od konkretnego przypadku użycia. To nie jest wyczerpująca lista sprawdzonych metod, ale więcej porad i wskazówek od ekspertów Firebase znajdziesz na naszym kanale Slack lub na Stack Overflow.