Różnica między skalowaniem poziomym i pionowym dla baz danych

Natknąłem się na wiele baz danych NoSQL i SQL. Istnieją różne parametry do pomiaru siły i słabości tych baz danych, a skalowalność jest jednym z nich. Jaka jest różnica między skalowaniem poziomym i pionowym tych baz danych?

Author: London guy, 2012-07-29

9 answers

Skalowanie poziome oznacza skalowanie przez dodanie większej liczby maszyn do puli zasobów, podczas gdy skalowanie pionowe oznacza skalowanie przez dodanie większej mocy (CPU, pamięci RAM) do istniejącej maszyny.

Łatwym sposobem na zapamiętanie tego jest myślenie o maszynie na szafie serwerowej, dodajemy więcej maszyn w poprzek w poziomie i dodajemy więcej zasobów do maszyny W Kierunku w pionie.

                  Wizualizacja Skalowania Poziomego/Pionowego

W świecie baz danych skalowanie poziome jest często oparte na partycjonowaniu danych, tzn. każdy węzeł zawiera tylko część danych, w pionie-skalowanie danych znajduje się na pojedynczym węźle, a skalowanie odbywa się poprzez wielordzeniowe, tzn. rozłożenie obciążenia między CPU a zasobami pamięci RAM tej maszyny.

Przy skalowaniu poziomym często łatwiej jest skalować dynamicznie, dodając więcej maszyn do istniejącej puli - skalowanie pionowe jest często ograniczone do pojemność pojedynczej maszyny, przekraczanie tej pojemności często wiąże się z przestojami i wiąże się z górną granicą.

Dobrym przykładem skalowania poziomego są Cassandra, MongoDB, Google Cloud Spanner .. dobrym przykładem skalowania pionowego jest MySQL-Amazon RDS (chmurowa wersja MySQL). Zapewnia łatwy sposób skalowania w pionie poprzez przełączanie z małych na większe maszyny. Proces ten często wiąże się z przestojami.

Sieci danych w pamięci, takie jak GigaSpaces XAP, koherencja itd.. są często zoptymalizowane zarówno do skalowania poziomego, jak i pionowego, ponieważ nie są związane z dyskiem. Skalowanie poziome poprzez partycjonowanie i pionowe poprzez obsługę wielu rdzeni.

Możesz przeczytać więcej na ten temat w moich wcześniejszych postach: Scale-out vs Scale-up i wspólne zasady stojące za alternatywami NOSQL

 828
Author: Nati Shalom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-05 09:57:44

Skalowalność pozioma to zdolność do zwiększania pojemności poprzez łączenie wielu jednostek sprzętowych lub programowych, tak aby działały one jako jedna jednostka logiczna.

Gdy serwery są klastrowane, oryginalny serwer jest skalowany poziomo. Jeśli klaster wymaga więcej zasobów, aby poprawić wydajność i zapewnić wysoką dostępność (HA), administrator może skalować, dodając więcej serwerów do klastra.

Ważną zaletą skalowalności poziomej jest to, że może zapewnij administratorom możliwość zwiększania pojemności w locie. Kolejną zaletą jest to, że w teorii skalowalność pozioma jest ograniczona tylko przez to, ile podmiotów można z powodzeniem połączyć. Na przykład rozproszony system pamięci masowej Cassandra działa w oparciu o setki węzłów towarowych rozmieszczonych w różnych centrach danych. Ponieważ sprzęt towarowy jest skalowany poziomo, Cassandra jest odporna na błędy i nie ma pojedynczego punktu awarii (SPoF).

Pionowe z drugiej strony skalowalność zwiększa pojemność, dodając do maszyny więcej zasobów, takich jak więcej pamięci lub dodatkowy procesor. Skalowanie w pionie, które jest również nazywane skalowaniem w górę, zwykle wymaga przestojów podczas dodawania nowych zasobów i ma limity zdefiniowane przez sprzęt. Gdy klienci Amazon RDS muszą na przykład skalować w pionie, mogą przełączyć się z mniejszego na większy komputer, ale największa instancja Amazon RDS ma tylko 68 GB pamięci.

Skalowanie poziomo ma zarówno zalety, jak i wady. Na przykład dodanie niedrogich komputerów towarowych do klastra może wydawać się opłacalnym rozwiązaniem na pierwszy rzut oka, ale ważne jest, aby administrator wiedział, czy koszty licencji dla tych dodatkowych serwerów, dodatkowe koszty operacji zasilania i chłodzenia oraz duże rozmiary, które zajmą w centrum danych, naprawdę sprawiają, że skalowanie poziome jest lepszym Wyborem niż skalowanie pionowe.

 31
Author: seriy23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-01 10:53:05

Istnieje dodatkowa Architektura, o której nie wspomniano - usługi bazodanowe oparte na SQL, które umożliwiają skalowanie poziome bez złożoności ręcznego odłamywania. Usługi te wykonują sharding w tle, dzięki czemu umożliwiają uruchamianie tradycyjnej bazy danych SQL i skalowanie się tak, jak w przypadku silników NoSQL, takich jak MongoDB lub CouchDB. Dwie usługi, które znam to EnterpriseDBdla PostgreSQL i Xeround dla MySQL. Widziałem w głębi post przez Xeround co wyjaśnia, dlaczego skalowanie na bazach danych SQL jest trudne i jak robią to inaczej-traktuj to z przymrużeniem oka, ponieważ jest to post sprzedawcy. Sprawdź również wpis w bazie danych w chmurze Wikipedii, jest ładne Wyjaśnienie SQL vs. NoSQL i service vs. self-hosted, lista dostawców i opcje skalowania dla każdej kombinacji. ;)

 8
Author: Dina Kaiser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-10 09:52:20

Tak skalowanie poziomo oznacza dodawanie większej liczby maszyn, ale oznacza również, że maszyny są równe w klastrze. MySQL może skalować się poziomo pod względem odczytu danych, poprzez użycie replik, ale gdy osiągnie pojemność mem/dysku serwera, musisz rozpocząć dzielenie danych między serwerami. Staje się to coraz bardziej złożone. Często utrzymywanie spójności danych w replikach jest problemem, ponieważ tempo replikacji jest często zbyt wolne, aby nadążyć za szybkością zmiany danych.

Couchbase to również fantastyczna baza skalowania poziomego NoSQL, używana w wielu komercyjnych aplikacjach i grach o wysokiej dostępności i prawdopodobnie najwyższa wydajność w tej kategorii. Partycjonuje dane automatycznie w całym klastrze, dodawanie węzłów jest proste i można używać sprzętu towarowego, tańszych instancji maszyn wirtualnych(na przykład dużych zamiast wysokich Mem, wysokich maszyn dyskowych w AWS). Jest zbudowany z Membase (Memcached), ale dodaje trwałości. Ponadto, w przypadku Couchbase, każdy node może odczytywać i zapisywać, i są równe w klastrze, tylko z replikacją awaryjną (Nie pełną replikacją zestawu danych na wszystkich serwerach, jak w mySQL).

Pod względem wydajności, można zobaczyć doskonały benchmark Cisco: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server

Oto świetny wpis na blogu o architekturze Couchbase: http://horicky.blogspot.com/2012/07/couchbase-architecture.html

 7
Author: scalabl3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 06:39:47

Tradycyjne relacyjne bazy danych, gdzie zaprojektowane jako systemy baz danych klient / serwer. Można je skalować poziomo, ale proces ten jest złożony i podatny na błędy. Bazy danych NewSQL likeNuoDB są rozproszonymi systemami bazodanowymi zorientowanymi na pamięć, zaprojektowanymi do skalowania poziomo przy zachowaniu właściwości SQL/ACID tradycyjnych RDBMS.

Aby uzyskać więcej informacji na temat NuoDB, przeczytaj ich dokumentację techniczną pod adresem http://goo.gl/uzLIWB .

 6
Author: Michael Waclawiczek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-14 12:03:58

Zacznijmy od potrzeby skalowania, które Zwiększa zasoby, aby Twój system mógł teraz obsłużyć więcej żądań niż wcześniej.

Kiedy zdasz sobie sprawę , że Twój system robi się powolny i nie jest w stanie obsłużyć bieżącej liczby żądań, musisz skalować system .

Zapewnia to dwie opcje, albo zwiększasz zasoby na serwerze, z którego obecnie korzystasz, tj. zwiększasz ilość pamięci ram, procesora, gpu i innych zasobów .To jest znany jako skalowanie pionowe .

Skalowanie pionowe jest zazwyczaj kosztowne . Nie czyni to systemu odpornym na błędy, tzn. jeśli skalujesz aplikację działającą z jednym serwerem, jeśli ten serwer ulegnie awarii, system ulegnie awarii . Również ilość wątków pozostaje taka sama w skalowaniu pionowym . Skalowanie pionowe może wymagać, aby system został na chwilę wyłączony, gdy proces ma miejsce . Zwiększenie zasobów na serwerze wymaga ponownego uruchomienia i wyłączenia systemu .

Innym rozwiązaniem tego problemu jest zwiększenie ilości serwerów obecnych w systemie . Rozwiązanie to jest szeroko stosowane w przemyśle technologicznym . To ostatecznie zmniejszy liczbę żądań na sekundę na każdym serwerze . Jeśli chcesz skalować system, po prostu dodaj inny serwer i gotowe . Nie musisz ponownie uruchamiać systemu . Zmniejsza się liczba wątków w każdym systemie, co prowadzi do wysokiej przepustowości . Segregować wnioski, jednakowo do każdego z wniosków serwer, musisz dodać load balancer, który będzie działał jako odwrotne proxy do serwerów internetowych . Cały ten system można nazwać pojedynczym klastrem . Twój system może zawierać dużą liczbę żądań, które wymagałyby większej liczby klastrów, takich jak ten .

Mam nadzieję, że otrzymasz całą koncepcję wprowadzenia skalowania do systemu

 6
Author: yathartha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-13 07:41:05

Bazy danych SQL, takie jak Oracle, db2, również obsługują skalowanie poziome poprzez współdzielony klaster dysków. Na przykład Oracle RAC, IBM DB2 purescale lub Sybase ASE Cluster edition. Nowy węzeł można dodać do systemu Oracle RAC lub systemu DB2 purescale w celu uzyskania skalowania poziomego.

Ale podejście różni się od baz danych noSQL (takich jak mongodb, CouchDB lub IBM Cloudant) tym, że sharding danych nie jest częścią skalowania poziomego. W bazach noSQL dane są dzielone podczas poziomego skalowanie.

 5
Author: Debasish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-09 10:09:39

Wszystkie inne odpowiedzi wydają się już całkiem kompletne, ale nie widziałem Google Cloud Spanner jako przykład relacyjnej bazy danych ze skalowaniem poziomym, dlatego dodaję mój mały wkład.

 3
Author: Erickson Filipe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-04 11:03:06

Dodanie wielu równoważników obciążenia powoduje dodatkowe obciążenie i opóźnienia, co jest wadą skalowania poziomego w bazach danych nosql. To jest jak pytanie, dlaczego ludzie mówią, że RPC nie jest zalecane, ponieważ nie jest solidny.

Myślę, że w prawdziwym systemie powinniśmy używać zarówno baz danych sql, jak i nosql, aby wykorzystać zarówno wielordzeniowe, jak i chmurowe możliwości dzisiejszych systemów.

Z drugiej strony złożone zapytania transakcyjne mają wysoką wydajność, jeśli bazy danych sql, takie jak oracle jest używany. NoSql może być używany do skalowania bigdata i horizontal poprzez sharding.

 0
Author: farshad-nsh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 11:51:19