Azure Cosmos DB’de sağlanan işlem hızını iyileştirme

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

Sağlanan aktarım hızı modeli sunan Azure Cosmos DB, her ölçekte tahmin edilebilir performans sunar. Aktarım hızını önceden ayırmak veya sağlamak, performansınızdaki "gürültülü komşu etkisini" ortadan kaldırır. tam olarak ihtiyacınız olan aktarım hızını belirtirsiniz ve Azure Cosmos DB, SLA ile yedeklenen yapılandırılmış aktarım hızını garanti eder.

En az 400 RU/sn aktarım hızıyla başlayabilir ve saniye başına on milyonlarca isteğin ölçeğini artırabilirsiniz. Okuma isteği, yazma isteği, sorgu isteği, saklı yordamlar gibi Azure Cosmos DB kapsayıcınızda veya veritabanınızda yaptığınız her isteğin sağlanan aktarım hızınızdan düşülen bir maliyeti vardır. 400 RU/sn sağlar ve 40 RU'ya mal olan bir sorgu yayınlarsanız saniyede 10 sorgu yayımlayabilirsiniz. Bunun ötesindeki tüm istekler hız sınırlaması alır ve isteği yeniden denemeniz gerekir. İstemci sürücüleri kullanıyorsanız, bunlar otomatik yeniden deneme mantığını destekler.

Veritabanlarında veya kapsayıcılarda verim sağlayabilirsiniz. Her strateji, senaryoya bağlı olarak tasarruf elde etmenize yardımcı olur.

Farklı düzeylerde aktarım hızı sağlayarak iyileştirme

  • Bir veritabanında aktarım hızı sağlarsanız, bu veritabanındaki koleksiyonlar/tablolar/grafikler gibi tüm kapsayıcılar yükü temel alarak aktarım hızını paylaşabilir. Veritabanı düzeyinde ayrılmış aktarım hızı, belirli bir kapsayıcı kümesindeki iş yüküne bağlı olarak eşit olmayan şekilde paylaşılır.

  • Bir kapsayıcıda aktarım hızı sağlarsanız aktarım hızı, SLA ile yedeklenen kapsayıcı için garanti edilir. Mantıksal bölüm anahtarı seçimi, yükün kapsayıcının tüm mantıksal bölümlerine eşit olarak dağıtılması için çok önemlidir. Daha fazla ayrıntı için bkz . Bölümleme ve yatay ölçeklendirme makaleleri.

Sağlanan aktarım hızı stratejisine karar vermek için bazı yönergeler aşağıdadır:

Aşağıdakiler durumunda Azure Cosmos DB veritabanında (kapsayıcı kümesi içeren) aktarım hızı sağlamayı göz önünde bulundurun:

  1. Birkaç düzine Azure Cosmos DB kapsayıcınız var ve bunların bazıları veya tümü arasında aktarım hızını paylaşmak istiyorsunuz.

  2. IaaS tarafından barındırılan VM'lerde veya şirket içinde çalışacak şekilde tasarlanmış tek kiracılı bir veritabanından (örneğin, NoSQL veya ilişkisel veritabanlarını) Azure Cosmos DB'ye geçiriyorsunuz. Ayrıca, çok sayıda koleksiyonunuz/tablonuz/grafiğiniz varsa ve veri modelinizde değişiklik yapmak istemiyorsanız. Şirket içi veritabanından geçiş yaparken veri modelinizi güncelleştirmiyorsanız Azure Cosmos DB'nin sunduğu avantajlardan bazılarını tehlikeye atabilirsiniz. Performans açısından en iyi şekilde yararlanmak ve maliyetleri iyileştirmek için veri modelinizi her zaman yeniden değerlendirmeniz önerilir.

  3. İş yüklerindeki planlanmamış ani artışları, iş yükünde beklenmeyen ani artışa neden olan veritabanı düzeyinde havuza alınan aktarım hızı sayesinde almak istiyorsunuz.

  4. Tek tek kapsayıcılarda belirli aktarım hızını ayarlamak yerine, veritabanı içindeki bir dizi kapsayıcıda toplu aktarım hızını almayı önemsersiniz.

Aşağıdakiler durumunda tek bir kapsayıcıda aktarım hızı sağlamayı göz önünde bulundurun:

  1. Birkaç Azure Cosmos DB kapsayıcınız vardır. Azure Cosmos DB şemadan bağımsız olduğundan, kapsayıcı heterojen şemalara sahip öğeler içerebilir ve müşterilerin her varlık için bir tane olmak üzere birden çok kapsayıcı türü oluşturmasını gerektirmez. Ayrı olarak 10-20 kapsayıcıyı tek bir kapsayıcıda gruplandırmak her zaman mantıklı olabilir. Kapsayıcılar için en az 400 RU ile 10-20 kapsayıcının tümünün tek bir kapsayıcıda havuza alınması daha uygun maliyetli olabilir.

  2. Belirli bir kapsayıcıdaki aktarım hızını denetlemek ve belirli bir kapsayıcıda SLA destekli garanti edilen aktarım hızını elde etmek istiyorsunuz.

Yukarıdaki iki stratejinin karmasını düşünün:

  1. Daha önce de belirtildiği gibi, Azure Cosmos DB yukarıdaki iki stratejiyi karıştırmanıza ve eşleştirmenize olanak tanır; böylece artık Azure Cosmos DB veritabanında sağlanan aktarım hızının yanı sıra aynı veritabanında sağlanan aktarım hızını paylaşabilen ve ayrılmış miktarda sağlanan aktarım hızına sahip olabilecek bazı kapsayıcılara sahip olabilirsiniz.

  2. Ayrılmış aktarım hızına sahip bazı kapsayıcılarla her iki veritabanı düzeyinde sağlanan aktarım hızına sahip olduğunuz karma bir yapılandırma oluşturmak için yukarıdaki stratejileri uygulayabilirsiniz.

Aşağıdaki tabloda gösterildiği gibi, API seçimine bağlı olarak farklı ayrıntı düzeylerinde aktarım hızı sağlayabilirsiniz.

API Paylaşılan aktarım hızı için Ayrılmış aktarım hızı için yapılandırma
NoSQL için API Veritabanı Kapsayıcı
MongoDB için Azure Cosmos DB API'si Veritabanı Koleksiyon
Cassandra için API Anahtar alanı Tablo
Gremlin için API Veritabanı hesabı Graf
Tablo için API Veritabanı hesabı Tablo

Farklı düzeylerde aktarım hızı sağlayarak, iş yükünüzün özelliklerine göre maliyetlerinizi iyileştirebilirsiniz. Daha önce de belirtildiği gibi, tek tek kapsayıcılar için veya bir dizi kapsayıcı arasında sağlanan aktarım hızınızı program aracılığıyla ve istediğiniz zaman artırabilir veya azaltabilirsiniz. İş yükünüz değiştikçe aktarım hızını esnek bir şekilde ölçeklendirerek yalnızca yapılandırdığınız aktarım hızı için ödeme yapmış olursunuz. Kapsayıcınız veya bir kapsayıcı kümesi birden çok bölgeye dağıtılmışsa, kapsayıcıda veya bir kapsayıcı kümesinde yapılandırdığınız aktarım hızının tüm bölgelerde kullanılabilir hale getirileceği garanti edilir.

İsteklerinizi hız sınırlama ile iyileştirin

Gecikme süresine duyarlı olmayan iş yükleri için daha az aktarım hızı sağlayabilir ve gerçek aktarım hızı sağlanan aktarım hızını aştığında uygulamanın hız sınırlamasını işlemesini sağlayabilirsiniz. Sunucu isteği önceden (HTTP durum kodu 429) ile RequestRateTooLarge sonlandıracak ve kullanıcının isteği yeniden denemeden önce beklemesi gereken süreyi milisaniye cinsinden belirten üst bilgiyi döndürür x-ms-retry-after-ms .

HTTP Status 429, 
 Status Line: RequestRateTooLarge 
 x-ms-retry-after-ms :100

SDK'larda mantığı yeniden deneme

Yerel SDK'lar (.NET/.NET Core, Java, Node.js ve Python) bu yanıtı örtük olarak yakalar, sunucuda belirtilen yeniden deneme sonrası üst bilgisine saygı gösterir ve isteği yeniden dener. Hesabınıza birden çok istemci tarafından eşzamanlı olarak erişilmediği sürece bir sonraki yeniden deneme başarılı olur.

Sürekli olarak istek oranının üzerinde çalışan birden fazla istemciniz varsa, şu anda 9 olarak ayarlanmış olan varsayılan yeniden deneme sayısı yeterli olmayabilir. Bu gibi durumlarda istemci, uygulamaya durum kodu 429 olan bir RequestRateTooLargeException oluşturur. Varsayılan yeniden deneme sayısı ConnectionPolicy örneğinde ayarlanarak RetryOptions değiştirilebilir. Varsayılan olarak, istek istek hızının RequestRateTooLargeException üzerinde çalışmaya devam ederse 30 saniyelik bir toplu bekleme süresinden sonra durum kodu 429 olan döndürülür. Bu durum, geçerli yeniden deneme sayısı varsayılan olarak 9 veya kullanıcı tanımlı bir değer olsun, maksimum yeniden deneme sayısı'nın altında olduğunda bile oluşur.

MaxRetryAttemptsOnThrottledRequests 3 olarak ayarlanır, bu nedenle bu durumda, bir istek işlemi kapsayıcı için ayrılmış aktarım hızını aşarak hız sınırına ulaşıyorsa, istek işlemi uygulamaya özel durum oluşturmadan önce üç kez yeniden denenir. MaxRetryWaitTimeInSeconds 60 olarak ayarlanır, bu nedenle bu durumda ilk istek 60 saniyeyi aştığından saniye cinsinden kümülatif yeniden deneme bekleme süresi 60 saniyeyi aşarsa özel durum oluşturulur.

ConnectionPolicy connectionPolicy = new ConnectionPolicy(); 
connectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 3; 
connectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 60;

Bölümleme stratejisi ve sağlanan işleme hızı maliyetleri

Azure Cosmos DB'de maliyetleri iyileştirmek için iyi bölümleme stratejisi önemlidir. Depolama ölçümleri aracılığıyla kullanıma sunulan bölümlerde dengesizlik olmadığından emin olun. Aktarım hızı ölçümleriyle kullanıma sunulan bir bölüm için aktarım hızı dengesizliği olmadığından emin olun. Belirli bölüm anahtarlarına doğru eğme olmadığından emin olun. Depolamadaki baskın anahtarlar ölçümler aracılığıyla kullanıma sunulur, ancak anahtar uygulama erişim düzeninize bağımlı olur. Doğru mantıksal bölüm anahtarını düşünmek en iyisidir. İyi bir bölüm anahtarının aşağıdaki özelliklere sahip olması beklenir:

  • İş yükünü tüm bölümlere eşit ve zaman içinde eşit bir şekilde yayan bir bölüm anahtarı seçin. Başka bir deyişle, verilerin büyük bölümüyle bazı anahtarlara ve daha az veri içeren veya hiç veri içermeyen bazı anahtarlara sahip olmamanız gerekir.

  • Erişim desenlerinin mantıksal bölümler arasında eşit olarak yayılmasını sağlayan bir bölüm anahtarı seçin. İş yükü, tüm anahtarlarda bile makul düzeydedir. Başka bir deyişle, iş yükünün çoğunluğu birkaç belirli anahtara odaklanmamalıdır.

  • Çok çeşitli değerlere sahip bir bölüm anahtarı seçin.

Temel fikir, veri depolama ve aktarım hızı kaynaklarının mantıksal bölümler arasında dağıtılabilmesi için kapsayıcınızdaki verileri ve etkinliği mantıksal bölümler kümesine yaymaktır. Bölüm anahtarları için adaylar, sorgularınızda sık sık filtre olarak görünen özellikleri içerebilir. Bölüm anahtarının filtre koşuluna dahil edilmesiyle sorgular etkili bir şekilde yönlendirilebilir. Böyle bir bölümleme stratejisiyle, sağlanan aktarım hızını iyileştirmek çok daha kolay olacaktır.

Daha yüksek aktarım hızı için daha küçük öğeler tasarlama

Belirli bir işlemin istek ücreti veya istek işleme maliyeti doğrudan öğenin boyutuyla ilişkilendirilir. Büyük öğelerdeki işlemler, daha küçük öğelerdeki işlemlerden daha pahalı olacaktır.

Veri erişim desenleri

Verilerinize ne sıklıkta eriştiğinize bağlı olarak verilerinizi mantıksal kategorilere ayırmak her zaman iyi bir uygulamadır. Sık erişimli, orta veya soğuk veriler olarak kategorilere ayırarak, tüketilen depolamaya ve gereken aktarım hızına ince ayar yapabilirsiniz. Erişim sıklığına bağlı olarak, verileri ayrı kapsayıcılara (tablolar, grafikler ve koleksiyonlar gibi) yerleştirebilir ve bu veri segmentinin gereksinimlerini karşılamak için sağlanan aktarım hızına ince ayar yapabilirsiniz.

Ayrıca, Azure Cosmos DB kullanıyorsanız ve belirli veri değerlerine göre arama yapacağınızı veya bunlara nadiren erişmeyeceğini biliyorsanız, bu özniteliklerin sıkıştırılmış değerlerini depolamanız gerekir. Bu yöntemle depolama alanından, dizin alanından ve sağlanan aktarım hızıyla tasarruf eder ve maliyetlerin düşmesine neden olursunuz.

Dizin oluşturma ilkesini değiştirerek iyileştirme

Varsayılan olarak, Azure Cosmos DB her kaydın her özelliğini otomatik olarak dizinler. Bu, geliştirmeyi kolaylaştırmaya ve birçok farklı geçici sorgu türünde mükemmel performans sağlamaya yöneliktir. Binlerce özelliğe sahip büyük kayıtlarınız varsa, özellikle bu özelliklerin yalnızca 10 veya 20'sine karşı sorgu yapıyorsanız, her özelliği dizine ekleme için aktarım hızı maliyetini ödemek yararlı olmayabilir. Belirli iş yükünüzle ilgili bir tanıtıcı almaya yaklaştıkça, dizin ilkenizi ayarlamak için size yol gösteririz. Azure Cosmos DB dizin oluşturma ilkesiyle ilgili tüm ayrıntıları burada bulabilirsiniz.

Sağlanan ve tüketilen aktarım hızını izleme

Sağlanan toplam RU sayısını, hız sınırlı istek sayısını ve Azure portal tükettiğiniz RU sayısını izleyebilirsiniz. Aşağıdaki görüntüde örnek kullanım ölçümü gösterilmektedir:

Azure portal istek birimlerini izleme

Hız sınırlamalı istek sayısının belirli bir eşiği aşıp aşmayacağını denetlemek için uyarılar da ayarlayabilirsiniz. Daha fazla ayrıntı için Bkz. Azure Cosmos DB'yi izleme makalesi. Bu uyarılar hesap yöneticilerine e-posta gönderebilir veya sağlanan aktarım hızını otomatik olarak artırmak için özel bir HTTP Web kancası veya Azure İşlevi çağırabilir.

Aktarım hızınızı esnek ve isteğe bağlı olarak ölçeklendirme

Sağlanan aktarım hızı için faturalandırıldığından, sağlanan aktarım hızını gereksinimlerinizle eşleştirmek kullanılmayan aktarım hızının ücretlerini önlemenize yardımcı olabilir. Sağlanan aktarım hızınızı istediğiniz zaman artırıp azaltabilirsiniz. Aktarım hızı gereksinimleriniz çok öngörülebilirse Azure İşlevleri kullanabilir ve zamanlamaya göre aktarım hızını artırmak veya azaltmak için Zamanlayıcı Tetikleyicisi kullanabilirsiniz.

  • RU'larınızın tüketimini ve hız sınırlamalı isteklerin oranını izlemek, gün veya hafta boyunca sürekli olarak sağlanması gerekmediğini ortaya koyabilir. Gece veya hafta sonu daha az trafik alabilirsiniz. Azure portal veya Azure Cosmos DB yerel SDK'larını veya REST API'lerini kullanarak sağlanan aktarım hızınızı istediğiniz zaman ölçeklendikleyebilirsiniz. Azure Cosmos DB'nin REST API'si, kapsayıcılarınızın performans düzeyini program aracılığıyla güncelleştirmek için uç noktalar sağlar ve günün saatine veya haftanın gününe bağlı olarak kodunuzdan aktarım hızını ayarlamayı kolaylaştırır. İşlem kapalı kalma süresi olmadan gerçekleştirilir ve genellikle bir dakikadan kısa bir sürede etkinleşir.

  • Aktarım hızını ölçeklendirmeniz gereken alanlardan biri, örneğin veri geçişi sırasında Verileri Azure Cosmos DB'ye aldığınızda olmasıdır. Geçişi tamamladıktan sonra, çözümün kararlı durumunu işlemek için sağlanan aktarım hızının ölçeğini azaltabilirsiniz.

  • Faturalamanın bir saatlik ayrıntı düzeyinde olduğunu unutmayın, bu nedenle sağlanan aktarım hızınızı bir kerede bir saatten daha sık değiştirirseniz herhangi bir tasarruf sağlamazsınız.

Yeni iş yükü için gereken aktarım hızını belirleme

Yeni bir iş yükü için sağlanan aktarım hızını belirlemek için aşağıdaki adımları kullanabilirsiniz:

  1. Kapasite planlayıcısını kullanarak ilk, kaba bir değerlendirme yapın ve Azure portal Azure Cosmos DB Gezgini'nin yardımıyla tahminlerinizi ayarlayın.

  2. Kapsayıcıların beklenenden daha yüksek aktarım hızına sahip olması ve gerektiğinde ölçeğin küçültülerek oluşturulması önerilir.

  3. İstekler hız sınırına ulaştığında otomatik yeniden denemelerden yararlanmak için yerel Azure Cosmos DB SDK'larından birinin kullanılması önerilir. Desteklenmeyen bir platform üzerinde çalışıyorsanız ve Azure Cosmos DB'nin REST API'sini kullanıyorsanız üst bilgisini kullanarak x-ms-retry-after-ms kendi yeniden deneme ilkenizi uygulayın.

  4. Tüm yeniden denemeler başarısız olduğunda uygulama kodunuzun olayı düzgün bir şekilde desteklediğinden emin olun.

  5. Hız sınırlama bildirimleri almak için Azure portal uyarıları yapılandırabilirsiniz. Son 15 dakika içinde 10 hız sınırlı istek gibi muhafazakar sınırlarla başlayabilir ve gerçek tüketiminizi anladıktan sonra daha istekli kurallara geçebilirsiniz. Ara sıra hız sınırları normaldir, belirlediğiniz limitlerle oynadığınızı ve tam olarak yapmak istediğiniz şeyin bu olduğunu gösterir.

  6. Trafik düzeninizi anlamak için izlemeyi kullanın; böylece aktarım hızı sağlamanızı gün veya hafta içinde dinamik olarak ayarlama gereksinimini göz önünde bulundurabilirsiniz.

  7. Gerekli sayıda kapsayıcı ve veritabanı sağlamadığınızdan emin olmak için sağlanan ve tüketilen aktarım hızı oranınızı düzenli olarak izleyin. Sağlanan aktarım hızının biraz fazla olması iyi bir güvenlik denetimidir.

Sağlanan aktarım hızını iyileştirmeye yönelik en iyi yöntemler

Aşağıdaki adımlar, Azure Cosmos DB kullanırken çözümlerinizi yüksek oranda ölçeklenebilir ve uygun maliyetli hale getirmenize yardımcı olur.

  1. Kapsayıcılar ve veritabanları arasında sağlanan aktarım hızını önemli ölçüde aştıysanız sağlanan RU'lar ile tüketilen RU'ların karşılaştırmasını gözden geçirmeli ve iş yüklerinde ince ayar yapmalısınız.

  2. Uygulamanız için gereken ayrılmış aktarım hızı miktarını tahmin etmek için kullanılan yöntemlerden biri, uygulamanız tarafından kullanılan temsili bir Azure Cosmos DB kapsayıcısına veya veritabanına yönelik tipik işlemlerin çalıştırılmasıyla ilişkili istek birimi RU ücretini kaydetmek ve ardından her saniye gerçekleştirmeyi tahmin ettiğiniz işlem sayısını tahmin etmektir. Tipik sorguları ve bunların kullanımını da ölçüp eklediğinizden emin olun. Program aracılığıyla veya portalı kullanarak sorguların RU maliyetlerini tahmin etmeyi öğrenmek için bkz. Sorguların maliyetini iyileştirme.

  3. RU'larda işlemleri ve bunların maliyetlerini almanın bir diğer yolu da Azure İzleyici günlüklerini etkinleştirmektir. Bu da size işlemin/sürenin dökümünü ve istek ücretini verir. Azure Cosmos DB her işlem için istek ücreti sağlar, böylece her işlem ücreti yanıttan geri depolanabilir ve analiz için kullanılabilir.

  4. İş yükü gereksinimlerinizi karşılamak için sağlanan aktarım hızını esnek bir şekilde artırıp azaltabilirsiniz.

  5. Azure Cosmos DB hesabınızla ilişkilendirilmiş bölgeleri ihtiyaç duyduğunuzda ekleyip kaldırabilir ve maliyetleri denetleyebilirsiniz.

  6. Kapsayıcılarınızın mantıksal bölümleri arasında veri ve iş yüklerinin eşit dağıtımına sahip olduğunuzdan emin olun. Eşit olmayan bölüm dağıtımınız varsa bu, gereken değerden daha fazla aktarım hızı sağlamaya neden olabilir. Çarpık bir dağıtımınız olduğunu belirlerseniz, iş yükünü bölümler arasında eşit olarak yeniden dağıtmanızı veya verileri yeniden bölümlemenizi öneririz.

  7. Çok sayıda kapsayıcınız varsa ve bu kapsayıcılar SLA gerektirmiyorsa, kapsayıcı başına aktarım hızı SLA'larının uygulanmadığı durumlar için veritabanı tabanlı teklifi kullanabilirsiniz. Veritabanı düzeyinde aktarım hızı teklifine hangi Azure Cosmos DB kapsayıcılarını geçirmek istediğinizi belirlemeniz ve ardından değişiklik akışı tabanlı bir çözüm kullanarak bunları geçirmeniz gerekir.

  8. Geliştirme/test senaryoları için "Azure Cosmos DB Ücretsiz Katmanını" (bir yıl boyunca ücretsiz), Azure Cosmos DB'yi (üç bölgeye kadar) veya indirilebilir Azure Cosmos DB öykünücüsü kullanmayı göz önünde bulundurun. Test geliştirme için bu seçenekleri kullanarak maliyetlerinizi önemli ölçüde düşürebilirsiniz.

  9. İş yüküne özgü maliyet iyileştirmeleri daha da gerçekleştirebilirsiniz; örneğin, toplu iş boyutunu artırma, birden çok bölgede okuma yükünü dengeleme ve varsa verileri yinelemeyi kaldırma.

  10. Azure Cosmos DB ayrılmış kapasitesiyle üç yıl boyunca %65'e kadar önemli indirimler alabilirsiniz. Azure Cosmos DB ayrılmış kapasite modeli, zaman içinde ihtiyaç duyulan istek birimlerine yönelik ön taahhüttür. İndirimler, daha uzun bir süre boyunca ne kadar çok istek birimi kullanırsanız indiriminiz o kadar fazla olacak şekilde katmanlanır. Bu indirimler hemen uygulanır. Sağlanan değerlerinizin üzerinde kullanılan RU'lar, ayrılmış olmayan kapasite maliyetine göre ücretlendirilir. Daha fazla ayrıntı için bkz. Azure Cosmos DB ayrılmış kapasitesi). Sağlanan aktarım hızı maliyetlerinizi daha da düşürmek için ayrılmış kapasite satın almayı göz önünde bulundurun.

Sonraki adımlar

Daha sonra aşağıdaki makalelerle Azure Cosmos DB'de maliyet iyileştirme hakkında daha fazla bilgi edinebilirsiniz: