Realtime Database Faturalandırmayı Anlama

Firebase, veritabanınızda depoladığınız veriler ve OSI modelinin oturum katmanında (5. katman) tüm giden ağ trafiği için faturalandırır. Depolama alanı için aylık her GB başına 5 ABD doları ücret alınır. Bu ücret günlük olarak değerlendirilir. Faturalandırma, veritabanınızın konumundan etkilenmez. Giden trafik, tüm veritabanı işlemlerinden kaynaklanan bağlantı ve şifreleme ek yükünü ve veritabanı okumaları aracılığıyla indirilen verileri içerir. Hem veritabanı okumaları hem de yazma işlemleri faturanızda bağlantı maliyetlerine neden olabilir. Güvenlik kuralları tarafından reddedilen işlemler dahil olmak üzere veritabanınıza gelen ve veritabanınızdan giden tüm trafik, faturalandırılabilir maliyetlere neden olur.

Faturalandırılan trafiğe örnek olarak aşağıdakiler verilebilir:

  • İndirilen veriler: İstemciler veritabanınızdan veri aldığında Firebase, indirilen veriler için ücret alır. Genellikle bant genişliği maliyetlerinizin büyük bir kısmını oluşturur ancak faturanızdaki tek faktör bu değildir.
  • Protokol yükü: Oturum oluşturmak ve sürdürmek için sunucu ile istemciler arasında bazı ek trafik gerekir. Temel protokole bağlı olarak bu trafik şunları içerebilir: Firebase Realtime Database'ın gerçek zamanlı protokol yükü, WebSocket yükü ve HTTP başlığı yükü. Her bağlantı kurulduğunda, bu ek maliyet SSL şifreleme ek maliyetiyle birlikte bağlantı maliyetlerine katkıda bulunur. Bu, tek bir istek için çok fazla bant genişliği olmasa da yükü küçükse veya sık sık kısa bağlantılar yapıyorsanız faturanızın önemli bir bölümünü oluşturabilir.
  • SSL şifreleme yükü: Güvenli bağlantılar için gerekli SSL şifreleme yüküyle ilişkili bir maliyet vardır. Bu maliyet, ilk el sıkışması için ortalama 3,5 KB, her giden mesajdaki TLS kaydı üstbilgileri için ise ortalama onlarca bayttır. Çoğu uygulama için bu, faturanızın küçük bir yüzdesidir. Ancak, belirli bir durumunuz çok sayıda SSL el sıkışması gerektiriyorsa bu yüzde büyük olabilir. Örneğin, TLS oturum biletlerini desteklemeyen cihazlar çok sayıda SSL bağlantısı el sıkışması gerektirebilir.
  • Firebase konsol verileri: Bu genellikle Realtime Database maliyetlerinin önemli bir bölümünü oluşturmasa da Firebase, Firebase konsolundan okuduğunuz ve yazdığınız veriler için ücret alır.

Faturalandırılan kullanımınızı tahmin etme

Mevcut Realtime Database bağlantılarınızı ve veri kullanımınızı görmek için Firebase konsolundaki Kullanım sekmesine bakın. Mevcut faturalandırma dönemi, son 30 gün veya son 24 saat içindeki kullanımı kontrol edebilirsiniz.

Firebase aşağıdaki metrikler için kullanım istatistiklerini gösterir:

  • Bağlantılar: Veritabanınıza yapılan eşzamanlı, şu anda açık olan gerçek zamanlı bağlantıların sayısı. Buna aşağıdaki gerçek zamanlı bağlantılar dahildir: WebSocket, uzun süreli sorgu ve sunucu tarafından gönderilen HTML etkinlikleri. RESTful istekleri içermez.
  • Depolama alanı: Veritabanında depolanan veri miktarı. Firebase Hosting veya diğer Firebase ürünleri aracılığıyla depolanan veriler bu kapsamda değildir.
  • İndirilenler: Protokol ve şifreleme ek yükü dahil olmak üzere veritabanınızdan indirilen tüm baytlar.
  • Yük: Bu grafikte, belirli bir 1 dakikalık aralık boyunca veritabanınızın ne kadarının kullanıldığı ve istek işlediği gösterilir. Veritabanı %100'e yaklaştıkça performans sorunlarıyla karşılaşabilirsiniz.

Kullanımı optimize etme

Veritabanı kullanımınızı ve bant genişliği maliyetlerinizi optimize etmek için uygulayabileceğiniz birkaç en iyi uygulama vardır.

  • Yerel SDK'ları kullanın: Mümkün olduğunda REST API yerine uygulamanızın platformuna karşılık gelen SDK'ları kullanın. SDK'lar açık bağlantıları korur ve genellikle REST API ile birlikte eklenen SSL şifreleme maliyetlerini azaltır.
  • Hata olup olmadığını kontrol edin: Bant genişliği maliyetleriniz beklenmedik şekilde yüksekse uygulamanızın, başlangıçta amaçladığınızdan daha fazla veri senkronize etmediğini veya daha sık senkronize etmediğini doğrulayın. Sorunları tespit etmek için profil oluşturma aracını kullanarak okuma işlemlerinizi ölçün ve Android, Objective-C ve Web SDK'larında hata ayıklama günlük kaydını etkinleştirin. Her şeyin istediğiniz gibi çalıştığından emin olmak için uygulamanızdaki arka plan ve senkronizasyon işlemlerini kontrol edin.
  • Bağlantıları azaltın: Mümkünse bağlantı bant genişliğinizi optimize etmeye çalışın. Sık yapılan küçük REST istekleri, yerel SDK'yı kullanan tek bir sürekli bağlantıdan daha maliyetli olabilir. REST API'yi kullanıyorsanız SSL el sıkışmalarından kaynaklanan maliyetleri azaltabilecek bir HTTP keep-alive veya sunucu tarafından gönderilen etkinlikler kullanmayı düşünebilirsiniz.
  • TLS oturum biletlerini kullanın: TLS oturum biletleri yayınlayarak devam eden bağlantılardaki SSL şifreleme ek maliyetlerini azaltın. Bu, özellikle veritabanına sık sık güvenli bağlantılar kurmanız gerekiyorsa yararlıdır.
  • Sorguları dizine ekleme: Verilerinizi dizine eklemek, sorgular için kullandığınız toplam bant genişliğini azaltır. Bu da maliyetlerinizi düşürme ve veritabanınızın performansını artırma gibi iki avantaj sağlar. Veritabanında dizine eklenmemiş sorguları bulmak için profil oluşturma aracını kullanın.
  • Dinleyicilerinizi optimize edin: Dinleme işlemlerinizin döndürdüğü verileri sınırlamak için sorgu ekleyin ve yalnızca verilerdeki güncellemeleri indiren dinleyiciler kullanın (örneğin, once() yerine on()). Ayrıca, dinleyicilerinizin senkronize ettikleri veri miktarını sınırlamak için mümkün olduğunca yolun sonuna yerleştirin.
  • Depolama maliyetlerini azaltın: Düzenli temizleme işleri çalıştırın ve veritabanınızdaki yinelenen verileri azaltın.
  • Kuralları Kullanma: Veritabanında maliyetli olabilecek yetkisiz işlemleri önleyin. Örneğin, Firebase Realtime Database Security Rules kullanarak kötü amaçlı bir kullanıcının veritabanınızın tamamını tekrar tekrar indirdiği bir senaryoyu önleyebilirsiniz. Firebase Realtime Database kurallarını kullanma hakkında daha fazla bilgi edinin.

Uygulamanız için en iyi optimizasyon planı, kullanım alanınıza bağlıdır. Bu, en iyi uygulamaların kapsamlı bir listesi değildir. Slack kanalımızda veya Stack Overflow'da Firebase uzmanlarından daha fazla tavsiye ve ipucu alabilirsiniz.