Veritabanları için yatay ve dikey ölçekleme arasındaki fark [kapalı]


699

Birçok NoSQL veritabanına ve SQL veritabanına rastladım. Bu veritabanlarının gücünü ve zayıflığını ölçmek için çeşitli parametreler vardır ve ölçeklenebilirlik bunlardan biridir. Bu veritabanlarını yatay ve dikey olarak ölçeklendirme arasındaki fark nedir?


2
en.wikipedia.org/wiki/Scalability - terim tüm yazılımlar / sistemler için geçerlidir
Tomasz Nurkiewicz

5
İçin spaecial dikkat Veritabanı bölüm en.wikipedia.org/wiki/Scalability#Database_scalability
user454322

Yanıtlar:


1261

Yatay ölçeklendirme , kaynak havuzunuza daha fazla makine ekleyerek ölçeklendirdiğiniz anlamına gelirken, Dikey ölçekleme mevcut bir makineye daha fazla güç (CPU, RAM) ekleyerek ölçeklendirdiğiniz anlamına gelir .

Bunu hatırlamanın kolay bir yolu, bir sunucu rafındaki bir makineyi düşünmektir, yatay yönde daha fazla makine ekler ve dikey yönde bir makineye daha fazla kaynak ekleriz .

                  Yatay Ölçekleme / Dikey Ölçeklendirme Görselleştirme

Bir veritabanı dünyasında yatay ölçekleme genellikle verilerin bölümlenmesine dayanır, yani her düğüm verilerin sadece bir bölümünü içerir, dikey ölçeklemede veriler tek bir düğümde bulunur ve ölçekleme çok çekirdekli yani yükün dağıtılmasıyla yapılır. bu makinenin CPU ve RAM kaynakları.

Yatay ölçeklendirme ile, mevcut havuza daha fazla makine ekleyerek dinamik olarak ölçeklendirmek genellikle daha kolaydır - Dikey ölçeklendirme genellikle tek bir makinenin kapasitesi ile sınırlıdır, bu kapasitenin ötesindeki ölçeklendirme genellikle duruş süresini içerir ve bir üst sınır ile birlikte gelir.

Yatay ölçeklemeye iyi örnekler Cassandra, MongoDB, Google Cloud Spanner'dır ve dikey ölçeklemeye iyi bir örnek MySQL - Amazon RDS'dir (MySQL'in bulut sürümü). Küçük makinelerden büyük makinelere geçerek dikey ölçeklendirme yapmak için kolay bir yol sağlar. Bu süreç genellikle kesinti süresini içerir.

GigaSpaces XAP , Coherence vb. Bellek İçi Veri Izgaraları , yalnızca diske bağlı olmadıkları için hem yatay hem de dikey ölçeklendirme için genellikle optimize edilir. Bölümleme yoluyla yatay ölçeklendirme ve çok çekirdekli destek yoluyla dikey ölçeklendirme.

: Benim daha önceki yayınlarında bu konuda daha fazla bilgi bulabilirsiniz ölçek çıkış Ölçek-up vs ve NoSQL Alternatifleri arkasında The Common İlkeleri


1
Listeyi biraz daha tamamlamak için Couchbase, Riak, HBase, CitrusLeaf ve Infinispan da var (daha fazlası var).
scalabl3

3
@Nati Shalom NOSQL veritabanlarının yatay olarak ölçeklenmesi mi?
Bhushan Firake

2
@BillyMoon Ben bu Mysql Galera
Sam Stoelinga

9
Burada biraz kafam karıştı ... daha fazla makine eklemek daha fazla cpu / ram eklemekle etkili bir şekilde aynıdır .. o zaman ikisi nasıl farklıdır, çünkü yeni bir makine eklediğimizde cpu ve ram ile birlikte gelirse, lütfen beni düzeltin yanılıyorum.
Subham Tripathi

8
@SubhamTripathi Burada açıklandığı gibi, dikey ölçekleme bir sunucu (veya küçük bir sunucu grubu) ile sınırlıdır ve pratik bir üst sınırı vardır (yani 512 GB RAM'in ötesine geçemezsiniz). Öte yandan yatay ölçeklendirme neredeyse süresiz olarak gerçekleşebilir.
15'te

200

Yatay ölçeklendirme ===> Binlerce minyon işi sizin için birlikte yapacak.

Dikey ölçeklendirme ===> Büyük bir hulk sizin için tüm işleri yapacak.

resim açıklamasını buraya girin


Çok iyi benzetme!
Nikita Kurtin

20

Şimdi sisteminizin eskisinden daha fazla istekle başa çıkabilmesi için kaynakları artıran ölçekleme gereksinimi ile başlayalım.

Sisteminizin yavaşladığını ve mevcut istek sayısını işleyemediğini fark ettiğinizde, sistemi ölçeklendirmeniz gerekir.

Bu size iki seçenek sunar. Ya şu anda kullandığınız sunucudaki kaynakları artırırsınız, yani RAM, CPU, GPU ve diğer kaynakların miktarını artırırsınız. Buna dikey ölçeklendirme denir.

Dikey ölçeklendirme genellikle maliyetlidir. Sistem hatasına tolerans göstermez, yani tek bir sunucuyla çalışan uygulamayı ölçekliyorsanız, bu sunucu çökerse, sisteminiz kapanacaktır. Ayrıca dikey ölçeklemede iplik miktarı aynı kalır. Dikey ölçeklendirme, işlem gerçekleştiğinde sisteminizin bir anlığına kapanmasını gerektirebilir. Sunucudaki kaynakları artırmak, yeniden başlatma ve sisteminizi durdurmayı gerektirir.

Bu soruna başka bir çözüm, sistemde mevcut sunucu miktarını artırmaktır. Bu çözüm teknoloji endüstrisinde oldukça kullanılmaktadır. Bu, sonunda her sunucudaki saniyede bir hız isteğini azaltacaktır. Sistemi ölçeklendirmeniz gerekiyorsa, başka bir sunucu eklemeniz yeterlidir. Sistemi yeniden başlatmanız gerekmez. Her sistemdeki iplik sayısı azalır ve bu da yüksek verime yol açar. İstekleri uygulama sunucusunun her birine eşit olarak ayırmak için, web sunucularına ters proxy olarak işlev görecek yük dengeleyici eklemeniz gerekir. Tüm sistem tek bir küme olarak adlandırılabilir. Sisteminizde, bunun gibi daha fazla sayıda küme gerektiren çok sayıda istek bulunabilir.

Umarım ölçeklendirmeyi sisteme tanıtmanın tüm konseptini alırsınız.


9

Bahsedilmeyen ek bir mimari vardır - manuel parçalamanın karmaşıklığı olmadan yatay ölçeklendirmeyi sağlayan SQL tabanlı veritabanı hizmetleri. Bu hizmetler arka planda parçalamayı yapar, böylece geleneksel bir SQL veritabanı çalıştırmanıza ve MongoDB veya CouchDB gibi NoSQL motorlarında olduğu gibi ölçeklendirmenize olanak tanır. Bildiğim iki hizmet PostgreSQL için EnterpriseDB ve MySQL için Xeround . Xeround'un SQL veritabanlarındaki ölçeklendirmenin neden zor olduğunu ve nasıl farklı yaptığını açıklayan derinlemesine bir yazı gördüm - bunu bir satıcı postası olduğu için bir tuz tanesi ile tedavi edin. Ayrıca Wikipedia'nın Bulut Veritabanı girişine de göz atın, SQL ve NoSQL ve servis vs self-hosted, satıcıların bir listesi ve her kombinasyon için ölçeklendirme seçeneklerinin güzel bir açıklaması var. ;)


Başka bir veri noktası olarak, Clustrix'ten başka bir satıcı gönderi gönderiyorum: clustrix.com/blog/bid/259950/scale-up-vs-scale-out
clieu

Amazon RDS'ye ne dersiniz?
Raja Nagendra Kumar

1
Bu eski bir yazı olduğunu biliyorum ... sadece bazı güncellemeler .. Xeround dükkanı kapattı. PostreSQL'in yatay ölçeklendirme seçenekleri gerçekten yatay ölçeklendirme seçenekleri değildir; bunlar yalnızca çoğaltılmış DB'ye bazı işlemler oluşturabileceğiniz DB çoğaltma seçenekleridir.
Dharmendar Kumar 'DK'

8

Evet yatay ölçeklendirme, daha fazla makine eklemek anlamına gelir, ancak aynı zamanda makinelerin kümede eşit olduğu anlamına gelir. MySQL, kopyaları kullanarak verileri okuma açısından yatay olarak ölçeklendirilebilir, ancak sunucu belleği / diski kapasitesine ulaştığında, sunucular arasında veri parçalamaya başlamanız gerekir. Bu giderek daha karmaşık hale geliyor. Çoğaltma oranları, veri değiştirme hızlarına ayak uyduramayacak kadar yavaş olduğundan, çoğaltmalarda verileri tutarlı tutmak bir sorundur.

Couchbase aynı zamanda birçok ticari yüksek kullanılabilirlikli uygulama ve oyunda ve muhtemelen kategorideki en yüksek performans sergileyen fantastik bir NoSQL Yatay Ölçekleme veritabanıdır. Verileri küme üzerinde otomatik olarak bölümlere ayırır, düğüm eklemek kolaydır ve meta donanımını, daha ucuz vm örneklerini (örneğin AWS'de Yüksek Mem yerine Yüksek Disk, Yüksek Disk makineleri) kullanabilirsiniz. Membase'den (Memcached) üretilmiştir, ancak kalıcılık ekler. Ayrıca, Couchbase durumunda, her düğüm okuma ve yazma yapabilir ve kümede sadece yük devretme çoğaltmasıyla eşittir (mySQL gibi tüm sunucular arasında tam veri kümesi çoğaltması değil).

Performans açısından mükemmel bir Cisco karşılaştırması görebilirsiniz: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server

İşte Couchbase Architecture hakkında harika bir blog yazısı: http://horicky.blogspot.com/2012/07/couchbase-architecture.html


6

Geleneksel ilişkisel veritabanları istemci / sunucu veritabanı sistemleri olarak tasarlanmıştır. Yatay olarak ölçeklendirilebilirler, ancak bunu yapma süreci karmaşık ve hata eğilimli olma eğilimindedir. NuoDB gibi NewSQL veritabanları, geleneksel RDBMS'nin SQL / ACID özelliklerini korurken yatay olarak ölçeklenmek üzere tasarlanmış bellek merkezli dağıtılmış veritabanı sistemleridir.

NuoDB hakkında daha fazla bilgi için teknik tanıtım belgelerini okuyun .


5

Oracle, db2 gibi SQL veritabanları da Paylaşılan disk kümesi aracılığıyla Yatay ölçeklendirmeyi destekler. Örneğin, Oracle RAC, IBM DB2 purescale veya Sybase ASE Cluster sürümü. Yatay ölçeklendirme sağlamak için Oracle RAC sistemine veya DB2 purescale sistemine yeni düğüm eklenebilir.

Ancak yaklaşım noSQL veritabanlarından farklıdır (mongodb, CouchDB veya IBM Cloudant gibi), veri parçalamanın Yatay ölçeklendirmenin bir parçası olmamasıdır. NoSQL veritabanlarında veriler yatay ölçeklendirme sırasında parçalanır.


1

Bir şirketiniz var ve sadece 1 işçi var ama o zaman yeni bir aday aldığınızda 1 yeni projeniz var - bu yatay ölçeklendirme. burada yeni aday yeni makineler ve proje apiğinize yeni trafik / çağrıdır.

Api / trafiğinize yönelik tüm talepleri ele alan bir IIT / NIT çalışanıyla 1 proje. Apiğinize daha fazla istek olursa, onu kovun ve yüksek bir IQ NIT / IIT adamı ile değiştirin - bu dikey ölçeklendirme.


0

Çok sayıda yük dengeleyicisi eklemek ekstra yük ve gecikme yaratır ve bu da nosql veritabanlarında yatay ölçeklendirme için dezavantajdır. İnsanların RPC'nin neden sağlam olmadığı için tavsiye edilmediğini söyledikleri soru gibi.

Gerçek bir sistemde, günümüz sistemlerinin hem çok çekirdekli hem de bulut bilişim yeteneklerini kullanmak için hem sql hem de nosql veritabanlarını kullanmamız gerektiğini düşünüyorum.

Öte yandan, oracle gibi sql veritabanları kullanılıyorsa, karmaşık işlem sorguları yüksek performansa sahiptir. NoSql, parçalama yoluyla bigdata ve yatay ölçeklenebilirlik için kullanılabilir.


0

Kabul edilen cevap, yatay ve dikey ölçeklendirmenin temel tanımında yer almaktadır. Ancak, veritabanlarının yatay ölçeklendirilmesinin yalnızca Cassandra, MongoDB, vb. herhangi bir üçüncü taraf çözümü kullanmadan.

Bunu yapan birçok şirket, özellikle SaaS merkezli şirketler biliyorum. Bu basit uygulama mantığı kullanılarak yapılır. Temel olarak bir grup kullanıcı alıp birden çok DB sunucusuna bölebilirsiniz. Örneğin, genellikle istemcileri, DB sunucusu / bağlantı dizelerini vb. Depolayacak bir "meta" veritabanı / tablonuz ve istemci / sunucu eşlemesini depolayan bir tablonuz olur.

Ardından, her istemciden eşlendikleri DB sunucusuna istekleri yönlendirin.

Bazıları bunun yatay bölümlemeye benzediğini ve "gerçek" yatay ölçeklendirmeye benzemediğini ve bazı şekillerde doğru olacağını söyleyebilir. Ancak sonuç, DB'nizi birden çok Db sunucusu üzerinde ölçeklendirmenizdir.

Yatay ölçeklemeye yönelik iki yaklaşım arasındaki tek fark, ölçeklemenin bir yaklaşımın (MongoDB vb.) DB yazılımının kendisi tarafından yapılmasıdır. Bu anlamda ölçeklemeyi "satın alıyorsunuz". Diğer yaklaşımda (RDBMS yatay ölçeklendirme için), ölçeklendirme uygulama kodu / mantığı ile oluşturulur.

Build vs Build Satın Alın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.