Azure Cosmos DB'deki tutarlılık düzeyleri

ŞUNLAR IÇIN GEÇERLIDIR: Nosql MongoDB Cassandra Gremlin Tablo

Yüksek kullanılabilirlik, düşük gecikme süresi veya her ikisi için çoğaltmayı kullanan dağıtılmış veritabanları, PACELC teoremi tarafından tanımlanan okuma tutarlılığı, kullanılabilirlik, gecikme süresi ve aktarım hızı arasında temel bir denge oluşturmalıdır. Güçlü tutarlılık modelinin doğrusal hale getirilebilirliği, veri programlamanın altın standardıdır. Ancak verilerin büyük mesafelerde çoğaltılması ve işlenmesi gerekmesi nedeniyle daha yüksek yazma gecikme sürelerinden yüksek bir fiyat ekler. Veriler her bölgede çoğaltılamadığı ve işlenemediğinden güçlü tutarlılık da daha az kullanılabilirlik (hatalar sırasında) ile karşılaşabilir. Nihai tutarlılık daha yüksek kullanılabilirlik ve daha iyi performans sunar, ancak tüm bölgelerde veriler tamamen tutarlı olmayabileceği için uygulamaları programlamak daha zordur.

Bugün piyasada bulunan çoğu ticari olarak kullanılabilir dağıtılmış NoSQL veritabanı yalnızca güçlü ve nihai tutarlılık sağlar. Azure Cosmos DB beş iyi tanımlanmış düzey sunar. En güçlüden en zayıfa düzeyler şunlardır:

Varsayılan tutarlılık düzeyi hakkında daha fazla bilgi için bkz. Varsayılan tutarlılık düzeyini yapılandırma veya varsayılan tutarlılık düzeyini geçersiz kılma.

Her düzey kullanılabilirlik ve performans dengelemeleri sağlar. Aşağıdaki görüntüde spektrum olarak farklı tutarlılık düzeyleri gösterilmektedir.

Spektrum olarak tutarlılık

Tutarlılık düzeyleri ve Azure Cosmos DB API’leri

Azure Cosmos DB, popüler veritabanları için kablo protokolü uyumlu API'ler için yerel destek sağlar. Bunlar MongoDB, Apache Cassandra, Apache Gremlin ve Azure Tablo Depolama'dır. Gremlin veya Tablo için API kullanılırken, Azure Cosmos DB hesabında yapılandırılan varsayılan tutarlılık düzeyi kullanılır. Apache Cassandra ile Azure Cosmos DB arasındaki tutarlılık düzeyi eşlemesi hakkında ayrıntılı bilgi için bkz. Cassandra tutarlılık eşlemesi için API. MongoDB ile Azure Cosmos DB arasında tutarlılık düzeyi eşlemesi hakkında ayrıntılı bilgi için bkz. MongoDB tutarlılık eşlemesi için API.

Okuma tutarlılığının kapsamı

Okuma tutarlılığı, mantıksal bölüm kapsamındaki tek bir okuma işlemi için geçerlidir. Okuma işlemi uzak bir istemci veya saklı yordam tarafından yayımlanabilir.

Varsayılan tutarlılık düzeyini yapılandırma

Azure Cosmos DB hesabınızda istediğiniz zaman varsayılan tutarlılık düzeyini yapılandırabilirsiniz. Hesabınızda yapılandırılan varsayılan tutarlılık düzeyi, bu hesap altındaki tüm Azure Cosmos DB veritabanları ve kapsayıcıları için geçerlidir. Bir kapsayıcı veya veritabanında verilen tüm okumalar ve sorgular varsayılan olarak belirtilen tutarlılık düzeyini kullanır. Daha fazla bilgi edinmek için bkz. Varsayılan tutarlılık düzeyini yapılandırma. Ayrıca belirli bir isteğin varsayılan tutarlılık düzeyini geçersiz kılabilirsiniz. Daha fazla bilgi edinmek için Varsayılan tutarlılık düzeyini geçersiz kılma makalesine bakın.

İpucu

Varsayılan tutarlılık düzeyini geçersiz kılma yalnızca SDK istemcisi içindeki okuma işlemleri için geçerlidir. Varsayılan olarak güçlü tutarlılık için yapılandırılmış bir hesap, hesaptaki her bölgeye eşzamanlı olarak veri yazmaya ve çoğaltmaya devam eder. SDK istemci örneği veya isteği bunu Oturum veya daha zayıf tutarlılık ile geçersiz kıldığında, okuma işlemleri tek bir çoğaltma kullanılarak gerçekleştirilir. Daha fazla bilgi için bkz . Tutarlılık düzeyleri ve aktarım hızı.

Önemli

Varsayılan tutarlılık düzeyini değiştirdikten sonra herhangi bir SDK örneğinin yeniden oluşturulması gerekir. Bu, uygulamayı yeniden başlatarak yapılabilir. Bu, SDK'nın yeni varsayılan tutarlılık düzeyini kullanmasını sağlar.

Tutarlılık düzeyleriyle ilişkili garantiler

Azure Cosmos DB, okuma isteklerinin yüzde 100'ünün seçilen tutarlılık düzeyi için tutarlılık garantisini karşılamasını garanti eder. TLA+ belirtim dili kullanılarak Azure Cosmos DB'deki beş tutarlılık düzeyinin tam tanımları azure-cosmos-tla GitHub deposunda sağlanır.

Beş tutarlılık düzeyinin semantiği aşağıdaki bölümlerde açıklanmıştır.

Güçlü tutarlılık

Güçlü tutarlılık, doğrusallaştırma garantisi sunar. Doğrusal hale getirilebilirlik, isteklerin eşzamanlı olarak sunulmasını ifade eder. Okumaların bir öğenin en son işlenen sürümünü döndürmesi garanti edilir. İstemci hiçbir zaman kaydedilmemiş veya kısmi yazma görmez. Kullanıcıların her zaman en son işlenen yazma işlemini okuması garanti edilir.

Aşağıdaki grafikte, müzik notaları ile güçlü tutarlılık gösterilmektedir. Veriler "Batı ABD 2" bölgesine yazıldıktan sonra, diğer bölgelerdeki verileri okuduğunuzda en son değeri alırsınız:

Güçlü tutarlılık düzeyinin çizimi

Sınırlanmış eskime durumu tutarlılığı

Sınırlanmış eskime durumu tutarlılığında, okumaların tutarlı ön ek garantisine uygun olması garanti edilir. Okumalar, bir öğenin en çok "K" sürümüne ("güncelleştirmeler") veya "T" zaman aralığına göre (hangisi önce ulaşılırsa) yazmaların gerisinde kalabilir. Başka bir deyişle, sınırlanmış eskime durumunu seçtiğinizde "eskime durumu" iki şekilde yapılandırılabilir:

  • Öğenin sürüm sayısı (K)
  • Okuma zaman aralığı (T) yazmaların gerisinde kalabilir

Tek bir bölge hesabı için en düşük K ve T değeri 10 yazma işlemi veya 5 saniyedir. Çok bölgeli hesaplarda en düşük K ve T değeri 100.000 yazma işlemi veya 300 saniyedir.

Sınırlanmış eskime durumu, "eskime penceresi" dışında toplam genel düzen sunar. bir istemci yazmaları kabul eden bir bölge içinde okuma işlemleri gerçekleştirdiğinde, sınırlanmış eskime tutarlılığı tarafından sağlanan garantiler, güçlü tutarlılık tarafından sağlanan garantilerle aynıdır. Eskime penceresi zaman veya güncelleştirmeler için yaklaştıkça (hangisi daha yakınsa) hizmet, çoğaltmanın tutarlılık garantisini yakalamasına ve buna uygun hale getirmesine olanak sağlamak için yeni yazmaları kısıtlar.

Eskime süresi penceresinin içinde Sınırlanmış Eskime Durumu aşağıdaki tutarlılık garantilerini sağlar:

  • Tek yazma bölgesi olan bir hesap için aynı bölgedeki istemciler için tutarlılık = Güçlü

  • Tek yazma bölgesi olan bir hesap için farklı bölgelerdeki istemciler için tutarlılık = Tutarlı Ön Ek

  • Birden çok yazma bölgesi olan bir hesap için tek bir bölgeye yazan istemciler için tutarlılık = Tutarlı Ön Ek

  • Birden çok yazma bölgesi olan bir hesap için farklı bölgelere yazan istemciler için tutarlılık = Son

    Sınırlanmış eskime durumu genellikle düşük yazma gecikmesi bekleyen ancak toplam genel sipariş garantisi gerektiren genel olarak dağıtılmış uygulamalar tarafından seçilir. Sınırlanmış eskime durumu, grup işbirliği ve paylaşım, hisse senedi değer çizgisi, yayımlama-abone olma/kuyruğa alma vb. içeren uygulamalar için mükemmeldir. Aşağıdaki grafikte, müzik notalarıyla sınırlanmış eskime durumu tutarlılığı gösterilmektedir. Veriler "Batı ABD 2" bölgesine yazıldıktan sonra, "Doğu ABD 2" ve "Doğu Avustralya" bölgeleri, yapılandırılmış maksimum gecikme süresine veya maksimum işlemlere göre yazılı değeri okur:

    Sınırlanmış eskime durumu tutarlılık düzeyinin çizimi

Oturum tutarlılığı

Oturum tutarlılığında, tek bir istemci oturumunda okumaların tutarlı ön ek, monoton okuma, monoton yazma, yazmanızı okuma ve yazma takip eden okuma garantilerini yerine getirmek için garanti edilir. Bu, tek bir "yazar" oturumunu veya birden çok yazar için oturum belirtecini paylaştığını varsayar.

Oturum dışında yazma işlemi gerçekleştiren istemciler aşağıdaki garantileri görür:

  • Tek yazma bölgesi olan bir hesap için aynı bölgedeki istemciler için tutarlılık = Tutarlı Ön Ek

  • Tek yazma bölgesi olan bir hesap için farklı bölgelerdeki istemciler için tutarlılık = Tutarlı Ön Ek

  • Birden çok yazma bölgesi olan bir hesap için tek bir bölgeye yazan istemciler için tutarlılık = Tutarlı Ön Ek

  • Birden çok yazma bölgesi olan bir hesap için birden çok bölgeye yazan istemciler için tutarlılık = Son

  • Azure Cosmos DB tümleşik önbelleğini = kullanan istemciler için tutarlılıkNihai

    Oturum tutarlılığı hem tek bölge hem de genel olarak dağıtılmış uygulamalar için en yaygın kullanılan tutarlılık düzeyidir. Son tutarlılık ile karşılaştırılabilir yazma gecikme süreleri, kullanılabilirlik ve okuma aktarım hızı sağlar, aynı zamanda bir kullanıcı bağlamında çalışmak üzere yazılmış uygulamaların gereksinimlerine uygun tutarlılık garantileri sağlar. Aşağıdaki grafikte, müzik notalarıyla oturum tutarlılığı gösterilmektedir. "Batı ABD 2 yazıcısı" ve "Batı ABD 2 okuyucusu" aynı oturumu (Oturum A) kullandığından, ikisi de aynı verileri aynı anda okur. "Doğu Avustralya" bölgesi "Oturum B"yi kullandığından verileri daha sonra ancak yazma işlemleriyle aynı sırada alır.

    Oturum tutarlılığı düzeyinin çizimi

Tutarlı ön ek tutarlılığı

Tutarlı ön ekte, tek belge yazma işlemi olarak yapılan güncelleştirmeler nihai tutarlılığı görür. bir işlem içinde toplu iş olarak yapılan Güncelleştirmeler, işlendikleri işlemle tutarlı olarak döndürülür. Birden çok belgenin işlem içindeki yazma işlemleri her zaman birlikte görünür.

Doc1 ve Doc2 belgelerinde T1 ve T2 işlemleri içinde iki yazma işleminin gerçekleştirildiğini varsayalım. İstemci herhangi bir çoğaltmada okuma işlemi yaparken, kullanıcı "Doc1 v1 ve Doc2 v1" veya " Doc1 v2 ve Doc2 v2" ifadesini görür ancak aynı okuma veya sorgu işlemi için hiçbir zaman "Doc1 v1 ve Doc2 v2" veya "Doc1 v2 ve Doc2 v1" görmez.

İşlem bağlamında Tutarlı Ön Ek için tutarlılık garantileri aşağıdadır (tek belge yazma işlemlerinde nihai tutarlılık gösterilir):

  • Tek yazma bölgesi olan bir hesap için aynı bölgedeki istemciler için tutarlılık = Tutarlı Ön Ek
  • Tek yazma bölgesi olan bir hesap için farklı bölgelerdeki istemciler için tutarlılık = Tutarlı Ön Ek
  • Birden çok yazma bölgesine sahip bir hesap için tek bir bölgeye yazan istemciler için tutarlılık = Tutarlı Ön Ek
  • Birden çok yazma bölgesi olan bir hesap için birden çok bölgeye yazan istemciler için tutarlılık = Son

Aşağıdaki grafikte, müzik notalarıyla tutarlılık ön eki tutarlılığı gösterilmektedir. Tüm bölgelerde okuma işlemleri hiçbir zaman sıra dışı yazmaları görmez:

Tutarlı ön ek çizimi

Nihai tutarlılık

Nihai tutarlılıkta okumalar için sıralama garantisi yoktur. Yazma işlemleri kesildiğinde çoğaltmalar nihai tutarlılığa ulaşacaktır.

İstemci daha önce okuduğu değerlerden daha eski değerleri okuyabileceğinden, nihai tutarlılık en zayıf tutarlılık biçimidir. Nihai tutarlılık, uygulamanın herhangi bir sipariş garantisi gerektirmediği durumlarda idealdir. Örnek olarak Retweets, Beğeniler veya yazışma olmayan açıklamaların sayısı verilebilir. Aşağıdaki grafikte, müzik notalarıyla nihai tutarlılık gösterilmektedir.

vi Nihai tutarlılığın engeli

Tutarlılık garantileri pratikte

Uygulamada genellikle daha güçlü tutarlılık garantileri alabilirsiniz. Okuma işlemi için tutarlılık garantileri, istediğiniz veritabanı durumunun güncelliğine ve sıralamasına karşılık gelir. Okuma tutarlılığı, yazma/güncelleştirme işlemlerinin sıralanması ve yayılmasına bağlıdır.

Veritabanında yazma işlemi yoksa, nihai, oturum veya tutarlı ön ek tutarlılık düzeylerine sahip bir okuma işlemi, güçlü tutarlılık düzeyine sahip bir okuma işlemiyle aynı sonuçları verir.

Azure Cosmos DB hesabınız güçlü tutarlılık dışında bir tutarlılık düzeyiyle yapılandırılmışsa OlasıLığa Bağlı Sınırlanmış Eskime Durumu (PBS) ölçümüne bakarak istemcilerinizin iş yükleriniz için güçlü ve tutarlı okumalar alma olasılığını öğrenebilirsiniz. Bu ölçüm Azure portal kullanıma sunulur. Daha fazla bilgi edinmek için bkz. Olasılıksal Olarak Sınırlanmış Eskime Durumu (PBS) ölçümünü izleme.

Olasılıksal sınırlanmış eskime durumu, nihai tutarlılığınızın nihai olarak nasıl olduğunu gösterir. Bu ölçüm, Azure Cosmos DB hesabınızda yapılandırdığınız tutarlılık düzeyinden ne sıklıkta daha güçlü bir tutarlılık elde ettiğinize ilişkin bir içgörü sağlar. Başka bir deyişle, yazma ve okuma bölgelerinin birleşimi için güçlü tutarlı okumalar elde etme olasılığını (milisaniye cinsinden ölçülür) görebilirsiniz.

Tutarlılık düzeyleri ve gecikme süresi

Tüm tutarlılık düzeyleri için okuma gecikme süresinin her zaman 99. yüzdebirlik dilimde 10 milisaniyeden az olacağı garanti edilir. 50. yüzdebirlik dilimde ortalama okuma gecikmesi genellikle 4 milisaniye veya daha kısadır.

Tüm tutarlılık düzeyleri için yazma gecikme süresinin her zaman 99. yüzdebirlik dilimde 10 milisaniyeden az olacağı garanti edilir. 50. yüzdebirlik dilimde ortalama yazma gecikmesi genellikle 5 milisaniye veya daha kısadır. Çeşitli bölgelere yayılan ve güçlü tutarlılık ile yapılandırılan Azure Cosmos DB hesapları bu garantinin bir istisnasıdır.

Yazma gecikme süresi ve Güçlü tutarlılık

Birden fazla bölgeyle güçlü tutarlılık ile yapılandırılmış Azure Cosmos DB hesaplarında yazma gecikme süresi, en uzak iki bölgeden herhangi biri arasında iki kez gidiş dönüş süresine (RTT) eşittir ve 99. yüzdebirlik dilimde 10 milisaniyedir. Güçlü tutarlılık yalnızca bir hesaptaki tüm bölgelere işlendikten sonra bir işlemi tamamladığından bölgeler arasındaki yüksek ağ RTT,Azure Cosmos DB istekleri için daha yüksek gecikme süresine dönüşür.

RTT gecikme süresi, ışık hızı uzaklığı ve Azure ağ topolojisinin bir işlevidir. Azure ağı iki Azure bölgesi arasında RTT için herhangi bir gecikme süresi SLA'sı sağlamaz, ancak Azure ağ gidiş dönüş gecikme süresi istatistiklerini yayımlar. Azure Cosmos DB hesabınız için çoğaltma gecikme süreleri Azure portal görüntülenir. Azure Cosmos DB hesabınızla ilişkili çeşitli bölgeler arasındaki çoğaltma gecikme sürelerini izlemek için Azure portal kullanabilirsiniz (Ölçümler dikey penceresine gidin, Tutarlılık sekmesini seçin).

Önemli

5000 milden (8000 kilometre) fazla olan bölgelere sahip hesaplar için güçlü tutarlılık, yüksek yazma gecikme süresi nedeniyle varsayılan olarak engellenir. Bu özelliği etkinleştirmek için lütfen desteğe başvurun.

Tutarlılık düzeyleri ve aktarım hızı

  • Güçlü ve sınırlanmış eskime durumu için okumalar, tutarlılık garantileri sağlamak üzere dört çoğaltma kümesindeki (azınlık çekirdeği) iki çoğaltmaya karşı yapılır. Oturum, tutarlı ön ek ve son olarak tek çoğaltma okumaları yapın. Sonuç olarak, aynı sayıda istek birimi için güçlü ve sınırlanmış eskime durumu için okuma aktarım hızı diğer tutarlılık düzeylerinin yarısıdır.

  • Ekleme, değiştirme, upsert ve silme gibi belirli bir yazma işlemi türü için, istek birimleri için yazma aktarım hızı tüm tutarlılık düzeyleri için aynıdır. Güçlü tutarlılık için değişikliklerin her bölgede (genel çoğunluk) işlenmesi gerekirken diğer tüm tutarlılık düzeyleri için yerel çoğunluk (dört çoğaltma kümesindeki üç çoğaltma) kullanılır.

Tutarlılık Düzeyi Çekirdek Okuma sayısı Çekirdek Yazma İşlemleri
Güçlü Yerel Azınlık Genel Çoğunluk
Sınırlanmış Eskime Durumu Yerel Azınlık Yerel Çoğunluk
Oturum Tek Çoğaltma (oturum belirtecini kullanarak) Yerel Çoğunluk
Tutarlı Ön Ek Tek Çoğaltma Yerel Çoğunluk
Nihai Tek Çoğaltma Yerel Çoğunluk

Not

Yerel Azınlık okumalarının RU/sn maliyeti daha zayıf tutarlılık düzeylerinin iki katıdır çünkü okumalar Güçlü ve Sınırlanmış Eskime durumu için tutarlılık garantileri sağlamak üzere iki çoğaltmadan yapılır.

Tutarlılık düzeyleri ve veri dayanıklılığı

Genel olarak dağıtılmış bir veritabanı ortamında, bölge genelinde kesinti olması halinde tutarlılık düzeyi ile veri dayanıklılığı arasında doğrudan bir ilişki vardır. İş sürekliliği planınızı geliştirirken, kesintiye neden olan bir olaydan sonra kurtarma sırasında uygulamanın kaybetmeye dayanabileceği en son veri güncelleştirmeleri süresini anlamanız gerekir. Kaybetmeyi göze alabileceğiniz güncelleştirmelerin zaman aralığı , kurtarma noktası hedefi (RPO) olarak bilinir.

Aşağıdaki tabloda, bölge genelinde kesinti olması halinde tutarlılık modeli ile veri dayanıklılığı arasındaki ilişki tanımılmaktadır.

Bölgeler Çoğaltma modu Tutarlılık düzeyi RPO
1 Tek veya Birden çok yazma bölgesi Herhangi Bir Tutarlılık Düzeyi < 240 Dakika
>1 Tek yazma bölgesi Oturum, Tutarlı Ön Ek, Son < 15 dakika
>1 Tek yazma bölgesi Sınırlanmış Eskime Durumu Kahraman&T
>1 Tek yazma bölgesi Güçlü 0
>1 Birden çok yazma bölgesi Oturum, Tutarlı Ön Ek, Son < 15 dakika
>1 Birden çok yazma bölgesi Sınırlanmış Eskime Durumu Kahraman&T

K = Bir öğenin "K" sürümlerinin (güncelleştirmeler) sayısı.

T = Son güncelleştirmeden bu yana "T" zaman aralığı.

Tek bir bölge hesabı için en düşük K ve T değeri 10 yazma işlemi veya 5 saniyedir. Çok bölgeli hesaplarda en düşük K ve T değeri 100.000 yazma işlemi veya 300 saniyedir. Bu, Sınırlanmış Eskime Durumu kullanılırken veriler için en düşük RPO'yu tanımlar.

Güçlü tutarlılık ve birden çok yazma bölgesi

Dağıtılmış bir sistemin sıfır RPO'yu ve sıfır RTO'yu sağlaması mümkün olmadığından, birden çok yazma bölgesiyle yapılandırılmış Azure Cosmos DB hesapları güçlü tutarlılık için yapılandırılamaz. Ayrıca, herhangi bir bölgeye yazma işleminin hesap içindeki yapılandırılmış tüm bölgelere çoğaltılması ve işlenmesi gerektiğinden, birden çok yazma bölgesiyle güçlü tutarlılık kullanmanın yazma gecikmesi avantajı yoktur. Bu, tek bir yazma bölgesi hesabıyla aynı yazma gecikmesine neden olur.

Ek okuma

Tutarlılık kavramları hakkında daha fazla bilgi edinmek için aşağıdaki makaleleri okuyun:

Sonraki adımlar

Azure Cosmos DB'deki tutarlılık düzeyleri hakkında daha fazla bilgi edinmek için aşağıdaki makaleleri okuyun: