Sağlanan aktarım hızını (RU/sn) ölçeklendirmeye yönelik en iyi yöntemler
ŞUNLAR IÇIN GEÇERLIDIR: NoSQL MongoDB Cassandra Gremlin Masa
Bu makalede veritabanınızın veya kapsayıcınızın (koleksiyon, tablo veya grafik) aktarım hızını (RU/sn) ölçeklendirmeye yönelik en iyi yöntemler ve stratejiler açıklanmaktadır. Kavramlar, Azure Cosmos DB API'lerinden herhangi biri için sağlanan el ile RU/sn'leri veya herhangi bir kaynağın en yüksek RU/sn'sini otomatik ölçeklendirmeyi artırdığınızda geçerlidir.
Önkoşullar
- Azure Cosmos DB'de bölümleme ve ölçeklendirme konusunda yeniyseniz öncelikle Azure Cosmos DB'de bölümleme ve yatay ölçeklendirme makalesini okumanız önerilir.
- 429 özel durum nedeniyle RU/sn'lerinizi ölçeklendirmeyi planlıyorsanız Azure Cosmos DB istek hızı çok büyük (429) özel durumlarını tanılama ve sorunlarını giderme sayfasındaki kılavuzu gözden geçirin. RU/sn'yi artırmadan önce sorunun kök nedenini ve RU/sn'yi artırmanın doğru çözüm olup olmadığını belirleyin.
RU/sn'yi ölçeklendirme arka planı
İstediğiniz RU/sn ve geçerli fiziksel bölüm düzeninize bağlı olarak veritabanınızın veya kapsayıcınızın RU/sn değerini artırma isteği gönderdiğinizde, ölçeklendirme işlemi anında veya zaman uyumsuz olarak (genellikle 4-6 saat) tamamlanır.
- Anında ölçeği artırma
- İstediğiniz RU/sn geçerli fiziksel bölüm düzeni tarafından desteklenebilirse Azure Cosmos DB'nin bölmesi veya yeni bölümler eklemesi gerekmez.
- Sonuç olarak, işlem hemen tamamlanır ve RU/sn kullanılabilir.
- Zaman uyumsuz ölçek artırma
- İstenen RU/sn, fiziksel bölüm düzeni tarafından desteklenecek değerden yüksek olduğunda, Azure Cosmos DB mevcut fiziksel bölümleri böler. Kaynak, istenen RU/sn'yi desteklemek için gereken en az bölüm sayısına sahip olana kadar bu durum oluşur.
- Sonuç olarak, işlemin tamamlanması genellikle 4-6 saat sürer. Her fiziksel bölüm en fazla 10.000 RU/sn (tüm API'ler için geçerlidir) aktarım hızı ve 50 GB depolama alanını (30 GB depolama alanı olan Cassandra hariç tüm API'ler için geçerlidir) destekleyebilir.
Not
Zaman uyumsuz bir ölçeklendirme işlemi devam ederken el ile bölge yük devretme işlemi gerçekleştirirseniz veya yeni bir bölge eklerseniz/kaldırırsanız, aktarım hızı ölçeği artırma işlemi duraklatılır. Yük devretme veya bölge ekleme/kaldırma işlemi tamamlandığında otomatik olarak sürdürülür.
- Anında ölçeği azaltma
- Ölçeği azaltma işlemi için Azure Cosmos DB'nin bölmesi veya yeni bölümler eklemesi gerekmez.
- Sonuç olarak, işlem hemen tamamlanır ve RU/sn kullanılabilir,
- Bu işlemin temel sonucu, fiziksel bölüm başına RU'ların azaltılmasıdır.
Bölüm düzenini değiştirmeden RU/sn ölçeğini artırma
1. Adım: Geçerli fiziksel bölüm sayısını bulma.
İçgörü aktarım>hızı>Normalleştirilmiş RU Tüketimi (%) By PartitionKeyRangeID bölümüne gidin. Ayrı sayıda PartitionKeyRangeId sayısını sayın.
Not
Grafikte en fazla 50 PartitionKeyRangeId gösterilir. Kaynağınızda 50'den fazla bölüm varsa, toplam bölüm sayısını saymak için Azure Cosmos DB REST API'sini kullanabilirsiniz.
Her PartitionKeyRangeId, bir fiziksel bölüme eşler ve bir dizi olası karma değer için verileri tutmak üzere atanır.
Azure Cosmos DB, yatay ölçeklendirmeyi etkinleştirmek için verilerinizi bölüm anahtarınıza göre mantıksal ve fiziksel bölümler arasında dağıtır. Veriler yazıldıkçe Azure Cosmos DB, verilerin hangi mantıksal ve fiziksel bölümde yer aldığını belirlemek için bölüm anahtarı değerinin karması kullanır.
2. Adım: Varsayılan en yüksek aktarım hızını hesaplama
Bölümleri bölmek için Azure Cosmos DB'yi tetiklemeden ölçeklendirebileceğiniz en yüksek RU/sn değerine eşittir Current number of physical partitions * 10,000 RU/s
. Bu değeri Azure Cosmos DB Kaynak Sağlayıcısı'ndan alabilirsiniz. Veritabanınızda veya kapsayıcı aktarım hızı ayarı nesnelerinizde bir GET isteği gerçekleştirin instantMaximumThroughput
ve özelliğini alın. Bu değer portaldaki veritabanınızın veya kapsayıcınızın Ölçek ve Ayarlar sayfasında da kullanılabilir.
Örnek
Beş fiziksel bölüme ve 30.000 RU/sn el ile sağlanan aktarım hızına sahip bir kapsayıcımız olduğunu varsayalım. RU/sn değerini anında 5 * 10.000 RU/sn = 50.000 RU/sn'ye yükseltebiliriz. Benzer şekilde otomatik ölçeklendirme maksimum RU/sn değeri 30.000 RU/sn (3000 - 30.000 RU/sn arasında ölçeklendirilen) bir kapsayıcımız olsaydı maksimum RU/sn'mizi anında 50.000 RU/sn'ye (5000 - 50.000 RU/sn arasında ölçeklenir) artırabilirdik.
İpucu
İstek hızı çok büyük özel durumlara (429s) yanıt vermek için RU/sn ölçeğini artırıyorsanız, önce RU/sn'yi geçerli fiziksel bölüm düzeniniz tarafından desteklenen en yüksek RU/sn'ye yükseltmeniz ve daha fazla artırmadan önce yeni RU/sn'nin yeterli olup olmadığını değerlendirmeniz önerilir.
Zaman uyumsuz ölçeklendirme sırasında veri dağıtımının eşit olmasını sağlama
Background
RU/sn değerini geçerli fiziksel bölüm sayısı * 10.000 RU/sn'nin ötesine çıkardığınızda, Azure Cosmos DB mevcut bölümleri yeni bölüm sayısı = ROUNDUP(requested RU/s / 10,000 RU/s)
olana kadar böler. Bölme sırasında üst bölümler iki alt bölüme ayrılır.
Örneğin, üç fiziksel bölüme ve 30.000 RU/sn el ile sağlanan aktarım hızına sahip bir kapsayıcımız olduğunu varsayalım. Aktarım hızını 45.000 RU/sn'ye yükseltirsek Azure Cosmos DB mevcut fiziksel bölümlerden ikisini böler ve toplamda = 5 fiziksel bölüm olur ROUNDUP(45,000 RU/s / 10,000 RU/s)
.
Not
Uygulamalar, bölme işlemi sırasında veri almaya veya sorgulamaya devam edebilir. Azure Cosmos DB istemci SDK'ları ve hizmeti bu senaryoyu otomatik olarak işler ve isteklerin doğru fiziksel bölüme yönlendirildiğinden emin olur, bu nedenle ek kullanıcı eylemi gerekmez.
Depolama ve istek hacmi açısından çok eşit dağıtılmış bir iş yükünüz varsa (genellikle /id gibi yüksek kardinalite alanlarına göre bölümlemeyle gerçekleştirilir), ölçeği artırdığınızda, RU/sn'leri tüm bölümlerin eşit olarak bölünecek şekilde ayarlanması önerilir.
Bunun nedenini görmek için 2 fiziksel bölüm, 20.000 RU/sn ve 80 GB veri içeren mevcut bir kapsayıcıya sahip olduğumuz bir örneği ele alalım.
Yüksek kardinaliteye sahip iyi bir bölüm anahtarı seçme sayesinde veriler kabaca her iki fiziksel bölüme de eşit bir şekilde dağıtılır. Her fiziksel bölüm, anahtar alanının yaklaşık %50'sine atanır ve bu, olası karma değerlerin toplam aralığı olarak tanımlanır.
Ayrıca Azure Cosmos DB, RU/sn değerlerini tüm fiziksel bölümlere eşit olarak dağıtır. Sonuç olarak, her fiziksel bölüm toplam verilerin %10.000 RU/sn ve %50'sine (40 GB) sahiptir. Aşağıdaki diyagramda geçerli durumumuz gösterilmektedir.
Şimdi RU/sn değerimizi 20.000 RU/sn'den 30.000 RU/sn'ye yükseltmek istediğimizi varsayalım.
RU/sn değerini 30.000 RU/sn'ye yükseltirsek bölümlerden yalnızca biri bölünür. Bölmeden sonra şunları yapacağız:
- Verilerin %50'sini içeren bir bölüm (bu bölüm bölünmedi)
- Verilerin %25'ini içeren iki bölüm (bunlar, bölünmüş olan üst bölümden elde edilen alt bölümlerdir)
Azure Cosmos DB RU/sn değerlerini tüm fiziksel bölümlere eşit dağıttığı için her fiziksel bölüm 10.000 RU/sn alır. Ancak artık depolama ve istek dağıtımında bir dengesizlik var.
Aşağıdaki diyagramda, Bölüm 3 ve 4'ün (Bölüm 2'nin alt bölümleri) 20 GB veriye yönelik istekleri sunmak için 10.000 RU/sn, Bölüm 1'de ise iki katı veri (40 GB) için istek sunmak için 10.000 RU/sn olduğunu görüyoruz.
Eşit bir depolama dağıtımı sağlamak için öncelikle ru/sn ölçeğini artırarak her bölümün bölünmesini sağlayabiliriz. Ardından RU/sn'lerimizi istenen duruma düşürebiliriz.
Bu nedenle, iki fiziksel bölümle başlarsak, bölümlerin bölme sonrasında bile olmasını garanti etmek için RU/sn'yi dört fiziksel bölümle sonuçlanacağımız şekilde ayarlamamız gerekir. Bunu başarmak için önce bölüm başına RU/sn = 4 * 10.000 RU/sn = 40.000 RU/sn ayarlayacağız. Ardından bölme işlemi tamamlandıktan sonra RU/sn'mizi 30.000 RU/sn'ye düşürebiliriz.
Sonuç olarak, aşağıdaki diyagramda her fiziksel bölümün 20 GB veri isteklerine hizmet vermek için 30.000 RU/sn / 4 = 7500 RU/sn aldığını görüyoruz. Genel olarak, bölümler arasında eşit depolama ve istek dağıtımı sağlarız.
Genel formül
1. Adım: Tüm bölümlerin eşit olarak bölünmesini sağlamak için RU/sn'nizi artırın
Genel olarak, başlangıç sayısı kadar fiziksel bölümünüz P
varsa ve istenen RU/sn S
değerini ayarlamak istiyorsanız:
RU/sn'nizi şu şekilde artırın: 10,000 * P * (2 ^ (ROUNDUP(LOG_2 (S/(10,000 * P))))
. Bu, tüm bölümlerin eşit olarak bölünmesini sağlayacak istenen değere en yakın RU/sn değerini verir.
Not
Bir veritabanı veya kapsayıcının RU/sn'sini artırdığınızda bu, gelecekte azaltabileceğiniz en düşük RU/sn'yi etkileyebilir. Genellikle en düşük RU/sn MAX(400 RU/sn, GB cinsinden geçerli depolama * 1 RU/sn, şimdiye kadar sağlanan en yüksek RU/sn / 100) değerine eşittir. Örneğin, ölçeklendirdiğiniz en yüksek RU/sn 100.000 RU/sn ise, gelecekte ayarlayabileceğiniz en düşük RU/sn 1000 RU/sn'dir. Minimum RU/sn hakkında daha fazla bilgi edinin.
2. Adım: RU/sn'nizi istenen RU/sn'ye düşürme
Örneğin, 50.000 RU/sn olmak üzere beş fiziksel bölüme sahip olduğumuzu ve 150.000 RU/sn'ye ölçeklendirmek istediğinizi varsayalım. Önce şunu ayarlamalıyız: 10,000 * 5 * (2 ^ (ROUND(LOG_2(150,000/(10,000 * 5))))
= 200.000 RU/sn ve ardından 150.000 RU/sn'ye düşürelim.
Ölçeği 200.000 RU/sn'ye yükselttiğimizde, gelecekte ayarlayabileceğiniz en düşük manuel RU/sn 2000 RU/sn'dir. Ayarlayabildiğimiz en düşük otomatik ölçeklendirme maksimum RU/sn değeri 20.000 RU/sn'dir (2000 - 20.000 RU/sn arasında ölçeklendirilir). Hedef RU/sn değerimiz 150.000 RU/sn olduğundan en düşük RU/sn'den etkilenmeyiz.
Ru/sn'yi büyük veri alımı için iyileştirme
Azure Cosmos DB'ye büyük miktarda veri geçirmeyi veya almayı planlıyorsanız, Azure Cosmos DB'nin önceden almayı planladığınız toplam veri miktarını depolamak için gereken fiziksel bölümleri önceden sağlaması için kapsayıcının RU/sn değerini ayarlamanız önerilir. Aksi takdirde, alma sırasında Azure Cosmos DB'nin bölümleri bölmesi gerekebilir ve bu da veri alımına daha fazla zaman ekler.
Kapsayıcı oluşturma sırasında Azure Cosmos DB'nin başlangıçtaki fiziksel bölüm sayısını hesaplamak için RU/sn başlatma buluşsal formülünü kullanması gerçeğinden yararlanabiliriz.
1. Adım: Bölüm anahtarı seçimini gözden geçirin
Geçiş sonrasında istek hacmi ve depolama alanı dağıtımının eşit olduğundan emin olmak için bölüm anahtarı seçmeye yönelik en iyi yöntemleri izleyin.
2. Adım: İhtiyacınız olacak fiziksel bölüm sayısını hesaplama
Number of physical partitions = Total data size in GB / Target data per physical partition in GB
Her fiziksel bölüm en fazla 50 GB depolama alanı (Cassandra için API için 30 GB) barındırabilir. için Target data per physical partition in GB
seçmeniz gereken değer, fiziksel bölümlerin ne kadar paketlenmiş olmasını istediğinize ve geçiş sonrası depolama alanının ne kadar büyümesini beklediğinize bağlıdır.
Örneğin, depolama alanının büyümeye devam edeceğine karar verirseniz değeri 30 GB olarak ayarlayabilirsiniz. Depolamayı eşit olarak dağıtan iyi bir bölüm anahtarı seçtiğiniz varsayıldığında, her bölüm yaklaşık %60 dolu olur (50 GB'ın 30 GB'ı). Gelecekteki veriler yazıldıkçe, hizmetin hemen daha fazla fiziksel bölüm eklemesine gerek kalmadan mevcut fiziksel bölümler kümesinde depolanabilir.
Buna karşılık, depolamanın geçiş sonrasında önemli ölçüde büyüyeceğine inanıyorsanız değeri daha yüksek ayarlamayı (örneğin 45 GB) seçebilirsiniz. Bu, her bölümün yaklaşık %90 dolu (50 GB'ın 45 GB'ı) olacağı anlamına gelir. Bu, verilerinizin yayıldığı fiziksel bölüm sayısını en aza indirir, yani her fiziksel bölüm sağlanan toplam RU/sn'nin daha büyük bir bölümünü alabilir.
3. Adım: Tüm bölümler için başlangıç olarak kullanılacak RU/sn sayısını hesaplama
Starting RU/s for all partitions = Number of physical partitions * Initial throughput per physical partition
.
Fiziksel bölüm başına rastgele sayıda hedef RU/sn içeren bir örnekle başlayalım.
Initial throughput per physical partition
= Otomatik ölçeklendirme veya paylaşılan aktarım hızı veritabanları kullanılırken fiziksel bölüm başına 10.000 RU/snInitial throughput per physical partition
= El ile aktarım hızı kullanılırken fiziksel bölüm başına 6000 RU/sn
Örnek
Almayı planladığınız 1 TB (1000 GB) verimiz olduğunu ve el ile aktarım hızını kullanmak istediğimizi varsayalım. Azure Cosmos DB'deki her fiziksel bölümün kapasitesi 50 GB'tır. Bölümleri %80 tam (40 GB) olacak şekilde paketlemeyi hedeflediğimizi ve gelecekteki büyüme için bize yer bırakmayı hedeflediğimizi varsayalım.
Bu, 1 TB veri için 1000 GB / 40 GB = 25 fiziksel bölüme ihtiyacımız olduğu anlamına gelir. 25 fiziksel bölüm elde etmek için el ile aktarım hızı kullanıyorsak ilk olarak 25 * 6000 RU/sn = 150.000 RU/sn sağlarız. Daha sonra kapsayıcı oluşturulduktan sonra alma işlemimizin daha hızlı ilerlemesine yardımcı olmak için alım başlamadan önce RU/sn değerini 250.000 RU/sn'ye yükseltiyoruz (zaten 25 fiziksel bölümümüz olduğundan anında gerçekleşir). Bu, her bölümün en fazla 10.000 RU/sn almasına olanak tanır.
Otomatik ölçeklendirme aktarım hızı veya paylaşılan aktarım hızı veritabanı kullanıyorsak, 25 fiziksel bölüm elde etmek için önce 25 * 10.000 RU/sn = 250.000 RU/sn sağlarız. Zaten 25 fiziksel bölümle desteklenebilen en yüksek RU/sn'de olduğumuzdan, sağlanan RU/sn'lerimizi alımdan önce daha fazla artırmayız.
Teoride, 250.000 RU/sn ve 1 TB veri ile 1 kb belgeler ve yazma için 10 RU gerektiğini varsayarsak, alım teorik olarak tamamlanabilir: 1000 GB * (1.000.000 kb / 1 GB) * (1 belge / 1 kb) * (10 RU / belge) * (1 sn / 250.000 RU) * (1 saat / 3600 saniye) = 11,1 saat.
Bu hesaplama, alımı gerçekleştiren istemcinin aktarım hızını tam olarak karşılayıp yazma işlemlerini tüm fiziksel bölümlere dağıtabileceğini varsayarsak bir tahmindir. En iyi uygulama olarak, verilerinizi istemci tarafında "karıştırmanız" önerilir. Bu, istemcinin her saniye birçok farklı mantıksal (ve dolayısıyla fiziksel) bölüme yazmasını sağlar.
Geçiş bittikten sonra RU/sn'yi düşürebilir veya gerektiğinde otomatik ölçeklendirmeyi etkinleştirebiliriz.
Sonraki adımlar
- Veritabanınızın veya kapsayıcınızın normalleştirilmiş RU/sn tüketimini izleyin.
- İstek hızı çok büyük (429) özel durumlarını tanılayın ve sorun giderin .
- Veritabanı veya kapsayıcıda otomatik ölçeklendirmeyi etkinleştirin.