Geniş ölçekte gerçek zamanlı sorguları anlayın, Geniş ölçekte gerçek zamanlı sorguları anlayın

Sunucusuz uygulamanızı saniyede binlerce işlemin veya yüzbinlerce eşzamanlı kullanıcının ötesine ölçeklendirme konusunda rehberlik için bu belgeyi okuyun. Bu belge, sistemi derinlemesine anlamanıza yardımcı olacak ileri düzey konuları içerir. Cloud Firestore'a yeni başlıyorsanız bunun yerine hızlı başlangıç ​​kılavuzuna bakın.

Cloud Firestore ve Firebase mobil/web SDK'ları, istemci tarafı kodunun doğrudan veritabanına eriştiği sunucusuz uygulamalar geliştirmek için güçlü bir model sağlar. SDK'lar, müşterilerin verilerdeki güncellemeleri gerçek zamanlı olarak dinlemesine olanak tanır. Sunucu altyapısı gerektirmeyen duyarlı uygulamalar oluşturmak için gerçek zamanlı güncellemeleri kullanabilirsiniz. Bir şeyi çalışır hale getirmek çok kolay olsa da Cloud Firestore'u oluşturan sistemlerdeki kısıtlamaları anlamanıza yardımcı olur, böylece sunucusuz uygulamanız trafik arttığında ölçeklenebilir ve iyi performans gösterebilir.

Uygulamanızı ölçeklendirmeye ilişkin tavsiyeler için aşağıdaki bölümlere bakın.

Kullanıcılarınıza yakın bir veritabanı konumu seçin

Aşağıdaki diyagram, gerçek zamanlı bir uygulamanın mimarisini göstermektedir:

Örnek gerçek zamanlı uygulama mimarisi

Kullanıcının cihazında (mobil veya web) çalışan bir uygulama Cloud Firestore ile bağlantı kurduğunda bağlantı, veritabanınızın bulunduğu aynı bölgedeki Cloud Firestore ön uç sunucusuna yönlendirilir. Örneğin, veritabanınız us-east1 bağlantı aynı zamanda us-east1 Cloud Firestore ön ucuna da gider. Bu bağlantılar uzun ömürlüdür ve uygulama tarafından açıkça kapatılana kadar açık kalır. Ön uç, temeldeki Cloud Firestore depolama sistemlerinden verileri okur.

Kullanıcının fiziksel konumu ile Cloud Firestore veritabanı konumu arasındaki mesafe, kullanıcının yaşadığı gecikmeyi etkiler. Örneğin, uygulaması Kuzey Amerika'daki bir Google Cloud bölgesindeki bir veritabanıyla konuşan Hindistan'daki bir kullanıcı, veritabanının Hindistan'da veya Asya'nın başka bir yerinde olduğu gibi daha yakın bir yerde bulunmasına kıyasla deneyimi daha yavaş ve uygulamayı daha az hızlı bulabilir. .

Güvenilirlik için tasarım

Aşağıdaki konular uygulamanızın güvenilirliğini artırır veya etkiler:

Çevrimdışı modu etkinleştir

Firebase SDK'ları çevrimdışı veri kalıcılığı sağlar. Kullanıcının cihazındaki uygulama Cloud Firestore'a bağlanamazsa uygulama, yerel olarak önbelleğe alınmış verilerle çalışarak kullanılabilir durumda kalır. Bu, kullanıcılar internet bağlantılarında kesinti yaşadığında veya birkaç saat veya gün boyunca erişimi tamamen kaybettiğinde bile veri erişimini sağlar. Çevrimdışı mod hakkında daha fazla ayrıntı için bkz. Çevrimdışı verileri etkinleştirme .

Otomatik yeniden denemeleri anlama

Firebase SDK'ları, işlemlerin yeniden denenmesi ve kopan bağlantıların yeniden kurulmasıyla ilgilenir. Bu, sunucuların yeniden başlatılmasından kaynaklanan geçici hataların veya istemci ile veritabanı arasındaki ağ sorunlarının giderilmesine yardımcı olur.

Bölgesel ve çok bölgeli konumlar arasında seçim yapın

Bölgesel ve çok bölgeli konumlar arasında seçim yaparken çeşitli ödünleşimler vardır. Temel fark, verilerin nasıl kopyalandığıdır. Bu, uygulamanızın kullanılabilirlik garantilerini artırır. Çok bölgeli bir örnek, daha güçlü hizmet güvenilirliği sağlar ve verilerinizin dayanıklılığını artırır ancak bunun karşılığında maliyet söz konusudur.

Gerçek zamanlı sorgu sistemini anlayın

Anlık görüntü dinleyicileri olarak da adlandırılan gerçek zamanlı sorgular, uygulamanın veritabanındaki değişiklikleri dinlemesine ve veriler değiştiğinde düşük gecikmeli bildirimler almasına olanak tanır. Bir uygulama, güncellemeler için veritabanını periyodik olarak yoklayarak aynı sonucu elde edebilir, ancak bu genellikle daha yavaştır, daha pahalıdır ve daha fazla kod gerektirir. Gerçek zamanlı sorguların nasıl ayarlanıp kullanılacağına ilişkin örnekler için bkz . Gerçek zamanlı güncellemeleri alma . Aşağıdaki bölümlerde anlık görüntü dinleyicilerinin nasıl çalıştığına ilişkin ayrıntılar ele alınmakta ve performansı korurken gerçek zamanlı sorguları ölçeklendirmeye yönelik en iyi uygulamalardan bazıları açıklanmaktadır.

Mobil SDK'lardan biriyle oluşturulmuş bir mesajlaşma uygulaması aracılığıyla Cloud Firestore'a bağlanan iki kullanıcıyı hayal edin.

Müşteri A, chatroom adı verilen bir koleksiyona belge eklemek ve bu belgeleri güncellemek için veritabanına yazar:

collection chatroom:
    document message1:
      from: 'Sparky'
      message: 'Welcome to Cloud Firestore!'

    document message2:
      from: 'Santa'
      message: 'Presents are coming'

İstemci B, anlık görüntü dinleyicisini kullanarak aynı koleksiyondaki güncellemeleri dinler. Birisi yeni bir mesaj oluşturduğunda Müşteri B anında bir bildirim alır. Aşağıdaki şemada anlık görüntü dinleyicisinin arkasındaki mimari gösterilmektedir:

Anlık görüntü dinleyici bağlantısının mimarisi

İstemci B, anlık görüntü dinleyicisini veritabanına bağladığında aşağıdaki olay dizisi gerçekleşir:

  1. İstemci B, Cloud Firestore ile bir bağlantı açar ve Firebase SDK aracılığıyla onSnapshot(collection("chatroom")) öğesine çağrı yaparak bir dinleyici kaydeder. Bu dinleyici saatlerce aktif kalabilir.
  2. Cloud Firestore ön ucu, veri kümesini önyüklemek için temel depolama sistemini sorgular. Eşleşen belgelerin sonuç kümesinin tamamını yükler. Buna yoklama sorgusu diyoruz. Sistem daha sonra kullanıcının bu verilere erişebildiğini doğrulamak için veritabanının Firebase Güvenlik Kurallarını değerlendirir. Kullanıcı yetkilendirilmişse veri tabanı kullanıcıya veri döndürür.
  3. Müşteri B'nin sorgusu daha sonra dinleme moduna geçer. Dinleyici bir abonelik işleyicisine kaydolur ve verilerdeki güncellemeleri bekler.
  4. İstemci A artık bir belgeyi değiştirmek için bir yazma işlemi gönderiyor.
  5. Veritabanı belge değişikliğini depolama sistemine kaydeder.
  6. İşlemsel olarak, sistem aynı güncellemeyi dahili bir değişiklik günlüğüne kaydeder. Değişiklik günlüğü, değişiklikler meydana geldikçe katı bir sıralama belirler.
  7. Değişiklik günlüğü ise güncellenen verileri bir abonelik işleyici havuzuna aktarır.
  8. Güncellenen belgenin mevcut kayıtlı anlık görüntü dinleyicileriyle eşleşip eşleşmediğini görmek için bir ters sorgu eşleştirici yürütülür. Bu örnekte belge, İstemci B'nin anlık görüntü dinleyicisiyle eşleşiyor. Adından da anlaşılacağı gibi ters sorgu eşleştiriciyi normal bir veritabanı sorgusu olarak düşünebilirsiniz ancak tersten yapılır. Bir sorguyla eşleşenleri bulmak için belgeler arasında arama yapmak yerine, gelen bir belgeyle eşleşenleri bulmak için sorgular arasında verimli bir şekilde arama yapar. Bir eşleşme bulduğunda sistem, söz konusu belgeyi anlık görüntü dinleyicilerine iletir. Daha sonra sistem, verileri yalnızca yetkili kullanıcıların almasını sağlamak için veritabanının Firebase Güvenlik Kurallarını değerlendirir.
  9. Sistem belge güncellemesini istemci B'nin cihazındaki SDK'ya iletir ve onSnapshot geri araması tetiklenir. Yerel kalıcılık etkinleştirilirse SDK, güncellemeyi yerel önbelleğe de uygular.

Cloud Firestore'un ölçeklenebilirliğinin önemli bir kısmı, değişiklik günlüğünden abonelik işleyicilerine ve ön uç sunuculara kadar yayılmaya bağlıdır. Yayma, tek bir veri değişikliğinin milyonlarca gerçek zamanlı sorguya ve bağlı kullanıcıya hizmet verecek şekilde verimli bir şekilde yayılmasına olanak tanır. Cloud Firestore, tüm bu bileşenlerin birçok kopyasını birden fazla bölgede (veya çok bölgeli dağıtım durumunda birden fazla bölgede) çalıştırarak yüksek kullanılabilirlik ve ölçeklenebilirlik elde eder.

Mobil ve web SDK'larından yapılan tüm okuma işlemlerinin yukarıdaki modeli takip ettiğini belirtmekte fayda var. Tutarlılık garantilerini sürdürmek için bir yoklama sorgusu ve ardından dinleme modu gerçekleştirirler. Bu aynı zamanda gerçek zamanlı dinleyiciler, belge alma çağrıları ve tek seferlik sorgular için de geçerlidir. Tek belge alımını ve tek seferlik sorguları, performans açısından benzer kısıtlamalarla gelen kısa ömürlü anlık görüntü dinleyicileri olarak düşünebilirsiniz.

Gerçek zamanlı sorguları ölçeklendirmeye yönelik en iyi uygulamaları uygulayın

Ölçeklenebilir gerçek zamanlı sorgular tasarlamak için aşağıdaki en iyi uygulamaları uygulayın.

Sistemdeki yüksek yazma trafiğini anlayın

Bu bölüm, sistemin artan sayıda yazma isteğine nasıl yanıt verdiğini anlamanıza yardımcı olur.

Gerçek zamanlı sorguları yönlendiren Cloud Firestore değişiklik günlükleri, yazma trafiği arttıkça otomatik olarak yatay olarak ölçeklenir. Bir veritabanının yazma hızı, tek bir sunucunun işleyebileceğinin üzerine çıktıkça, değişiklik günlüğü birden çok sunucuya bölünür ve sorgu işleme, bir yerine birden çok abonelik işleyicisinden gelen verileri tüketmeye başlar. İstemci ve SDK açısından bakıldığında bu tamamen şeffaftır ve bölünmeler meydana geldiğinde uygulamanın herhangi bir işlem yapmasına gerek yoktur. Aşağıdaki şemada gerçek zamanlı sorguların nasıl ölçeklendiği gösterilmektedir:

Değişiklik günlüğü yayılımının mimarisi

Otomatik ölçeklendirme, yazma trafiğinizi sınırsız olarak artırmanıza olanak tanır, ancak trafik arttıkça sistemin yanıt vermesi biraz zaman alabilir. Yazma etkin noktası oluşturmaktan kaçınmak için 5-5-5 kuralının önerilerini izleyin. Key Visualizer, yazma etkin noktalarını analiz etmek için kullanışlı bir araçtır.

Birçok uygulama, Cloud Firestore'un önlem almadan karşılayabileceği öngörülebilir organik büyümeye sahiptir. Ancak büyük bir veri kümesinin içe aktarılması gibi toplu iş yükleri, yazma işlemlerini çok hızlı bir şekilde artırabilir. Uygulamanızı tasarlarken yazma trafiğinizin nereden geldiğinin farkında olun.

Yazma ve okuma işlemlerinin nasıl etkileşimde bulunduğunu anlayın

Gerçek zamanlı sorgulama sistemini, yazma işlemlerini okuyuculara bağlayan bir boru hattı olarak düşünebilirsiniz. Bir belge oluşturulduğunda, güncellendiğinde veya silindiğinde değişiklik, depolama sisteminden o anda kayıtlı dinleyicilere yayılır. Cloud Firestore'un değişiklik günlüğü yapısı güçlü tutarlılığı garanti eder; bu, uygulamanızın, veritabanının veri değişikliklerini taahhüt ettiği zamana kıyasla hiçbir zaman sıra dışı güncelleme bildirimleri almayacağı anlamına gelir. Bu, veri tutarlılığıyla ilgili uç durumları ortadan kaldırarak uygulama geliştirmeyi basitleştirir.

Bu bağlantılı işlem hattı, sıcak noktalara veya kilit çekişmesine neden olan bir yazma işleminin okuma işlemlerini olumsuz etkileyebileceği anlamına gelir. Yazma işlemleri başarısız olduğunda veya kısıtlama yaşandığında, değişiklik günlüğünden tutarlı veriler beklenirken okuma işlemi durabilir. Uygulamanızda bu durum meydana gelirse, hem yavaş yazma işlemlerini hem de sorgular için ilişkili yavaş yanıt sürelerini görebilirsiniz. Sıcak noktalardan kaçınmak, bu sorundan kurtulmanın anahtarıdır.

Belgeleri ve yazma işlemlerini küçük tutun

Anlık görüntü dinleyicileriyle uygulamalar oluştururken genellikle kullanıcıların veri değişikliklerini hızlı bir şekilde öğrenmesini istersiniz. Bunu başarmak için işleri küçük tutmaya çalışın. Sistem onlarca alana sahip küçük dokümanları çok hızlı bir şekilde sisteme aktarabilmektedir. Yüzlerce alan ve büyük veri içeren daha büyük belgelerin işlenmesi daha uzun sürer.

Benzer şekilde, gecikmeyi düşük tutmak için kısa, hızlı kayıt etme ve yazma işlemlerini tercih edin. Büyük gruplar, yazarın bakış açısına göre size daha yüksek verim sağlayabilir ancak aslında anlık görüntü dinleyicileri için bildirim süresini artırabilir. Performansı artırmak için toplu işlemi kullanabileceğiniz diğer veritabanı sistemlerini kullanmaya kıyasla bu genellikle mantığa aykırıdır.

Etkili dinleyiciler kullanın

Veritabanınızın yazma hızları arttıkça Cloud Firestore, veri işlemeyi birçok sunucuya böler. Cloud Firestore'un parçalama algoritması, aynı koleksiyon veya koleksiyon grubundaki verileri aynı değişiklik günlüğü sunucusunda birlikte konumlandırmaya çalışır. Sistem, bir sorgunun işlenmesinde yer alan sunucuların sayısını mümkün olduğu kadar düşük tutarken, olası yazma verimini en üst düzeye çıkarmaya çalışır.

Ancak belirli modeller, anlık görüntü dinleyicileri için yine de ideal olmayan davranışlara yol açabilir. Örneğin, uygulamanız verilerinin çoğunu tek bir büyük koleksiyonda saklıyorsa dinleyicinin ihtiyaç duyduğu tüm verileri alabilmesi için birçok sunucuya bağlanması gerekebilir. Bir sorgu filtresi uygulasanız bile bu durum geçerli kalır. Çok sayıda sunucuya bağlanmak, daha yavaş yanıt verme riskini artırır.

Bu yavaş yanıtlardan kaçınmak için şemanızı ve uygulamanızı, sistemin birçok farklı sunucuya gitmeden dinleyicilere hizmet verebileceği şekilde tasarlayın. Verilerinizi daha küçük yazma hızlarına sahip daha küçük koleksiyonlara bölmek en iyi sonucu verebilir.

Bu, tam tablo taraması gerektiren ilişkisel bir veritabanındaki performans sorgularını düşünmeye benzer. İlişkisel bir veritabanında, tam tablo taraması gerektiren bir sorgu, yüksek kayıplı bir koleksiyonu izleyen bir anlık görüntü dinleyicisine eşdeğerdir. Veritabanının daha spesifik bir dizin kullanarak sunabileceği bir sorguyla karşılaştırıldığında daha yavaş performans gösterebilir. Daha spesifik bir dizine sahip bir sorgu, tek bir belgeyi veya daha az değişen bir koleksiyonu izleyen anlık görüntü dinleyicisine benzer. Kullanım senaryonuzun davranışını ve ihtiyacını en iyi şekilde anlamak için uygulamanızı yükleme testi yapmalısınız.

Anket sorgularını hızlı tutun

Duyarlı gerçek zamanlı sorguların bir diğer önemli parçası, verileri ön yüklemeye yönelik yoklama sorgusunun hızlı ve verimli olmasını sağlamaktır. Yeni bir anlık görüntü dinleyicisi ilk kez bağlandığında, dinleyicinin sonuç kümesinin tamamını yüklemesi ve kullanıcının cihazına göndermesi gerekir. Yavaş sorgular uygulamanızın daha az duyarlı olmasına neden olur. Buna, örneğin birçok belgeyi okumaya çalışan sorgular veya uygun dizinleri kullanmayan sorgular dahildir.

Bir dinleyici bazı durumlarda dinleme durumundan yoklama durumuna da geri dönebilir. Bu otomatik olarak gerçekleşir ve SDK'lar ve uygulamanız için şeffaftır. Aşağıdaki koşullar bir yoklama durumunu tetikleyebilir:

  • Sistem, yükteki değişiklikler nedeniyle değişiklik günlüğünü yeniden dengeler .
  • Sıcak noktalar veritabanına başarısız veya gecikmeli yazma işlemlerine neden olur.
  • Geçici sunucu yeniden başlatmaları dinleyicileri geçici olarak etkiler.

Anket sorgularınız yeterince hızlıysa, anket durumu uygulamanızın kullanıcıları için şeffaf hale gelir.

Uzun ömürlü dinleyicileri tercih edin

Dinleyicileri mümkün olduğu kadar uzun süre açmak ve canlı tutmak, genellikle Cloud Firestore kullanan bir uygulama oluşturmanın en uygun maliyetli yoludur. Cloud Firestore'u kullanırken açık bağlantıyı sürdürmek için değil, uygulamanıza döndürülen belgeler için faturalandırılırsınız. Uzun ömürlü bir anlık görüntü dinleyicisi, ömrü boyunca yalnızca sorguyu sunmak için ihtiyaç duyduğu verileri okur. Buna, ilk yoklama işlemi ve ardından veriler gerçekten değiştiğinde bildirimler dahildir. Öte yandan, tek seferlik sorgular, uygulamanın sorguyu son kez yürütmesinden bu yana değişmemiş olabilecek verileri yeniden okur.

Uygulamanızın yüksek oranda veri tüketmesi gerektiği durumlarda anlık görüntü dinleyicileri uygun olmayabilir. Örneğin, kullanım durumunuz uzun bir süre boyunca bir bağlantı üzerinden saniyede çok sayıda belge gönderiyorsa, daha düşük bir frekansta çalışan tek seferlik sorguları tercih etmek daha iyi olabilir.

Sıradaki ne