Azure Cosmos DB tümleşik önbelleği - Genel Bakış

ŞUNUN IÇIN GEÇERLIDIR: NoSQL

Azure Cosmos DB tümleşik önbelleği, istek hacminiz arttıkça yönetilebilir maliyetler ve düşük gecikme süresi sağlamanıza yardımcı olan bir bellek içi önbellektir. Tümleşik önbelleği ayarlamak kolaydır ve önbellek geçersiz kılınması veya arka uç altyapısını yönetmek için özel kod yazmak için zaman harcamanız gerekmez. Tümleşik önbelleğiniz, Azure Cosmos DB hesabınızda ayrılmış bir ağ geçidi kullanır. Tümleşik önbellek, iyileştirilmiş performans için ayrılmış bir ağ geçidi kullanacak birçok Azure Cosmos DB özelliğinden ilkidir. İş yükünüz için gereken çekirdek ve bellek sayısına göre üç olası ayrılmış ağ geçidi boyutu arasından seçim yapabilirsiniz.

Tümleşik önbellek, ayrılmış ağ geçidi içinde otomatik olarak yapılandırılır. Tümleşik önbelleğin iki bölümü vardır:

  • Nokta okumaları için öğe önbelleği
  • Sorgular için sorgu önbelleği

Tümleşik önbellek, En Son Kullanılan (LRU) çıkarma ilkesine sahip bir okuma ve yazma önbelleğidir. Öğe önbelleği ve sorgu önbelleği tümleşik önbellek içinde aynı kapasiteyi paylaşır ve LRU çıkarma ilkesi her ikisi için de geçerlidir. Başka bir deyişle veriler, okuma noktası veya sorgu olmasına bakılmaksızın, en son ne zaman kullanıldığına bağlı olarak önbellekten çıkarılır.

Not

Tümleşik önbellek hakkında geri bildiriminiz var mı? Duymak istiyoruz! Geri bildirimlerinizi doğrudan Azure Cosmos DB mühendislik ekibiyle paylaşmaktan çekinmeyin: cosmoscachefeedback@microsoft.com

Tümleşik önbellekten yararlanan iş yükleri

Tümleşik önbelleğin temel amacı, yoğun okuma içeren iş yüklerinin maliyetlerini azaltmaktır. Azure Cosmos DB önbelleğe almadan hızlı olduğundan, düşük gecikme süresi yararlı olsa da tümleşik önbelleğin temel avantajı değildir.

Nokta okumaları ve tümleşik önbelleğe isabet eden sorguların RU ücreti 0 olacaktır. Önbellek isabetlerinin işlem başına maliyeti arka uç veritabanındaki okumalardan çok daha düşük olacaktır.

Aşağıdaki özelliklere uyan iş yükleri tümleşik önbelleğin maliyetleri düşürmeye yardımcı olup olmadığını değerlendirmelidir:

  • Yoğun okuma içeren iş yükleri
  • Büyük öğelerde birçok yinelenen nokta okuması
  • Yinelenen çok sayıda yüksek RU sorgusu
  • Okumalar için sık erişimli bölüm anahtarı

Beklenen tasarrufların en büyük faktörü, okumaların kendilerini tekrarlama derecesidir. İş yükünüz kısa bir süre içinde aynı nokta okuma veya sorgularını tutarlı bir şekilde yürütürse tümleşik önbellek için harika bir adaydır. Yinelenen okumalar için tümleşik önbelleği kullanırken, yalnızca ilk okuma için RU'ları kullanırsınız. Aynı ayrılmış ağ geçidi düğümü üzerinden yönlendirilen sonraki okumalar (pencere içinde MaxIntegratedCacheStaleness ve veriler çıkarılmamışsa) aktarım hızını kullanmaz.

Aşağıdakiler dahil olmak üzere bazı iş yükleri tümleşik önbelleği dikkate almamalıdır:

  • Yoğun yazma içeren iş yükleri
  • Nadiren yinelenen nokta okumaları veya sorguları

Öğe önbelleği

Nokta okumaları için öğe önbelleğini kullanabilirsiniz (başka bir deyişle, Öğe Kimliği ve bölüm anahtarına göre anahtar/değer aramaları).

Öğe önbelleğini doldurma

  • Yeni yazma, güncelleştirme ve silme işlemleri otomatik olarak öğe önbelleğine doldurulur
  • Uygulamanız daha önce önbellekte olmayan belirli bir öğeyi okumaya çalışırsa (önbellek isabetsiz önbelleği), öğe artık öğe önbelleğinde depolanır

Öğe önbelleği geçersiz kılınması ve çıkarılması

  • Öğe güncelleştirme veya silme
  • En son kullanılan (LRU)
  • Önbellek saklama süresi (başka bir deyişle , MaxIntegratedCacheStaleness)

Sorgu önbelleği

Sorgu önbelleği sorguları önbelleğe almak için kullanılabilir. Sorgu önbelleği, sorguyu anahtar/değer aramasına dönüştürür; burada anahtar sorgu metnidir ve değer sorgu sonuçlarıdır. Tümleşik önbelleğin sorgu altyapısı yoktur, yalnızca her sorgu için anahtar/değer aramasını depolar.

Sorgu önbelleğini doldurma

  • Önbellekte bu sorgu için bir sonuç yoksa (önbellek kaçırma), sorgu arka uçtan gönderilir. Sorgu çalıştırıldıktan sonra önbellek bu sorgunun sonuçlarını depolar

Sorgu önbelleği çıkarma

  • En son kullanılan (LRU)
  • Önbellek saklama süresi (başka bir deyişle , MaxIntegratedCacheStaleness)

Sorgu önbelleğiyle çalışma

Sorgularınızın birden çok sonuç sayfası olsa bile sorgu önbelleğiyle çalışırken özel koda ihtiyacınız yoktur. Sorgu sayfalandırma için en iyi yöntemler ve kod, sorgunuz tümleşik önbelleğe isabet eder veya arka uç sorgu altyapısında yürütülürse aynıdır.

Sorgu önbelleği, uygun olduğunda sorgu devamlılık belirteçlerini otomatik olarak önbelleğe alır. Birden çok sonuç sayfası içeren bir sorgunuz varsa, tümleşik önbellekte depolanan tüm sayfaların RU ücreti 0 olur. Sonraki sorgu sonuçları sayfalarınız arka uç yürütmesi gerektiriyorsa, önceki çalışmanın yinelenmemesi için önceki sayfadan bir devamlılık belirteci olur.

Not

Farklı ayrılmış ağ geçidi düğümleri içindeki tümleşik önbellek örnekleri birbirinden bağımsız önbelleklere sahiptir. Veriler bir düğüm içinde önbelleğe alınmışsa, diğer düğümlerde önbelleğe alınmış olması gerekmez. Aynı sorgunun birden çok sayfasını aynı ayrılmış ağ geçidi düğümüne yönlendirilmesi garanti değildir.

Tümleşik önbellek tutarlılığı

Tümleşik önbellek, okuma isteklerini yalnızca oturum ve nihai tutarlılık ile destekler. Okumada tutarlı ön ek, sınırlanmış eskime durumu veya güçlü tutarlılık varsa, her zaman tümleşik önbelleği atlar ve arka uçtan sunulur.

Tüm okumalar için oturumu veya nihai tutarlılığı yapılandırmanın en kolay yolu , bunu hesap düzeyinde ayarlamaktır. Ancak, okumalarınızın yalnızca bir bölümünün belirli bir tutarlılığı olmasını istiyorsanız, tutarlılığı istek düzeyinde de yapılandırabilirsiniz.

Not

Diğer tutarlılıklara sahip yazma istekleri önbelleği doldurmaya devam eder, ancak önbellekten okumak için isteğin oturum veya nihai tutarlılığa sahip olması gerekir.

Oturum tutarlılığı

Oturum tutarlılığı hem tek bölge hem de genel olarak dağıtılmış Azure Cosmos DB hesapları için en yaygın kullanılan tutarlılık düzeyidir. Oturum tutarlılığı kullanılırken, tek istemci oturumları kendi yazma işlemlerini okuyabilir. Tümleşik önbelleği kullanırken, yazma işlemleri gerçekleştiren oturumun dışındaki istemciler nihai tutarlılığı görür.

MaxIntegratedCacheStaleness

MaxIntegratedCacheStaleness, seçilen tutarlılıktan bağımsız olarak önbelleğe alınan nokta okumaları ve sorguları için kabul edilebilir en yüksek eskime süresidir. MaxIntegratedCacheStaleness, istek düzeyinde yapılandırılabilir. Örneğin, 2 saat ayarlarsanız MaxIntegratedCacheStaleness , isteğiniz yalnızca veriler 2 saatten kısaysa önbelleğe alınmış verileri döndürür. Tümleşik önbelleği kullanarak yinelenen okuma olasılığını artırmak için değerini iş gereksinimlerinizin izin verdikçe yüksek olarak ayarlamanız MaxIntegratedCacheStaleness gerekir.

önbelleğini dolduran bir istekte yapılandırıldığında , isteğinin ne kadar süre önbelleğe alınacağını etkilemediğini anlamak MaxIntegratedCacheStalenessönemlidir. MaxIntegratedCacheStaleness önbelleğe alınmış verileri kullanmaya çalıştığınızda tutarlılığı zorlar. Genel TTL veya önbellek saklama ayarı yoktur, bu nedenle veriler yalnızca tümleşik önbellek doluysa veya yeni bir okuma geçerli önbelleğe alınmış girdinin yaşından küçükse MaxIntegratedCacheStaleness önbellekten çıkarılır.

Bu, çoğu önbelleğin çalışma şekline göre bir geliştirmedir ve aşağıdaki ek özelleştirmelere izin verir:

  • Her nokta okuma veya sorgu için farklı eskime durumu gereksinimleri ayarlayabilirsiniz
  • Aynı nokta okuma veya sorguyu çalıştırsalar bile farklı istemciler farklı MaxIntegratedCacheStaleness değerler yapılandırabilir
  • Önbelleğe alınan veriler için okuma tutarlılığını değiştirmek istiyorsanız, değişikliğin MaxIntegratedCacheStaleness okuma tutarlılığı üzerinde hemen bir etkisi olur

Not

En düşük MaxIntegratedCacheStaleness değer 0, maksimum değer ise 10 yıldır. Açıkça yapılandırılmadığında varsayılan MaxIntegratedCacheStaleness değer 5 dakikadır.

parametresini MaxIntegratedCacheStaleness daha iyi anlamak için aşağıdaki örneği göz önünde bulundurun:

Saat İstek Yanıt
t = 0 sn MaxIntegratedCacheStaleness = 30 saniye ile A Sorgusu Çalıştırma Arka uç veritabanından sonuç döndürme (normal RU ücretleri) ve önbelleği doldurma
t = 0 sn Sorgu B'sini MaxIntegratedCacheStaleness = 60 saniye ile çalıştırma Arka uç veritabanından sonuçları döndürme (normal RU ücretleri) ve önbelleği doldurma
t = 20 sn Sorgu A'ya MaxIntegratedCacheStaleness = 30 saniye ile çalıştırma Tümleşik önbellekten sonuç döndürme (0 RU ücreti)
t = 20 sn Sorgu B'sini MaxIntegratedCacheStaleness = 60 saniye ile çalıştırma Tümleşik önbellekten sonuç döndürme (0 RU ücreti)
t = 40 sn Sorgu A'ya MaxIntegratedCacheStaleness = 30 saniye ile çalıştırma Arka uç veritabanından (normal RU ücretleri) ve yenileme önbelleğinden sonuç döndürme
t = 40 sn Sorgu B'sini MaxIntegratedCacheStaleness = 60 saniye ile çalıştırma Tümleşik önbellekten sonuç döndürme (0 RU ücreti)
t = 50 sn Sorgu B'sini MaxIntegratedCacheStaleness = 20 saniye ile çalıştırma Arka uç veritabanından (normal RU ücretleri) ve yenileme önbelleğinden sonuç döndürme

yapılandırmayı MaxIntegratedCacheStalenessöğrenin.

Ölçümler

Tümleşik önbellek için bazı önemli ölçümleri izlemek yararlı olur. Bu ölçümler şunlardır:

  • DedicatedGatewayCPUUsage - Tüm ayrılmış ağ geçidi düğümleri genelinde veriler için Ortalama, Maksimum veya En Düşük Toplama türleriyle CPU kullanımı.
  • DedicatedGatewayAverageCPUUsage - (Kullanım dışı) Tüm ayrılmış ağ geçidi düğümleri arasında ortalama CPU kullanımı.
  • DedicatedGatewayMaximumCPUUsage - (Kullanım dışı) Tüm ayrılmış ağ geçidi düğümleri arasında en fazla CPU kullanımı.
  • DedicatedGatewayMemoryUsage - Tüm ayrılmış ağ geçidi düğümleri genelinde veriler için Ortalama, Maksimum veya En Düşük Toplama türleriyle bellek kullanımı.
  • DedicatedGatewayAverageMemoryUsage - (Kullanım dışı) Tüm ayrılmış ağ geçidi düğümleri arasında ortalama bellek kullanımı.
  • DedicatedGatewayRequests - Tüm ayrılmış ağ geçidi düğümleri genelindeki ayrılmış ağ geçidi isteklerinin toplam sayısı.
  • IntegratedCacheEvictedEntriesSize – Tüm ayrılmış ağ geçidi düğümleri arasında LRU nedeniyle tümleşik önbellekten çıkarılan ortalama veri miktarı. Bu değer, süreyi aştığı MaxIntegratedCacheStaleness için süresi dolan verileri içermez.
  • IntegratedCacheItemExpirationCount - Önbelleğe alınan nokta okumalarının tüm ayrılmış ağ geçidi düğümleri arasındaki süreyi aşması MaxIntegratedCacheStaleness nedeniyle tümleşik önbellekten çıkarılan öğelerin ortalama sayısı.
  • IntegratedCacheQueryExpirationCount - Önbelleğe alınan sorguların tüm ayrılmış ağ geçidi düğümleri arasındaki süreyi aşması MaxIntegratedCacheStaleness nedeniyle tümleşik önbellekten çıkarılan ortalama sorgu sayısı.
  • IntegratedCacheItemHitRate – Tümleşik önbelleği kullanan nokta okumalarının oranı (oturum veya nihai tutarlılık ile ayrılmış ağ geçidi üzerinden yönlendirilen tüm nokta okumalarının dışında). Bu değer, tüm ayrılmış ağ geçidi düğümlerindeki tümleşik önbellek örneklerinin ortalamasıdır.
  • IntegratedCacheQueryHitRate – Tümleşik önbelleği kullanan sorguların oranı (oturum veya nihai tutarlılık ile ayrılmış ağ geçidi üzerinden yönlendirilen tüm sorguların dışında). Bu değer, tüm ayrılmış ağ geçidi düğümlerindeki tümleşik önbellek örneklerinin ortalamasıdır.

Mevcut tüm ölçümler varsayılan olarak Ölçümler dikey penceresinden kullanılabilir (Ölçümler klasik değil):

Tümleşik önbellek ölçümlerinin konumunu gösteren Azure portal ekran görüntüsü.

Ölçümler, tüm ayrılmış ağ geçidi düğümleri arasında ortalama, maksimum veya toplamdır. Örneğin, beş düğümle ayrılmış bir ağ geçidi kümesi sağlarsanız ölçümler beş düğümün tümünde toplanan değeri yansıtır. Her bir düğüm için ölçüm değerlerini belirlemek mümkün değildir.

Genel sorunları giderme

Aşağıdaki örneklerde bazı yaygın senaryolarda hata ayıklama gösterilmektedir:

Uygulamamın ayrılmış ağ geçidini kullanıp kullanmadığı anlamadım

öğesini DedicatedGatewayRequestsdenetleyin. Bu ölçüm, tümleşik önbelleğe isabet edip etmediklerine bakılmaksızın ayrılmış ağ geçidini kullanan tüm istekleri içerir. Uygulamanız özgün bağlantı dizenizle standart ağ geçidini veya doğrudan modu kullanıyorsa hata iletisi görmezsiniz, ancak DedicatedGatewayRequests sıfır olur. Uygulamanız ayrılmış ağ geçidi bağlantı dizenizle doğrudan modu kullanıyorsa, yine de az sayıda DedicatedGatewayRequestsgörebilirsiniz.

İsteklerimin tümleşik önbellekte olup olmadığını anlamadım

ve IntegratedCacheQueryHitRateöğesini IntegratedCacheItemHitRate denetleyin. Bu değerlerin ikisi de sıfırsa istekler tümleşik önbelleğe isabet etmez. Ayrılmış ağ geçidi bağlantı dizesini kullanıp kullanmadığınızı, ağ geçidi moduna bağlanıp bağlanmadığınızı ve oturum veya nihai tutarlılık ayarladığınızı denetleyin.

Ayrılmış ağ geçidimin çok küçük olup olmadığını anlamak istiyorum

ve IntegratedCacheQueryHitRateöğesini IntegratedCacheItemHitRate denetleyin. Yüksek değerler (örneğin, 0,7-0,8'in üzerinde), ayrılmış ağ geçidinin yeterince büyük olduğunu gösteren iyi bir işarettir.

IntegratedCacheItemHitRate veya IntegratedCacheQueryHitRatedüşükse, öğesine IntegratedCacheEvictedEntriesSizebakın. IntegratedCacheEvictedEntriesSize yüksekse, daha büyük bir ayrılmış ağ geçidi boyutunun yararlı olacağı anlamına gelebilir. Ayrılmış ağ geçidi boyutunu artırarak ve yeni IntegratedCacheItemHitRate ile IntegratedCacheQueryHitRatekarşılaştırarak denemeler yapabilirsiniz. Daha büyük bir ayrılmış ağ geçidi veya IntegratedCacheQueryHitRate'yi geliştirmezseIntegratedCacheItemHitRate, okumaların tümleşik önbelleğin etkili olması için yeterli sayıda tekrarlamaması mümkündür.

Ayrılmış ağ geçidimin çok büyük olup olmadığını anlamak istiyorum

Ayrılmış bir ağ geçidinin çok büyük olup olmadığını ölçmek, ayrılmış bir ağ geçidinin çok küçük olup olmadığını ölçmekten daha zordur. Genel olarak, küçük bir başlangıç yapmalı ve geliştirmeyi durdurana kadar IntegratedCacheItemHitRateIntegratedCacheQueryHitRate ayrılmış ağ geçidi boyutunu yavaşça artırmanız gerekir. Bazı durumlarda, iki önbellek isabeti ölçümünden yalnızca biri önemli olacaktır, her ikisi de önemli değildir. Örneğin, iş yükünüz nokta okumaları yerine öncelikli olarak sorgular ise , IntegratedCacheQueryHitRate değerinden IntegratedCacheItemHitRateçok daha önemlidir.

LRU yerine aşılması MaxIntegratedCacheStalenessnedeniyle çoğu veri önbellekten çıkarılırsa, önbelleğiniz gerekenden daha büyük olabilir. ve IntegratedCacheQueryExpirationCount birleştirilmiş neredeyse kadar IntegratedCacheEvictedEntriesSizebüyükseIntegratedCacheItemExpirationCount, daha küçük bir ayrılmış ağ geçidi boyutuyla denemeler yapabilir ve performansı karşılaştırabilirsiniz.

Daha fazla ayrılmış ağ geçidi düğümü eklemem gerekip gerekmediğini anlamak istiyorum

Bazı durumlarda gecikme süresi beklenmedik şekilde yüksekse daha büyük düğümler yerine daha fazla ayrılmış ağ geçidi düğümüne ihtiyacınız olabilir. Daha fazla ayrılmış ağ geçidi düğümü eklemenin DedicatedGatewayCPUUsage gecikme süresini azaltıp azaltmayacağını belirlemek için ve DedicatedGatewayMemoryUsage öğesini denetleyin. Tümleşik önbelleğin tüm örnekleri birbirinden bağımsız olduğundan, daha fazla ayrılmış ağ geçidi düğümü eklenmesinin IntegratedCacheEvictedEntriesSizeöğesini azaltmayacağını unutmayın. Ancak daha fazla düğüm eklemek, ayrılmış ağ geçidi kümenizin işleyebileceği istek hacmini geliştirir.

Sonraki adımlar