2009-04-24 12 views
24

Mam aplikację internetową z LAMPĄ. Ostatnio zwiększyliśmy obciążenie i obecnie szukamy rozwiązań, które można skalować. Skalowanie apache jest dość łatwe, będziemy mieli wiele maszyn, które go obsługują i cały czas robią ruch przychodzący.Jak skalować MySQL na wielu komputerach?

Jednak każda instancja apache będzie komunikować się z MySQL i ostatecznie MySQL będzie przeciążony. Jak skalować MySQL na wielu komputerach w tej konfiguracji? Już patrzę na this, ale w szczególności potrzebujemy aktualizacji z bazy danych dostępnych natychmiast, więc nie sądzę, że replikacja jest tutaj dobrą strategią? Miejmy nadzieję, że można to zrobić przy minimalnej zmianie kodu.

PS. Mamy około 1: 1 stosunek odczytu i zapisu.

Odpowiedz

21

Istnieją tylko dwie strategie: replikacja i sharding. Replikacja często pojawia się, gdy masz mniej ruchu zapisu i odczytu, więc możesz przekierować je do wielu niewolników, przy pułapce dużej ilości ruchu replikacji z czasem i prawdopodobieństwem niespójności.

Dzięki sharding możesz odrzucić tabele bazy danych na wielu komputerach (tzw. Sharding funkcjonalny), co szczególnie utrudnia dołączanie. Jeśli to już będzie pasować, musisz także odrzucić kilka wierszy na wielu komputerach, ale to nie jest zabawne i zależy od warstwy shardingu zaimplementowanej między aplikacją a bazą danych.

Serwery zorientowane na dokumenty lub magazyny kolumn wykonują tę pracę za Ciebie, ale obecnie są zoptymalizowane pod kątem OLAP, a nie OLTP.

5

Nie możesz myśleć, że replikacja nie jest optymalną strategią, ale spójrz na tę link, która zapewnia dość prostą i bezpośrednią wskazówkę do korzystania z replikacji, aby zrównoważyć obciążenie na kilku komputerach.

+0

Link jest uszkodzony. – sunnyrjuneja

+0

Zaktualizować link –

+1

uszkodzony link .. – tesmojones

0

W zależności od mechanizmu obsługi aplikacji (tj. Sposobu obsługi transakcji PKs, transakcji i identyfikatorów insertów) można rozważyć replikację MASTER-MASTER z różnymi ustawieniami auto_increment. Może to być trudne i musi zostać dokładnie sprawdzone, ale może działać.

Ponadto w nowym MySQL 5.6 znajduje się identyfikator GTID (Global Transaction Identifier), który na ogół bardzo pomaga w utrzymaniu synchronizacji replikacji, szczególnie w tym scenariuszu.

0

Cóż ... Powodzenia w skalowaniu wszystkich tych zapisów na dużą skalę. Silnik bazy danych staje się wąskim gardłem, zbyt wiele blokad i buforów mgmt i tak dalej ...

Jedyny sposób, jaki udało mi się znaleźć, to skalowanie, sharding, niestety sharding nie jest dostarczany dla MySQL "po wyjęciu z pudełka" (jak w niektórych systemach NoSQL, takich jak Mongo). ScaleBase (zrzeczenie się: pracuję tam) to producent kompletnego rozwiązania skalującego "automatyczna maszyna oddzielająca", jeśli chcesz. ScaleBae analizuje twoje dane i strumień SQL, dzieli dane między węzły DB, polecenia tras i agregaty w czasie działania - więc nie będziesz musiał!

Powiązane problemy