Realtime Database Faturalandırmasını Anlama

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

Faturalandırılmış trafikle ilgili bazı yaygın örnekler şunlardır:

  • Veri indirme: İstemciler veritabanınızdan veri aldığında Firebase, indirilen veriler için ücret alır. Genellikle bu, bant genişliği maliyetlerinizin büyük kısmını oluşturur ancak faturanızdaki tek faktör bu değildir.
  • Protokol ek yükü: Oturum oluşturmak ve sürdürmek için sunucu ile istemciler arasında ek trafik gerekir. Temel protokole bağlı olarak bu trafik şunları içerebilir: Firebase Realtime Database'in gerçek zamanlı protokol ek yükü, WebSocket ek yükü ve HTTP üst bilgisi ek yükü. Her bağlantı kurulduğunda, bu ek yük, SSL şifrelemesi ek yüküyle birlikte bağlantı maliyetlerini artırır. Bu, tek bir istek için çok fazla bant genişliği olmasa da yüklerinizin çok az olması veya sık sık kısa bağlantılar kurmanız durumunda faturanızın önemli bir kısmını oluşturabilir.
  • SSL şifreleme ek yükü: Güvenli bağlantılar için gerekli olan SSL şifreleme ek yüküyle ilişkili bir maliyet vardır. Ortalama olarak bu maliyet, ilk el sıkışma için yaklaşık 3, 5 KB ve giden her bir mesajda TLS kayıt üstbilgileri için yaklaşık onlarca bayttır. Çoğu uygulama için bu, faturanızın küçük bir yüzdesidir. Ancak durumunuz çok sayıda SSL el sıkışması gerektiriyorsa bu oran yüksek olabilir. Örneğin, TLS oturum biletlerini desteklemeyen cihazlar çok sayıda SSL bağlantı 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.

Faturalanan 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 sekmesini kontrol edin. Geçerli fatura 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ı, o anda açık, gerçek zamanlı bağlantıların sayısı. Buna şu gerçek zamanlı bağlantılar dahildir: WebSocket, uzun yoklama ve HTML sunucusu tarafından gönderilen etkinlikler. RESTful istekleri içermez.
  • Depolama alanı: Veritabanınızda depolanan veri miktarıdır. Buna Firebase barındırma veya diğer Firebase ürünleri üzerinden depolanan veriler dahil değildir.
  • İndirmeler: Protokol ve şifreleme ek yükü dahil olmak üzere veritabanınızdan indirilen tüm baytlar.
  • Yükleme: Bu grafik, belirli bir 1 dakikalık aralıklarla veritabanınızın ne kadarının istekleri işlemede kullanıldığını gösterir. Veritabanınız %100'e yaklaştığında performans sorunlarıyla karşılaşabilirsiniz.

Kullanımı optimize et

Veritabanı kullanımınızı ve bant genişliği maliyetlerinizi optimize etmek için yararlanabileceğ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ılara sahiptir ve genellikle REST API'ye eklenen SSL şifreleme maliyetlerini azaltır.
  • Hataları kontrol edin: Bant genişliği maliyetleriniz beklenmedik şekilde yüksek olursa uygulamanızın başlangıçta düşündüğünüzden daha fazla veri veya daha sık senkronizasyon yapmadığından emin olun. Sorunları tespit etmek için profil aracı 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ı açın. 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ğini optimize etmeyi deneyin. Sık gönderilen küçük REST istekleri, yerel SDK kullanan tek bir sürekli bağlantıdan daha maliyetli olabilir. REST API kullanıyorsanız SSL el sıkışmalarının maliyetlerini azaltabilecek HTTP keep-alive veya sunucu tarafından gönderilen etkinlikler kullanmayı düşünün.
  • TLS oturum biletlerini kullanma: TLS oturum biletleri yayınlayarak devam ettirilen bağlantılarda SSL şifrelemesi ek maliyetlerini azaltın. Bu, özellikle veritabanına sık sık güvenli bağlantılara ihtiyaç duyuyorsanız faydalı olacaktır.
  • Dizin sorguları: 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 avantajını sunar. Veritabanınızdaki dizine eklenmeyen sorguları bulmak için profil aracını kullanın.
  • İşleyicilerinizi optimize edin: Dinleme işlemlerinizin döndürdüğü verileri sınırlandırmak için sorgular ekleyin ve yalnızca veri güncellemelerini indiren işleyicileri kullanın (örneğin, once() yerine on()). Ayrıca, senkronize edecekleri veri miktarını sınırlandırmak için dinleyicilerinizi yolun mümkün olduğunca aşağısına yerleştirin.
  • Depolama maliyetlerini azaltın: Düzenli olarak temizlik işleri çalıştırın ve veritabanınızda yinelenen verileri azaltın.
  • Kullanım Kuralları: Veritabanınızda maliyeti yüksek olabilecek yetkisiz işlemleri önleyin. Örneğin, Firebase Realtime Database Güvenlik Kuralları'nı kullanmak, kötü amaçlı bir kullanıcının veritabanınızın tamamını tekrar tekrar indirmesini önleyebilir. Firebase Realtime Database Kuralları'nı kullanma hakkında daha fazla bilgi edinin.

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