Azure Cosmos DB'deki tutarlılık düzeyleri
Uygulama hedefı:
MongoDB için SQL API Cassandra API gremlin API
tablo API'si
Azure Cosmos DB API 'si
Yüksek kullanılabilirlik, düşük gecikme süresi veya her ikisi için çoğaltmaya güvenen 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 takas yapmaları gerekir. Güçlü tutarlılık modelinin doğrusal hale getirilebilirliği, veri programlanabilirliği için altın standarttır. Ancak verilerin büyük mesafeler arasında çoğaltılması ve işlenmiş olması nedeniyle daha yüksek yazma gecikme sürelerinden yüksek bir fiyat ekler. Veriler her bölgede çoğaltıla ve işlenemeyeyeli olduğundan, güçlü tutarlılık düşük kullanılabilirlik (hatalar sırasında) ile de etki edilebilir. Nihai tutarlılık daha yüksek kullanılabilirlik ve daha iyi performans sunar, ancak tüm bölgelerde veriler tamamen tutarlı olmayabilmektedir, ancak uygulamaları programlaya daha zor hale getirebilirsiniz.
Günümüzde pazarda bulunan, ticari olarak kullanılabilen çoğu dağıtılmış NoSQL veritabanı yalnızca güçlü ve nihai tutarlılık sağlar. Azure Cosmos DB iyi tanımlanmış beş düzey sunar. En güçlüden en zayıfa doğru düzeyler şu şekildedir:
- Güçlü
- Sınırlayıcı eskima
- Oturum
- Tutarlı ön ek
- Nihai
Her düzey kullanılabilirlik ve performans ile ilgili bir takas sağlar. Aşağıdaki görüntüde, bir spektrum olarak farklı tutarlılık düzeyleri gösterir.
Tutarlılık düzeyleri bölgeden bağımsızdır ve okuma ve yazma işlemlerinin hizmet olduğu bölgeden, Azure Cosmos hesabınızla ilişkili bölge sayısından veya hesabınız tek veya birden çok yazma bölgesiyle yapılandırıldığından bağımsız olarak tüm işlemler için garanti edilir.
Tutarlılık düzeyleri ve Azure Cosmos DB API’leri
Azure Cosmos DB popüler veritabanları için kablo protokolüyle uyumlu API'ler için yerel destek sağlar. Bunlar MongoDB, Apache Cassandra, Gremlin ve Azure Tablo depolamadır. Gremlin API ve Tablo API'si azure hesabı üzerinde yapılandırılmış varsayılan tutarlılık Cosmos kullanılır. MongoDB ve Azure Cosmos DB'nin tutarlılık düzeyleri için API veya Cassandra API arasındaki tutarlılık düzeyi eşlemesi hakkında ayrıntılı bilgi için bkz. MongoDBtutarlılık eşlemesi için Cassandra API tutarlılık eşlemesi ve 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 verilen bir işlemdir.
Varsayılan tutarlılık düzeyini yapılandırma
Varsayılan tutarlılık düzeyini Azure Cosmos yapılandırabilirsiniz. Hesabınız üzerinde yapılandırılan varsayılan tutarlılık düzeyi, bu hesap altındaki tüm Azure Cosmos veritabanları ve kapsayıcılar için geçerlidir. Bir kapsayıcı veya veritabanına yönelik olarak verilen tüm okuma 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. Daha fazla bilgi edinmek için, belirli bir istek için varsayılan tutarlılık düzeyini geçersiz kılabilirsiniz. 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 okumalar için geçerlidir. Varsayılan olarak güçlü tutarlılık için yapılandırılmış bir hesap, verileri hesapta bulunan her bölgeye zaman uyumlu olarak yazmaya ve çoğaltmaya devam ediyor. SDK istemci örneği veya isteği bunu Oturum veya daha zayıf tutarlılıkla geçersiz kılabilirse, okumalar tek bir çoğaltma kullanılarak gerçekleştirilir. Daha fazla ayrıntı için bkz. Tutarlılık düzeyleri ve aktarım hızı.
Önemli
Varsayılan tutarlılık düzeyi değiştirdikten sonra herhangi bir SDK örneğinin yeniden oluşturulması gerekir. Bu, uygulama yeniden başlatarak yapılabilir. Bu, SDK'nın yeni varsayılan tutarlılık düzeyini kullanmalarını sağlar.
Tutarlılık düzeyleriyle ilişkili garantiler
Azure Cosmos DB, okuma isteklerinin yüzde 100'lerinin seçilen tutarlılık düzeyi için tutarlılık garantisine uygun olduğunu garantiler. TLA+ belirtim dilini kullanan Azure Cosmos DB'de beş tutarlılık düzeyine kesin tanımlar, azure-cosmos-tla GitHub sağlanır.
Beş tutarlılık düzeylerinin 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ğrusallaştırma, istekleri eşzamanlı olarak sunan bir ifadedir. Okumaların bir öğenin en son işlenen sürümünü iade etmek garantidir. İstemci hiçbir zaman işlanmamış veya kısmi yazma görmez. Kullanıcıların her zaman en son işlenen yazmayı okuması garantidir.
Aşağıdaki grafikte, notalarla güçlü tutarlılığı göstermektedir. Veriler "Batı ABD 2" bölgeye yazıldığı zaman, diğer bölgelerdeki verileri okuduğunda en son değeri elde olur:
Sınırlanmış eskime durumu tutarlılığı
Sınırlayıcı eskitilenlik tutarlılığında, okumaların tutarlı ön ek garantisine uygun olacağı garantidir. Okumalar, bir öğenin en çok "K" sürümü ("güncelleştirmeler") veya "T" zaman aralığına göre (hangisi önce ulaşılırsa) yazmaların gerisinde gecikmeye neden olabilir. Başka bir deyişle sınırlayıcı eskitebilirlik'i seçtiğiniz zaman "eskilik" iki şekilde yalıtabilirsiniz:
- Öğenin sürüm sayısı (K)
- Zaman aralığı (T) okumaları yazmaların arkasında gecikmeye neden olabilir
Tek bir bölge hesabı için en düşük K ve T değeri 10 yazma veya 5 saniyedir. Çok bölgeli hesaplar için en düşük K ve T değeri 100.000 yazma işlemleri veya 300 saniyedir.
Sınırlayıcı eskitma, "eskima penceresi" dışında toplam genel sırayı sunar. İstemci yazma kabul eden bir bölge içinde okuma işlemleri gerçekleştiriyorsa, sınırlayıcı eskilik tutarlılığı tarafından sağlanan garantiler, güçlü tutarlılık tarafından sağlanan garantilerle aynıdır. Eskima süresi penceresi zaman veya güncelleştirmeler (hangisi daha yakınsa) için yaklaştıkça, hizmet çoğaltmanın yakalamasına ve tutarlılık garantisini kabul etmeye olanak sağlamak için yeni yazmaları kısıtlar.
Eskitma penceresi içinde Sınırlayıcı Eskitilirlik 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 = Nihai
Sınırlayıcı eski durum genellikle düşük yazma gecikme süresi gerektiren ancak toplam genel sipariş garantisi gerektiren genel olarak dağıtılmış uygulamalar tarafından seçilir. Sınırlayıcı eskitebilirlik, grup işbirliği ve paylaşım, hisse senedi takip, yayımlama-abone olma/kuyruğa atılama gibi uygulamalar için idealdir. Aşağıdaki grafikte, notalarla sınırlayıcı eskitsellik tutarlılığı göstermektedir. Veriler "Batı ABD 2" bölgeye yazıldığında, "Doğu ABD 2" ve "Doğu Avustralya" bölgeleri, yapılandırılan maksimum gecikme süresine veya maksimum işlemlere göre yazılan değeri okur:
Oturum tutarlılığı
Oturum tutarlılığında, tek bir istemci oturumunda okumaların tutarlı ön ek, monoton okuma, monoton yazma, okuma-yazma ve yazma-takip-okuma garantilerini onaylar. Bu, tek bir "yazıcı" oturumu olduğunu veya birden çok yazar için oturum belirteci paylaştığını varsayıyor.
Oturum dışında yazma gerçekleştiren istemciler aşağıdaki garantileri görebilir:
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 = Nihai
Azure Cosmos DB tümleşik önbelleğini kullanan istemciler için tutarlılık = Nihai
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ıkla karşılaştırılabilir yazma gecikme süreleri, kullanılabilirlik ve okuma aktarım hızı sağlar, ancak kullanıcı bağlamında çalışacak şekilde yazılan uygulamaların ihtiyaçlarına uygun tutarlılık garantileri sağlar. Aşağıdaki grafikte, notlarla oturum tutarlılığı göstermektedir. "Batı ABD 2 yazıcı" ve "Batı ABD 2 okuyucu" aynı oturumu (Oturum A) kullanıyor, bu nedenle her ikisi de aynı verileri aynı anda okuyor. "Doğu Avustralya" bölgesi "Oturum B" kullanıyorsa, verileri daha sonra ancak yazmalar ile aynı sırayla alır.
Tutarlı ön ek tutarlılığı
Tutarlı ön ek seçeneğinde, döndürülen güncelleştirmeler boşluk içermeden tüm güncelleştirmelerin bazı ön eklerini içerir. Tutarlı ön ek tutarlılığı düzeyi, okumaların hiçbir zaman sıra dışında yazmalar görmesini garantiler.
Yazma işlemi sırasıyla gerçekleştiriliyorsa, istemci , veya ' ı görür ancak veya gibi sıra dışında A, B, C A A,B A,B,C permütasyonları hiçbir zaman A,C B,A,C görmez. Tutarlı Ön Ek, son tutarlılıkla karşılaştırılabilir yazma gecikme süreleri, kullanılabilirlik ve okuma aktarım hızı sağlar, ancak aynı zamanda sıranın önemli olduğu senaryoların ihtiyaçlarına uygun sipariş garantileri sağlar.
Tutarlı Ön Ek için tutarlılık garantileri aşağıda verilmiştir:
- 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 = Nihai
Aşağıdaki grafikte, notalarla tutarlılık ön eki tutarlılığı göstermektedir. Tüm bölgelerde okumalar hiçbir zaman sıra dışında yazmalar görmemektedir:
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.
Nihai tutarlılık en zayıf tutarlılık biçimidir çünkü istemci daha önce okuduğu değerlerden daha eski olan değerleri okuyabilir. Nihai tutarlılık, uygulamanın herhangi bir sipariş garantisi gerektirmeyen durumlara karşı idealdir. Retweet sayısı, Benzerler veya iş parçacıklı olmayan açıklamalar buna örnek olarak verilmiştir. Aşağıdaki grafikte müzik notlarına sahip nihai tutarlılıklar yer almaktadır.
Uygulamada tutarlılık garantileri
Uygulamada, genellikle daha güçlü tutarlılık garantileri elde etmek. Okuma işlemi için tutarlılık garantileri, isteğiniz veritabanı durumunun yeniliğini ve sıralamayı gösterir. Okuma tutarlılığı, yazma/güncelleştirme işlemlerinin sıra ve yayılmasına bağlanır.
Veritabanında yazma işlemi yoksa, son , 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 hesabınız güçlü tutarlılık dışında bir tutarlılık düzeyiyle yapılandırılmışsa, OlasılıkSal Sınırlı Eskima Durumu (PBS) ölçümüne bakarak istemcinizin iş yükleriniz için güçlü ve tutarlı okumalar elde etme olasılığını bulabilirsiniz. Bu ölçüm daha fazla bilgi Azure portal için bkz. Olasılık Sınırlayıcı Sınırlayıcı Eskima Durumu (PBS) ölçümlerini izleme.
Olasılık sınırlayıcı eski durum, nihai tutarlılığınızı gösterir. Bu ölçüm, Azure Cosmos hesabında yapılandırmış olduğunuz tutarlılık düzeyinden daha güçlü bir tutarlılık elde etmek için ne sıklıkta içgörü sağlar. Başka bir deyişle, yazma ve okuma bölgelerinin birleşimi için güçlü tutarlı okumalar alma olasılığını (milisaniye cinsinden ölçülür) görüyorsunuz.
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 değerde 10 milisaniyeden az olması garantidir. 50. yüzdebirlik değerde 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 değerde 10 milisaniyeden az olması garantidir. 50. yüzdebirlik değerde ortalama yazma gecikmesi genellikle 5 milisaniye veya daha kısadır. Azure Cosmos birden fazla bölgeye yayılan ve güçlü tutarlılıkla yapılandırılan azure 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ıkla yapılandırılmış Azure Cosmos hesapları için yazma gecikme süresi en uzak iki bölgenin herhangi biri arasında iki kez gidiş dönüş süresine (RTT) eşittir ve 99. yüzdebirlik değerde 10 milisaniyeye eşittir. Güçlü tutarlılık bir işlemi ancak bir hesap içindeki tüm bölgelere işlendikten sonra tamamlandıktan sonra, bölgeler arasında yüksek ağ RTT'leri, Cosmos DB istekleri için daha yüksek gecikme süresine neden olur.
RTT gecikme süresi, ışık hızı ve Azure ağ topolojisi işlevidir. Azure ağı iki Azure bölgesi arasında RTT için gecikme süresi SLA'sı sağlamasa da Azure ağı gidiş dönüş gecikme süresi istatistiklerini yayımlar. Azure Cosmos hesabınız için çoğaltma gecikme süreleri Azure portal. Azure Azure portal hesabınızla ilişkili çeşitli bölgeler arasındaki çoğaltma gecikme sürelerini izlemek için Azure portal dikey penceresine gidip Tutarlılık sekmesini seçin) Cosmos kullanabilirsiniz.
Önemli
Yüksek yazma gecikme süresi nedeniyle 5000 milden (8000 kilometre) fazla bölgeye yayılan bölgelerde güçlü tutarlılık varsayılan olarak engellenir. Bu özelliği etkinleştirmek için lütfen deliğe başvurun.
Tutarlılık düzeyleri ve aktarım hızı
Güçlü ve sınırlı eskiklik için okumalar, tutarlılık garantileri sağlamak için dört çoğaltma kümesinde (kuyruz) iki çoğaltmaya karşı yapılır. Oturum, tutarlı ön ek ve son olarak tek çoğaltma okumaları yapar. Sonuç olarak, aynı sayıda istek birimi için güçlü ve sınırlı eski durum 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 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 (küresel çoğunluğun) iş olması gerekirken diğer tüm tutarlılık düzeylerinde yerel çoğunluk (dört çoğaltma kümesinde üç çoğaltma) kullanılır.
| Tutarlılık Düzeyi | Çekirdek Okumaları | Çekirdek Yazma |
|---|---|---|
| Güçlü | Local Minority | Küresel Çoğunluk |
| Sınırlayıcı Eskima | Local Minority | Yerel Çoğunluk |
| Oturum | Tek Çoğaltma (oturum belirteci kullanarak) | Yerel Çoğunluk |
| Tutarlı Ön Ek | Tek Çoğaltma | Yerel Çoğunluk |
| Nihai | Tek Çoğaltma | Yerel Çoğunluk |
Not
Yerel Çoğunluk 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ırlı Eskiklik için tutarlılık garantileri sağlamak için 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ı durumuyla 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 kaybetmeyi tolere edile son veri güncelleştirmelerinin maksimum dönemini anlamanız gerekir. Kaybetmeyi göze aldırabilirsiniz güncelleştirmelerin zaman dönemi kurtarma noktası hedefi (RPO) olarak bilinir.
Aşağıdaki tabloda, bölge genelinde kesinti olması durumuyla tutarlılık modeli ile veri dayanıklılığı arasındaki ilişki tanımlanmıştır.
| Bölge(ler) | Ç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 | K & 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 | K & T |
K = Bir öğenin "K" sürümlerinin (örneğin güncelleştirmeler) sayısı.
T = Son güncelleştirmeden bu yana geçen "T" zaman aralığı.
Tek bir bölge hesabı için en düşük K ve T değeri 10 yazma veya 5 saniyedir. Çok bölgeli hesaplar için en düşük K ve T değeri 100.000 yazma işlemleri veya 300 saniyedir. Bu, Sınırlayıcı Eskitmişlik kullanılırken veriler için en düşük RPO'nun tanımlar.
Güçlü tutarlılık ve birden çok yazma bölgesi
Cosmos yazma bölgesiyle yapılandırılan hesaplar, dağıtılmış bir sistemin sıfır RPO'su ve sıfır RTO'su sağlaması mümkün olmadığı için güçlü tutarlılık için yapılandıramaz. Ayrıca, birden fazla yazma bölgesiyle güçlü tutarlılık kullanılmasına yönelik yazma gecikme avantajları yoktur, çünkü herhangi bir bölgeye yazma çoğaltılmalı ve hesaptaki tüm yapılandırılmış bölgelere atanmalıdır. Bu, tek bir yazma bölgesi hesabıyla aynı yazma gecikme süresine neden olur.
Ek okuma
Tutarlılık kavramları hakkında daha fazla bilgi edinmek için aşağıdaki makaleleri okuyun:
- Azure Cosmos DB tarafından sunulan beş tutarlılık düzeyi için üst düzey TLA + belirtimleri
- Doug Terry tarafından bebey(video) Ile açıklanan çoğaltılan veri tutarlılığı
- Doug Terry tarafından bebey(Teknik İnceleme) Ile açıklanan çoğaltılan veri tutarlılığı
- Zayıf tutarlı çoğaltılan veriler için oturum garantisi
- Modern dağıtılmış veritabanı sistemleri tasarımında tutarlılık avantajları: CAP yalnızca hikayenin bir parçasıdır
- Pratik kısmi çekirdeklerine için dayalı sınırlanmış Stalet (PBS)
- Sonuçta tutarlı yeniden ziyaret edildi
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: