Veri Bölümleme Stratejileri (Azure ile Real-World Cloud Apps Oluşturma)

Tarafından Rick Anderson, Tom Dykstra

Fix It Project'i indirin veya E-kitap indirin

Azure ile Gerçek Dünya Bulut Uygulamaları Oluşturma e-kitabı, Scott Guthrie tarafından geliştirilen bir sunuyu temel alır. Bulut için web uygulamalarını başarıyla geliştirmenize yardımcı olabilecek 13 desen ve uygulama açıklanmaktadır. Seri hakkında bilgi için ilk bölüme bakın.

Daha önce, web sunucularını ekleyip kaldırarak bir bulut uygulamasının web katmanını ölçeklendirmenin ne kadar kolay olduğunu gördük. Ancak hepsi aynı veri deposuna isabet ederse uygulamanızın performans sorunu ön uçtan arka uca taşınır ve ölçeklendirmesi en zor olan veri katmanıdır. Bu bölümde, verileri birden çok ilişkisel veritabanına bölerek veya ilişkisel veritabanı depolama alanını diğer veri depolama seçenekleriyle birleştirerek veri katmanınızı nasıl ölçeklenebilir hale getirebileceğinizi inceleyeceğiz.

Bölümleme şemasının ayarlanması en iyi şekilde daha önce bahsedilen nedenden dolayı önden yapılır: Bir uygulama üretime geçtikten sonra veri depolama stratejinizi değiştirmek çok zordur. Farklı yaklaşımları çok iyi düşünüyorsanız, uygulamanızın verilerini ve veri erişim kodunu yeniden düzenlerken uygulamanızın kilitlenmesi veya uzun süre kapanması durumunda "Twitter anı" yaşamaktan kaçınabilirsiniz.

Üç Veri depolama karşılaştırması

Bölümleme stratejisine ihtiyacınız olup olmadığını ve ne olması gerektiğini belirlemek için verilerinizle ilgili üç soru göz önünde bulundurun:

  • Birim – Nihai olarak ne kadar veri depolayacaksınız? Birkaç gigabayt mı? Birkaç yüz gigabayt mı? Terabayt? Petabayt?
  • Hız – Verilerinizin büyüme hızı nedir? Çok fazla veri oluşturmayan bir iç uygulama mı? Müşterilerin içine görüntü ve video yükleyeceği bir dış uygulama mı?
  • Çeşitlilik – Ne tür verileri depolayacaksınız? İlişkisel, resimler, anahtar-değer çiftleri, sosyal grafikler?

Çok fazla hacim, hız veya çeşitliliğe sahip olacağınızı düşünüyorsanız, ne tür bir bölümleme düzeninin uygulamanızın büyüdükçe verimli ve etkili bir şekilde ölçeklendirilmesini en iyi şekilde sağlayacağını ve herhangi bir performans sorunu yaşamadığınızdan emin olmanız gerekir.

Bölümlemenin temel olarak üç yaklaşımı vardır:

  • Dikey bölümleme
  • Yatay bölümleme
  • Karma bölümleme

Dikey bölümleme

Dikey bölümleme, tabloyu sütunlara bölmeye benzer: bir sütun kümesi bir veri deposuna, başka bir sütun kümesi ise farklı bir veri deposuna gider.

Örneğin, uygulamamın resimler de dahil olmak üzere kişilerle ilgili verileri depolayanı varsayalım:

Veri tablosu

Bu verileri tablo olarak temsil ettiğinizde ve farklı veri türlerine baktığınızda, soldaki üç sütunun ilişkisel veritabanı tarafından verimli bir şekilde depolanabilen dize verilerine sahip olduğunu, sağdaki iki sütunun ise aslında görüntü dosyalarından gelen bayt dizileri olduğunu görebilirsiniz. Görüntü dosyası verilerini ilişkisel bir veritabanında depolamak mümkündür ve birçok kişi verileri dosya sistemine kaydetmek istemediği için bunu yapar. Gerekli veri birimlerini depolayabilen bir dosya sistemi olmayabilir veya ayrı bir yedekleme ve geri yükleme sistemini yönetmek istemeyebilirler. Bu yaklaşım, şirket içi veritabanları ve bulut veritabanlarındaki az miktarda veri için iyi sonuç vermektedir. Şirket içi ortamda, DBA'nın her şeyi halletmesine izin vermek daha kolay olabilir.

Ancak bir bulut veritabanında depolama nispeten pahalıdır ve yüksek hacimli görüntüler, veritabanının boyutunun verimli çalışabileceği sınırların ötesinde artmasına neden olabilir. Verileri dikey olarak bölümleyerek bu sorunları çözebilirsiniz. Bu, veri tablonuzdaki her sütun için en uygun veri depoyu seçtiğiniz anlamına gelir. Bu örnekte en iyi işe yarayabilecek şey, dize verilerini ilişkisel bir veritabanına ve görüntüleri Blob depolama alanına yerleştirmektir.

Dikey olarak bölümlenmiş veri tablosu

Görüntüleri veritabanı yerine Blob depolamada depolamak, dosya sunucularını ayarlama veya ilişkisel veritabanının dışında depolanan verilerin yedeklenmesi ve geri yüklenmesini yönetme konusunda endişelenmeniz gerekmediğinden, bulutta veritabanı yerine blob depolamada daha pratiktir. Bunların hepsi Blob depolama hizmeti tarafından sizin için otomatik olarak işlenir.

Bu, Düzelt uygulamasında uyguladığımız bölümleme yaklaşımıdır ve Blob depolama bölümünde bunun kodunu inceleyeceğiz. Bu bölümleme şeması olmadan ve ortalama görüntü boyutunun 3 megabayt olduğu varsayıldığında, Düzelt uygulaması en fazla 150 gigabayt veritabanı boyutuna erişmeden önce yaklaşık 40.000 görevi depolayabilecekti. Görüntüleri kaldırdıktan sonra veritabanı 10 kat daha fazla görev depolayabilir; yatay bölümleme şemasını uygulamayı düşünmeden önce çok daha uzun süre devam edebilirsiniz. Uygulama ölçeklendirildikçe, depolama ihtiyaçlarınızın büyük bölümü çok ucuz Blob depolama alanına girdiği için harcamalarınız daha yavaş büyür.

Yatay bölümleme (parçalama)

Yatay bölümleme, tabloyu satırlara bölmeye benzer: bir satır kümesi bir veri deposuna, başka bir satır kümesi de farklı bir veri deposuna gider.

Aynı veri kümesi göz önünde bulundurulduğunda, farklı müşteri adları aralıklarını farklı veritabanlarında depolamak da başka bir seçenek olabilir.

Yatay olarak bölümlenmiş veri tablosu

Sık erişimli noktalardan kaçınmak için verilerin eşit dağıtılmasını sağlamak için parçalama şemanıza çok dikkat etmek istiyorsunuz. Soyadının ilk harfini kullanan bu basit örnek bu gereksinimi karşılamaz, çünkü birçok kişinin belirli ortak harflerle başlayan soyadları vardır. Bazı veritabanları çok büyük olsa da çoğu küçük kalacağından tablo boyutu sınırlamalarına beklediğinizden daha erken ulaşabilirsiniz.

Yatay bölümlemenin bir alt tarafı, tüm verilerde sorgu yapmak zor olabilir. Bu örnekte, bir sorgunun uygulama tarafından depolanan tüm verileri almak için en fazla 26 farklı veritabanından çekmesi gerekir.

Karma bölümleme

Dikey ve yatay bölümlendiriciyi birleştirebilirsiniz. Örneğin, örnek verilerde görüntüleri Blob depolamada depolayabilir ve dize verilerini yatay olarak bölümleyebilirsiniz.

Veri tablosu karma bölümlenmiş

Üretim uygulamasını bölümleme

Kavramsal olarak bölümleme düzeninin nasıl çalışacağını görmek kolaydır, ancak herhangi bir bölümleme düzeni kod karmaşıklığını artırır ve ilgilenmeniz gereken birçok yeni komplikasyonu ortaya çıkarır. Görüntüleri blob depolamaya taşıyorsanız, depolama hizmeti kapatıldığında ne yaparsınız? Blob güvenliğini nasıl işlersiniz? Veritabanı ve blob depolama eşitlenmezse ne olur? Parçalama işlemini kullanıyorsanız tüm veritabanlarında sorgulamayı nasıl işleyeceksiniz?

Komplikasyonlar, üretime geçmeden önce planladığınız sürece yönetilebilir. Bunu yapmayan birçok insan daha sonra olmasını diledi. Ortalama olarak Müşteri Danışmanlık Ekibimiz (CAT) ekibimiz, uygulamaları gerçekten büyük bir şekilde kaldırılan müşterilerden ayda yaklaşık bir kez paniğe kapılıyor ve bu planlamayı yapmadılar. Ve şöyle derler: "Yardım edin! Her şeyi tek bir veri deposuna koyuyorum ve 45 gün içinde yerim tükenecek!" Veri deponuza erişme şeklinize yerleşik olarak çok sayıda iş mantığınız varsa ve uygulamanızı kullanan müşterileriniz varsa, geçiş sırasında bir gün boyunca kapanmak için iyi bir zaman yoktur. Müşterinin verilerini çalışma zamanından önce bölümlemesine yardımcı olmak için herkül çabası sarf ediyoruz. Bu çok heyecan verici ve çok korkutucu, ve eğer kaçınabilirseniz dahil olmak istediğiniz bir şey değil! Bunu daha önce düşünmek ve uygulamanızla tümleştirmek, uygulama daha sonra büyürse hayatınızı çok daha kolay hale getirir.

Özet

Etkili bir bölümleme düzeni, bulut uygulamanızın performans sorunları olmadan bulutta petabaytlar halinde veriye ölçeklendirilmesini sağlayabilir. Ayrıca, uygulamayı şirket içi veri merkezinde çalıştırıyorsanız, büyük makineler veya kapsamlı altyapı için ön ödeme yapmak zorunda değilsiniz. Bulutta ihtiyacınız olduğu kadar artımlı olarak kapasite ekleyebilirsiniz ve yalnızca kullandığınız kadar kapasite için ödeme yapabilirsiniz.

Sonraki bölümde, Düzelt uygulamasının blob depolamada görüntüleri depolayarak dikey bölümlemeyi nasıl uyguladığını göreceğiz.

Kaynaklar

Bölümleme stratejileri hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.

Belgeler:

Videolar:

  • FailSafe: Ölçeklenebilir, Dayanıklı Cloud Services Oluşturma. Ulrich Homann, Marc Mercuri ve Mark Simms'in dokuz bölümden oluşan serisi. Microsoft Müşteri Danışmanlığı Ekibi (CAT) deneyiminin gerçek müşterilerle olan hikayeleriyle üst düzey kavramları ve mimari ilkelerini çok erişilebilir ve ilginç bir şekilde sunar. Bölüm 7'deki bölümleme tartışmasını inceleyin.
  • Büyük Derleme: Windows Azure müşterilerinden alınan dersler - Bölüm I. Mark Simms, 19:49'dan başlayarak bölümleme düzenlerini, parçalama stratejilerini, parçalamanın nasıl uygulandığını ve federasyonları SQL Veritabanı açıklar. Failsafe serisine benzer ancak daha fazla nasıl yapılır ayrıntılarına gider.

Örnek kod: