Perbedaan antara penskalaan secara horizontal dan vertikal untuk basis data [tertutup]

698

Saya telah menemukan banyak basis data NoSQL dan basis data SQL. Ada berbagai parameter untuk mengukur kekuatan dan kelemahan dari database ini dan skalabilitas adalah salah satunya. Apa perbedaan antara penskalaan basis data secara horizontal dan vertikal ini?

Pria London
sumber
2
en.wikipedia.org/wiki/Scalability - istilah ini berlaku untuk semua perangkat lunak / sistem
Tomasz Nurkiewicz
5
Perhatikan spaecial ke database bagian en.wikipedia.org/wiki/Scalability#Database_scalability
user454322
2
stackoverflow.com/questions/5401992/…
Ciro Santilli 郝海东 冠状 病 六四 事件 事件 法轮功

Jawaban:

1259

Penskalaan horizontal berarti Anda menskala dengan menambahkan lebih banyak mesin ke kumpulan sumber daya Anda sedangkan penskalaan vertikal berarti Anda menskala dengan menambahkan lebih banyak daya (CPU, RAM) ke mesin yang ada .

Cara mudah untuk mengingat ini adalah dengan memikirkan mesin di rak server, kami menambahkan lebih banyak mesin di arah horizontal dan menambahkan lebih banyak sumber daya ke mesin di arah vertikal .

                  Visualisasi Skala Horizontal / Skala Vertikal

Dalam dunia basis data, penskalaan horizontal sering didasarkan pada pemartisian data, yaitu setiap node hanya berisi bagian dari data, dalam penskalaan vertikal data berada pada satu node dan penskalaan dilakukan melalui multi-core yaitu menyebarkan beban antara sumber daya CPU dan RAM mesin itu.

Dengan penskalaan horizontal seringkali lebih mudah untuk menskalakan secara dinamis dengan menambahkan lebih banyak mesin ke dalam kumpulan yang ada - penskalaan vertikal sering terbatas pada kapasitas satu mesin, penskalaan di luar kapasitas sering melibatkan waktu henti dan datang dengan batas atas.

Contoh penskalaan horizontal yang bagus adalah Cassandra, MongoDB, Google Cloud Spanner .. dan contoh penskalaan vertikal yang baik adalah MySQL - Amazon RDS (Versi cloud MySQL). Ini memberikan cara mudah untuk skala secara vertikal dengan beralih dari mesin kecil ke mesin yang lebih besar. Proses ini sering melibatkan downtime.

In-Memory Data Grids seperti GigaSpaces XAP , Coherence dll. Sering dioptimalkan untuk penskalaan horizontal dan vertikal hanya karena mereka tidak terikat pada disk. Penskalaan horizontal melalui pemartisian dan penskalaan vertikal melalui dukungan multi-inti.

Anda dapat membaca lebih lanjut tentang hal ini di posting saya sebelumnya: Scale-out vs Scale-up dan The Common Principles Behind the NOSQL Alternatives

Nati Shalom
sumber
1
Ada juga Couchbase, Riak, HBase, CitrusLeaf dan Infinispan untuk melengkapi daftar sedikit lebih jauh (ada lebih banyak).
scalabl3
3
@Nati Shalom Apakah ini skala basis data NOSQL secara horizontal?
Bhushan Firake
2
@BillyMoon Saya pernah mendengar ini mungkin terjadi dengan Mysql Galera
Sam Stoelinga
9
saya agak bingung di sini ... menambahkan lebih banyak mesin secara efektif sama dengan menambahkan lebih banyak cpu / ram .. lalu bagaimana keduanya berbeda karena ketika kami menambahkan mesin baru ia datang dengan cpu dan ram, perbaiki saya jika saya saya salah.
Subham Tripathi
8
@ SubhamTripathi Seperti yang dijelaskan di sini, penskalaan vertikal terbatas pada satu server (atau sekelompok kecil server) dan memiliki batas atas praktis (artinya Anda tidak dapat melampaui mengatakan RAM 512 GB). Penskalaan horisontal di sisi lain praktis bisa terjadi tanpa batas.
asgs
200

Penskalaan secara horizontal ===> Ribuan antek akan melakukan pekerjaan bersama untuk Anda.

Scaling secara vertikal ===> Satu hulk besar akan melakukan semua pekerjaan untuk Anda.

masukkan deskripsi gambar di sini

Sankarganesh Eswaran
sumber
Analogi yang sangat bagus!
Nikita Kurtin
20

Mari kita mulai dengan kebutuhan penskalaan yang meningkatkan sumber daya sehingga sistem Anda sekarang dapat menangani lebih banyak permintaan daripada sebelumnya.

Ketika Anda menyadari sistem Anda semakin lambat dan tidak dapat menangani jumlah permintaan saat ini, Anda perlu mengukur sistem.

Ini memberi Anda dua opsi. Entah Anda meningkatkan sumber daya di server yang Anda gunakan saat ini, yaitu, meningkatkan jumlah RAM, CPU, GPU dan sumber daya lainnya. Ini dikenal sebagai penskalaan vertikal.

Penskalaan vertikal biasanya mahal. Itu tidak membuat kesalahan sistem toleran, yaitu jika Anda scaling aplikasi yang berjalan dengan server tunggal, jika server itu turun, sistem Anda akan turun. Juga jumlah utas tetap sama dalam penskalaan vertikal. Penskalaan vertikal mungkin mengharuskan sistem Anda untuk sesaat ketika proses berlangsung. Meningkatkan sumber daya di server memerlukan restart dan meletakkan sistem Anda.

Solusi lain untuk masalah ini adalah meningkatkan jumlah server yang ada dalam sistem. Solusi ini sangat digunakan dalam industri teknologi. Ini pada akhirnya akan mengurangi tingkat permintaan per detik di setiap server. Jika Anda perlu skala sistem, tambahkan saja server lain, dan Anda selesai. Anda tidak diharuskan me-restart sistem. Jumlah utas di setiap sistem menurun yang mengarah ke throughput tinggi. Untuk memisahkan permintaan, sama untuk masing-masing server aplikasi, Anda perlu menambahkan load balancer yang akan bertindak sebagai proxy terbalik ke server web. Seluruh sistem ini dapat disebut sebagai satu cluster. Sistem Anda mungkin berisi sejumlah besar permintaan yang akan membutuhkan lebih banyak cluster seperti ini.

Semoga Anda mendapatkan seluruh konsep memperkenalkan penskalaan ke sistem.

yathartha
sumber
9

Ada arsitektur tambahan yang tidak disebutkan - layanan database berbasis SQL yang memungkinkan penskalaan horizontal tanpa kerumitan sharding manual. Layanan ini melakukan sharding di latar belakang, sehingga mereka memungkinkan Anda untuk menjalankan database SQL tradisional dan skala seperti yang Anda lakukan dengan mesin NoSQL seperti MongoDB atau CouchDB. Dua layanan yang saya kenal adalah EnterpriseDB untuk PostgreSQL dan Xeround untuk MySQL. Saya melihat posting mendalam oleh Xeround yang menjelaskan mengapa peningkatan skala pada database SQL sulit dan bagaimana mereka melakukannya secara berbeda - perlakukan ini dengan sebutir garam karena merupakan posting vendor. Lihat juga entri Cloud Database Wikipedia, ada penjelasan yang bagus tentang SQL vs NoSQL dan layanan vs. host-sendiri, daftar vendor dan opsi penskalaan untuk setiap kombinasi. ;)

Dina Kaiser
sumber
Sebagai titik data lain, saya mengirimkan posting vendor lain dari Clustrix: clustrix.com/blog/bid/259950/scale-up-vs-scale-out
clieu
Bagaimana dengan Amazon RDS?
Raja Nagendra Kumar
1
Saya tahu ini adalah posting lama ... hanya beberapa pembaruan .. Xeround telah menutup toko. Opsi penskalaan horizontal PostreSQL bukanlah opsi penskalaan horizontal - itu hanyalah opsi replikasi DB tempat Anda dapat memunculkan beberapa operasi ke DB yang direplikasi.
Dharmendar Kumar 'DK'
8

Ya, penskalaan secara horizontal berarti menambahkan lebih banyak mesin, tetapi itu juga menyiratkan bahwa mesin-mesin itu sama di cluster. MySQL dapat mengukur secara horizontal dalam hal membaca data, melalui penggunaan replika, tetapi begitu mencapai kapasitas mem / disk server, Anda harus mulai membagikan data lintas server. Ini menjadi semakin kompleks. Seringkali menjaga data konsisten di seluruh replika adalah masalah karena tingkat replikasi seringkali terlalu lambat untuk mengimbangi tingkat perubahan data.

Couchbase juga merupakan basis data NoSQL Horizontal Scaling yang fantastis, digunakan dalam banyak aplikasi dan permainan ketersediaan tinggi komersial dan bisa dibilang berkinerja terbaik dalam kategori ini. Ini partisi data secara otomatis di seluruh cluster, menambahkan node sederhana, dan Anda dapat menggunakan perangkat keras komoditas, contoh vm lebih murah (menggunakan Large bukannya High Mem, mesin High Disk di AWS misalnya). Itu dibangun dari Membase (Memcached) tetapi menambahkan kegigihan. Juga, dalam kasus Couchbase, setiap node dapat melakukan membaca dan menulis, dan sama dengan di cluster, dengan hanya replikasi failover (bukan replikasi dataset lengkap di semua server seperti di mySQL).

Dari segi kinerja, Anda dapat melihat tolok ukur Cisco yang sangat baik: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server

Berikut ini adalah posting blog yang bagus tentang Arsitektur Couchbase: http://horicky.blogspot.com/2012/07/couchbase-architecture.html

scalabl3
sumber
6

Database relasional tradisional dirancang sebagai sistem basis data klien / server. Mereka dapat diskalakan secara horizontal tetapi proses untuk melakukannya cenderung rumit dan rentan kesalahan. Basis data NewSQL seperti NuoDB adalah sistem basis data terdistribusi-sentris yang dirancang untuk memperkecil secara horizontal sambil mempertahankan properti SQL / ACID dari RDBMS tradisional.

Untuk informasi lebih lanjut tentang NuoDB, baca buku putih teknis mereka .

Michael Waclawiczek
sumber
5

Database SQL seperti Oracle, db2 juga mendukung penskalaan Horizontal melalui cluster disk Bersama. Misalnya Oracle RAC, IBM DB2 purescale atau Sybase ASE Cluster edition. Node baru dapat ditambahkan ke sistem Oracle RAC atau sistem purescale DB2 untuk mencapai penskalaan horizontal.

Tetapi pendekatannya berbeda dari database noSQL (seperti mongodb, CouchDB atau IBM Cloudant) adalah bahwa data sharding bukan bagian dari penskalaan Horizontal. Dalam database noSQL, data di-shrad selama scaling horizontal.

Debasish
sumber
1

Anda memiliki perusahaan dan hanya ada 1 pekerja tetapi Anda mendapat 1 proyek baru saat itu Anda merekrut kandidat baru - ini adalah penskalaan horizontal. di mana kandidat baru adalah mesin baru dan proyek adalah lalu lintas baru / panggilan ke api Anda.

Dimana 1 proyek dengan IIT / NIT yang menangani semua permintaan untuk api / lalu lintas Anda. Jika ada waktu lebih banyak permintaan ke api Anda kemudian memecatnya dan menggantinya dengan orang NIT / IIT IQ tinggi - ini adalah penskalaan vertikal.

Jithin Kumar S
sumber
0

Menambahkan banyak penyeimbang beban menciptakan overhead dan latensi tambahan dan itu adalah kelemahan untuk scaling keluar secara horizontal dalam database nosql. Ini seperti pertanyaan mengapa orang mengatakan RPC tidak direkomendasikan karena tidak kuat.

Saya pikir dalam sistem nyata kita harus menggunakan database sql dan nosql untuk memanfaatkan kemampuan multicore dan cloud computing dari sistem saat ini.

Di sisi lain, pertanyaan transaksional yang kompleks memiliki kinerja tinggi jika database sql seperti oracle digunakan. NoSql dapat digunakan untuk bigdata dan skalabilitas horizontal dengan sharding.

farshad-nsh
sumber
0

Jawaban yang diterima tepat pada definisi dasar skala horizontal vs vertikal. Tetapi tidak seperti kepercayaan umum bahwa penskalaan horizontal dari basis data hanya dimungkinkan dengan Cassandra, MongoDB, dll. Saya ingin menambahkan bahwa penskalaan horizontal juga sangat mungkin dilakukan dengan RDMS tradisional; itu juga tanpa menggunakan solusi pihak ketiga.

Saya tahu banyak perusahaan, khususnya perusahaan berbasis SaaS yang melakukan ini. Ini dilakukan dengan menggunakan logika aplikasi sederhana. Anda pada dasarnya mengambil satu set pengguna dan membaginya di beberapa server DB. Jadi misalnya, Anda biasanya memiliki database / tabel "meta" yang akan menyimpan klien, string server DB / koneksi, dll dan tabel yang menyimpan pemetaan klien / server.

Kemudian cukup arahkan permintaan dari setiap klien ke server DB yang dipetakan.

Sekarang beberapa orang mungkin mengatakan ini mirip dengan partisi horisontal dan bukan "benar" skala horisontal dan mereka akan benar dalam beberapa hal. Tetapi hasil akhirnya adalah bahwa Anda telah meningkatkan DB Anda di beberapa server Db.

Satu-satunya perbedaan antara dua pendekatan untuk penskalaan horizontal adalah bahwa satu pendekatan (MongoDB, dll) penskalaan dilakukan oleh perangkat lunak DB itu sendiri. Dalam arti itu Anda "membeli" penskalaan. Dalam pendekatan lain (untuk RDBMS penskalaan horizontal), penskalaan dibangun oleh kode aplikasi / logika.

Beli vs Bangun

Dharmendar Kumar 'DK'
sumber