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

UYGULANANLAR: NoSQL

Azure Cosmos DB tümleşik önbelleği, istek hacminiz büyüdükçe yönetilebilir maliyetleri ve düşük gecikme süresini 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 önbellek, Azure Cosmos DB hesabınızdaki ayrılmış ağ geçidini kullanır. Ayrılmış ağ geçidinizi sağlarken, iş yükünüz için gereken çekirdek ve bellek sayısına göre düğüm sayısını ve düğüm boyutunu seçebilirsiniz. Her ayrılmış ağ geçidi düğümü diğerlerinden ayrı bir tümleşik önbelleğe sahiptir.

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

  • Nokta okumaları için bir öğ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 önbellekleri tümleşik önbellek içinde aynı kapasiteyi paylaşır ve LRU çıkarma ilkesi her ikisi için de geçerlidir. Veriler, bir nokta okuma veya sorgu olmasına bakılmaksızın, önbellekten en son ne zaman kullanıldığına bağlı olarak çıkarılır. Her düğümdeki önbelleğe alınan veriler, yakın zamanda yazılan veya ilgili düğümde okunan verilere bağlıdır. Bir öğe veya sorgu bir düğümde önbelleğe alınmışsa, diğer düğümlerde önbelleğe alınmış olması gerekmez.

Dekont

Tümleşik önbellek hakkında geri bildiriminiz var mı? Duymak istiyoruz! Geri bildirimleri 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 alınmadan zaten hızlı olduğundan, düşük gecikme süresi yararlı olsa da tümleşik önbelleğin temel avantajı değildir.

Tümleşik önbelleğe isabet eden nokta okumaları ve sorguların RU ücreti 0'dır. Önbellek isabetlerinin işlem başına maliyeti arka uç veritabanındaki okumalardan çok daha düşüktü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 okunan iş yükleri
  • Büyük öğelerde birçok yinelenen nokta okuması
  • Çok sayıda yinelenen yüksek RU sorgusu
  • Okumalar için sık erişimli bölüm anahtarı

Beklenen tasarrufta en büyük faktör, okumaların kendilerini tekrarlama dereceleridir. İş yükünüz aynı nokta okuma veya sorgularını kısa bir süre içinde 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ş yükleri
  • Nadiren yinelenen nokta okumaları veya sorguları
  • Değişiklik akışını okuyan iş yükleri

Öğe önbelleği

Öğe önbelleği nokta okumaları için kullanılır (Öğ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, isteğin yönlendirıldığı düğümün öğe önbelleğinde otomatik olarak doldurulur
  • Öğenin, isteğin yönlendirildiği düğümün önbelleğinde olmadığı nokta okuma isteklerindeki öğeler öğe önbelleğine eklenir
  • İşlem toplu işleminin parçası olan veya toplu modda olan istekler öğe önbelleğini doldurmaz

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

Her düğümün bağımsız bir önbelleği olduğundan, öğeler diğer düğümlerin değil, bir düğümün önbelleğinde geçersiz kılınabilir veya çıkarılmış olabilir. Belirli bir düğümün önbelleğindeki öğeler aşağıdaki ölçütlere göre geçersiz kılınır ve çıkarılır:

  • Öğ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ılır. 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 bir sorgu altyapısı yoktur, yalnızca her sorgu için anahtar/değer aramasını depolar. Sorgu sonuçları bir küme olarak depolanır ve önbellek tek tek öğeleri izlemez. Belirli bir öğe, birden çok sorgunun sonuç kümesinde görünüyorsa sorgu önbelleğinde birden çok kez depolanabilir. Temel alınan öğelere Güncelleştirmeler, sorgu için maksimum tümleşik önbellek eskiliğine ulaşılmadığı ve sorgu arka uç veritabanından sunulmadığı sürece sorgu sonuçlarına yansıtılamaz.

Sorgu önbelleğini doldurma

  • Önbelleğin yönlendirildiği düğümde bu sorgu (önbellek eksik) için bir sonuç yoksa, sorgu arka uçtan gönderilir. Sorgu çalıştırıldıktan sonra önbellek bu sorgunun sonuçlarını depolar
  • Aynı şekle sahip ancak sonuçları etkileyen farklı parametrelere veya istek seçeneklerine sahip sorgular (örneğin, maksimum öğe sayısı) kendi anahtar/değer çifti olarak depolanır

Sorgu önbelleği çıkarma

Sorgu önbelleği çıkarma, isteğin yönlendirildiği düğümü temel alır. Diğer düğümlerde değil, bir düğümde sorgular çıkarılabilir veya yenilenebilir.

  • 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ür.

Sorgu önbelleği, uygun olduğunda sorgu devamı 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. Sorgu sonuçlarının sonraki sayfaları arka uç yürütmesi gerektiriyorsa, önceki çalışmayı yinelemekten kaçınabilmeleri için önceki sayfadan bir devamlılık belirteci olur.

Önemli

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

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

Tümleşik önbellek yalnızca oturum ve nihai tutarlılık ile okuma isteklerini destekler. Okumada tutarlı ön ek, sınırlanmış eskime veya güçlü tutarlılık varsa, 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, yalnızca bazı okumalarınızın belirli bir tutarlılık olmasını istiyorsanız, tutarlılığı istek düzeyinde de yapılandırabilirsiniz.

Dekont

Diğer tutarlılıklarla 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ığı sayesinde tek istemci oturumları kendi yazma işlemlerini okuyabilir. Eşleşen oturum belirtecine sahip olmayan oturum tutarlılığı olan tüm okumalar RU ücretlerine tabi olacaktır. Bu, geçerli bir oturum belirtecini açıkça geçirmediğiniz sürece, istemci uygulaması başlatıldığında veya yeniden başlatıldığında belirli bir öğe veya sorgu için ilk isteği içerir. Oturum dışında yazma işlemi gerçekleştiren istemciler, tümleşik önbelleği kullanırken 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 eskilik değeridir. 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, iş gereksinimlerinizin izin verdikçe yüksek değerini ayarlamanız MaxIntegratedCacheStaleness gerekir.

MaxIntegratedCacheStalenessönbelleğin doldurulmasıyla sonuçlanan bir istekte yapılandırıldığında, bu isteğin ne kadar süre önbelleğe alındığını etkilemez. MaxIntegratedCacheStaleness önbelleğe alınmış verileri okumaya ç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şı daha düşük MaxIntegratedCacheStaleness olduğunda önbellekten çıkarılır.

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

  • Her nokta okuma veya sorgu için farklı eskime 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ştirmenin MaxIntegratedCacheStaleness okuma tutarlılığı üzerinde hemen bir etkisi vardır

Dekont

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

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

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

öğesini yapılandırmayı MaxIntegratedCacheStalenessöğrenin.

Tümleşik önbelleği atlama (Önizleme)

Tümleşik önbellek, sağlanan ayrılmış ağ geçidi SKU'su tarafından belirlenen sınırlı depolama kapasitesine sahiptir. Varsayılan olarak, ayrılmış ağ geçidiyle yapılandırılmış istemcilerden gelen tüm istekler bağlantı dizesi tümleşik önbellekten geçer ve önbellek alanı kaplar. Şu anda önizleme aşamasında olan tümleşik önbellek isteğini atla seçeneğiyle hangi öğelerin ve sorguların önbelleğe alınabileceğini denetleyebilirsiniz. Bu istek seçeneği, sık tekrarlanması beklenmeyen öğe yazma veya okuma istekleri için kullanışlıdır. Seyrek erişime sahip öğeler için tümleşik önbelleğin atlanması, daha fazla yinelemeye sahip öğeler için önbellek alanından tasarruf ederek RU tasarrufunu artırır ve çıkarmaları azaltır. Önbelleği atlayan istekler hala ayrılmış ağ geçidi üzerinden yönlendirilir. Bu istekler arka uçtan ve maliyet RU'larından sunulur.

Tümleşik önbelleği atlamayı öğ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 maksimum 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ınmış nokta okumalarının tüm ayrılmış ağ geçidi düğümlerinde süreyi aşması MaxIntegratedCacheStaleness nedeniyle tümleşik önbellekten çıkarılan ortalama öğe 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ı). 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 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 Azure portalındaki Ölçümler'den kullanılabilir (Ölçümler klasik değil):

Screenshot of the Azure portal that shows the location of integrated cache metrics.

Ö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üğümde de toplanan değeri yansıtır. Her düğüm için ölçüm değerlerini belirlemek mümkün değildir.

Yaygın 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 etmediğine bakılmaksızın ayrılmış ağ geçidini kullanan tüm istekleri içerir. Uygulamanız özgün bağlantı dizesi 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ı dizesi ile doğrudan mod kullanıyorsa, yine de birkaç DedicatedGatewayRequestsgörebilirsiniz.

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

ve IntegratedCacheQueryHitRateöğesini IntegratedCacheItemHitRate denetleyin. Bu değerlerin her ikisi de sıfırsa, istekler tümleşik önbelleğe isabet etmiyor demektir. Ayrılmış ağ geçidi bağlantı dizesi kullanıp kullanmadığınızı, ağ geçidi moduna bağlanıp bağlanmadığınızı ve oturum veya nihai tutarlılık kullanıp kullanmadığı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.

veya IntegratedCacheQueryHitRatedüşükseIntegratedCacheItemHitRate, öğ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'IntegratedCacheItemHitRateyi geliştirmezse, tümleşik önbelleğin etkili olması için okumaların kendilerini yeterince yinelememesi mümkündür.

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

Ayrılmış ağ geçidinin çok büyük olup olmadığını ölçmek, ayrılmış 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 olur, her ikisi de önemli değildir. Örneğin, iş yükünüz nokta okumaları yerine öncelikli olarak sorgularsa , IntegratedCacheQueryHitRate değerinden IntegratedCacheItemHitRateçok daha önemlidir.

Çoğu veri LRU yerine aşılması MaxIntegratedCacheStalenessnedeniyle ö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. Daha fazla düğüm eklemek, ayrılmış ağ geçidi kümenizin işleyebileceği istek birimini geliştirir.

Sonraki adımlar

  • Tümleşik önbellek hakkında SSS
  • Tümleşik önbelleği yapılandırma
  • Ayrılmış ağ geçidi
  • Azure Cosmos DB'ye geçiş için kapasite planlaması yapmaya mı çalışıyorsunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.
    • Tek bildiğiniz mevcut veritabanı kümenizdeki sanal çekirdek ve sunucu sayısıysa, sanal çekirdekleri veya vCPU'ları kullanarak istek birimlerini tahmin etme hakkında bilgi edinin
    • Geçerli veritabanı iş yükünüz için tipik istek oranlarını biliyorsanız Azure Cosmos DB kapasite planlayıcısı kullanarak istek birimlerini tahmin etme hakkında bilgi edinin