Omówienie płatności w Bazie danych czasu rzeczywistego

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. Za miejsce na dane płacisz 5 USD za każdy GB miesięcznie, obliczone na podstawie dziennych danych. 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 wraz 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.
  • Nakłady związane z szyfrowaniem SSL: szyfrowanie SSL wymaga nakładów, które są niezbędne do nawiązywania bezpiecznych połączeń. Ś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. Jeśli jednak w Twoim przypadku wymagane jest wiele sesji SSL, może to prowadzić do znacznego wzrostu tego odsetka. 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, kliknij 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 obejmuje żądań RESTful.
  • 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ą.

Optymalizacja wykorzystania

Istnieje kilka sprawdzonych metod, które możesz zastosować, aby zoptymalizować wykorzystanie bazy danych i koszt przepustowości.

  • Używanie natywnych pakietów SDK: zawsze, gdy to możliwe, zamiast interfejsu REST API używaj pakietów SDK odpowiadających platformie aplikacji. 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ż było to pierwotnie zamierzone. Aby dokładnie określić problemy, użyj narzędzia do profilowania, aby mierzyć operacje odczytu, i włącz debugowanie w pakietach SDK Android, Objective-CWeb. 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 używasz 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źć niezaindeksowane 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() zamiast once(). Dodatkowo umieść słuchaczy jak najdalej od początku ścieżki, aby ograniczyć ilość danych, które są przez nich 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. Na przykład użycie funkcji Firebase Realtime Database Security Rules może zapobiec sytuacji, w której złośliwy użytkownik wielokrotnie pobiera całą Twoją 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.