From inevitable overprovisioning to the “on-demand” tax: why DynamoDB is bloody hard to cost-control Son zamanlarda Potansiyel ScyllaDB müşterilerinin DynamoDB'yi çalıştırmanın gerçek maliyetini anlamalarına yardımcı olmak için belirli bir amaca sahip. Şimdi, geri adım atarsanız ve hedefime bakarsanız, bu çok mantıklı değil, değil mi? DynamoDB Maliyet Hesaplayıcısı Ama sonra, DynamoDB maliyet hesaplamalarının iç işlevlerini yıkmaya başladım. O zaman, takımların DynamoDB'yi ölçekte çalıştırmak için yüz binlerce (evet milyonlarca) dolar ödemeye başladıkları için birçok neden olduğunu fark ettim. Bulduğum en önemli şey: DynamoDB kabul etmek kolaydır, ancak maliyetleri kontrol etmek kanlıdır. İş arkadaşım Guilherme ve ben , ama izlemek için zamanınız yoksa, önemli bulguları keşfetmek için okumaya devam edin. Bu linkte bir webinar hazırladım İlk yaygın yanlış anlaşılma, DynamoDB'nin sizi ne için ücretlendirdiği tam olarak. muhtemelen Okuma Kapasitesi Birimleri ve Yazma Kapasitesi Birimleri gibi terimler duymuşsunuzdur ve okuma ve yazma sayısı açısından "Ne için kullandığınızı ödeyeceksiniz" kelimesini alırsınız. DynamoDB yazılımları pahalı... Eğer bakarsanız , bir okuma isteği ünitesinin (RRU) milyonun başına $0.125 maliyeti olduğunu ve bir yazma isteği ünitesinin (WRU) milyonun başına $0.625 maliyeti olduğunu göreceksiniz. Yani, yazılar okuduğundan 5 kat daha pahalıdır. Tam teknik nedenini bilmiyorum, ancak yazma yolunun daha ağır olması (durabilite, tutarlılık, endeksleme vb.) ve belki de bazı headroom ile ilgisi vardır. 5x veri tabanları için keskin tarafta ve bir maliyet bakış açısından ilk tuzaklardan biri gibi görünüyor. İsteğe bağlı kapasite fiyatları Konusunu Oylayın.: Diğer Modu Adından da anlaşılacağı gibi, bu, ne kadar kullanacağınızı belirleyebileceğiniz anlamına gelir (eğer kullanmazsanız bile) ve umarım biraz daha az ödeyeceksiniz. Ancak oranını kontrol edelim. Bir Okuma Kapasitesi Birimi (RCU) RCU başına $0.00013 maliyeti ve bir Yazma Kapasitesi Birimi (WCU) maliyeti $0.00065 maliyeti, bu yüzden yazılar okumalarından şaşırtıcı derecede 5 kat daha pahalıdır. Öngörülen kapasite İhtiyaçlarınızı ödemiyorsunuz, fiyatları ödemiyorsunuz... İşte yakalama: Önerilen kapasite birimleri saniyede değil, isteğe bağlı olarak milyonda ölçülür. Bu başlangıçta beni heyecanlandırdı. Neden sadece taleplerin toplam sayısını sağlayamıyorsunuz? Ama AWS bakış açısıyla, iş mantığı mükemmel. Saniyede N işlemleri, bu kapasiteyi kullanırsanız veya kullanmazsanız. İşleme yeteneği Bu nedenle, trafiğiniz patladıysa veya isteğinizi atlatmaktan kaçınmak için provizyon yapıyorsanız (biraz daha fazlasını bu konuda), esasen boş kapasite için ödüyorsunuz. Basitçe söylemek gerekirse, sadece zaman zaman ihtiyacınız olsa bile sürdürülebilir kapasite satın alıyorsunuz. Rezervasyon kapasitesi... İşte anlaşma: Kapasiteyi rezerve ederseniz, umarım biraz daha sonra tasarruf etmek için büyük bir ön bahis yapıyorsunuz. Temel kullanımınızdan emin iseniz, AWS, EC2 veya RDS gibi DynamoDB kapasitesini ayırma seçeneğini sunar. 1 veya 3 yıl önceden ödenen bir taahhüt, saniyede sabit bir okuma ve yazma oranı ile kilitlenir. Bir gotcha: kısmi ön seçenek yok; tam ödeme veya uzaklaşmak. Fiyat modelleri karşılaştırmak için basit bir kullanım durumuna bakalım... Çalışma yükünüzün bir saatte ortalama 10.000 okuma / s ve 10.000 yazma / s olduğunu söyleyin. On Demand Fiyatları: Yazılar: $22.50 / saat ... 10,000 * 3600 * 0.625 / 1M Okunma: $ 4.50 / saat ... 10,000 * 3600 * 0.125 / 1M (5x daha ucuz yazıyor, her zamanki gibi) Ödeme ücreti (sınırlı olmayan) : Yazılar: $6.50 / saat ... 10,000 * $0.00065 Okunma: $1.30 / saat ... 10,000 * $0.00013 1 Yıllık Rezervasyon: Yazılı: ~ $ 2.99 / saat Okumalar: ~$0.59 / saat “Hey, rezervasyon matematik nerede?” seni duyuyorum. 100 WCU ($0.0128/saat) ve RCU ($0.0025/saat) için rezervasyon fiyatını alırsınız, bir ayda 730 saat ile bölünür, bir yılda 12 ay ile bölünür, 100 üniteyle tekrar bölünür, gerekli oranıyla çoğaltırsınız... sonra yuvarlayın, biraz ağlayın ve “matematik bayan” memeye yerleştirin. Benim noktam şu: Provisioned ~3.4x isteğe göre daha ucuz Rezervasyon ~7.5x on-demand'den daha ucuz İsteğe bağlı, aşırı ödemeyi seven veya tahmin etmeyi nefret eden insanlar için BDP ile, için : AWS on-demand önerileri Zamanla gelişen trafik modelleri Spiky veya batchy iş yükü Düşük kullanım oranı (süreye düşme veya %30'ın altında düşme) En azından ScyllaDB müşterileri için. evet, trafiğiniz bir ders kitabı sinyal dalgası gibi görünmüyorsa ve kristal bir topunuz yoksa, bu esneklik için bir prim ödemeyi bekleyin. Ürünün büyüklüğü değil ama... Burada başka bir tuzak var. Gerçek uygulama verilerini kullanmadığınız sürece vuramayacağınız bir tuzak... Bu noktada hemen görmezden gelmekten pişman olacaksınız. DynamoDB'de, sadece işlem başına ödeme yapmazsınız; aktarılan verilerin parçası başına ödeme yaparsınız. Writes 1KB (Write Request Units veya WRUs) başına hesaplanır. 4KB (Read Request Units veya RRUs) Yani 1.1KB öğesini yazarsanız, bu 2 WRU'dur. 3KB öğesini yazın? Hala 3 WRU's, her 1KB (veya bir kısmı) sayılır. Okuyucular aynı şekilde çalışır, sadece 4KB sınırlarında. 1KB öğesini okuyor musunuz? 1 RRU. 4.1KB öğesini okuyor musunuz? Bu 2 RRU'dur. Bu sınırlar için güçlü teknik nedenler olduğundan emin değilim. Burada tuzağı görebilirsiniz. Bunu bir okumaya kıyasla bir yazının 5x maliyeti ile birleştirin ve işler çabuk çirkinleşebilir, özellikle öğenin boyutu bu sınırları fark etmeden geçiyorsa. Şemada sabit bir öğe boyutu varsa muhtemelen iyi, ancak ScyllaDB'de gördüğümüz kullanım durumlarının türleriyle kesinlikle iyi değil. Örneğin, müşteriler JSON veya blob alanlarını yerleştirmiş olabilirler ve bu kullanımla daralabilir veya büyüyebilir. Ve unutmayın, gerçek öğenin boyutu, sadece mantıksal şemanın boyutu değil. Sürdürülebilir, çünkü yapmanız gereken... Başka bir acı noktası ve AWS'in kendi hesaplayıcısının sapık bir eksikliği, ödenmiş kapasite kullanıldığında aşırı ödenmenin gerekliliğidir.Kendinizi aşırı ödenmeye zorlarsınız - istemediğiniz için değil, çünkü DynamoDB sizi cezalandırıyor. Öngörülen kapasiteyi aşarsanız, Bu tür bir istisna mesajının netliğini seviyorum. aslında ne yaptığını sevmiyorum, ancak: isteğin çarpması. Kullanılmamış okuma ve yazma kapasitesini korur.Ama bunun ötesinde, uygulamanız başarısız olur. Ücretsiz Ücretsiz Ücretsiz 300s Kapasite Kapasitesi Penceresi Öyleyse, bunun önüne geçmenin en iyi yolu aşırı emekliliktir. Ne kadar? Bu “özel” cevabı garanti eder. Ama iş yükünüzün türüne bağlıdır. Bu işlevselliği hesap makinemize ekledik, böylece iş yükünüzün ek maliyetlerine katkıda bulunmak için dinamik olarak yüzde bir aşırı emeklilik yapabilirsiniz. Açıkçası, bu maliyetler hızlı bir şekilde katlanabilir, çünkü pratikte, zor durumda çalışıyorsanız bile zirve için ödeme yapıyorsunuz. Yeterince yüksek kapasite sağlamıyorsanız, zirveleriniz en kötü zamanlarda müşteriye karşı başarısızlık yapmanıza neden olabilir. Taşınmadan önce... Burada tekrarlayan bir tema varsa, bu: DynamoDB'nin fiyatlandırması özünde yanlış değildir. Ne kullandığınız için ödersiniz. Ancak, mükemmel, öngörülebilir bir sinyal dalgası gibi görünmeyen herhangi bir çalışma yükü için acımasızdır. Ne olursa olsun: 5x yazma maliyet çoğaltıcı 7.5x on-demand maliyet çoğaltıcı Opaque Per-Second Provisional Fiyatları Cezalandırıcı yuvarlama ve öğenin boyutlarının yapay sınırları Ya da sadece zirve yükü sırasında yüz dikiminden kaçınmak için aşırı beslenme ihtiyacı Sürekli maliyet patlamalarının önünde kalmak için mimarlığınızı ikinci kez tahmin etmek zorundasınız. İronik olarak, DynamoDB “serversiz” ve “tamamen yönetilebilir” olarak etiketlendi, ancak kapasite matematiklerini, hataları, arcane fiyat seviyelerini ve sonsuz geçiş egzersizlerini yönetmeye başlarsınız. DynamoDB için müşterilerimizin sayfa tahminlerini (ve AWS Cost Explorer ihracatlarını) gözlemledikten sonra, büyük ölçekli sistemleri işleten olgun ekipler bile maliyetin ne olduğunu bilmezler... çok geç olana kadar. Bu nedenle, sadece ortalamalar değil, gerçek iş yüklerini modellemeyen bir hesap makinesi oluşturduk, çünkü maliyetleri düzeltmek için ilk adım nereden geldiğini anlamaktır. içinde , Trafik modelleri, öğe boyutları, önbellekleri ve çoklu bölge topolojilerinin gerçek etkisini göstermek için DynamoDB'den ScyllaDB'ye geçiş yapan müşterilerin gerçek dünyadaki örneklerini izliyorum. at için . Sonraki YazıSonraki Blog Önceden atlayın ve kendi iş yüklerinizi model edin Çıkış Tarihi.scylladb.com Yeni maliyet hesaplayıcımızla kendi DynamoDB iş yüklerinizi model edin Tim Koopmans Hakkında Tim, son birkaç on yıl boyunca güvenilirlik ve güvenlik için bir eğilimle tüm mühendislik formları üzerinde çalışmıştır. 2013'te dağıtılmış bir performans test platformu olan Flood IO'yu kurdu. satın alındıktan sonra, diğer performansla ilgili girişimlere geçmeden önce ürünü, işini ve ekibini genişletmeyi sevdi.