Często słyszę ludzi, którzy wypowiadają takie stwierdzenia, jak: „nasz serwer na serwerze MySQL zawiódł”, co sprawia wrażenie, że poświęcają jeden komputer jako serwer MySQL (myślę, że po prostu instalują system operacyjny i tylko MySQL na nim). Jako programista, a nie sysadmin, jestem przyzwyczajony do instalowania MySQL jako części stosu LAMP wraz z serwerem WWW i PHP.
Czy ktoś może mi wyjaśnić:
- po co instalować MySQL na osobnym serwerze? brzmi jak marnotrawstwo zasobów, kiedy mogę dodać cały stos lamp i dodatkowe serwery.
- jeśli baza danych znajduje się na osobnym komputerze, w jaki sposób łączą się z nią aplikacje, które muszą jej używać?
Oddzielny serwer bazy danych jest tylko częścią dobrego, skalowalnego projektu. Nie ma to znaczenia, jeśli ruch nie jest bardzo duży i naprawdę wystarczy jeden serwer.
Ale w przypadku bardziej obciążonych usług izolowanie usług od siebie jest dobrą rzeczą. Jeśli ktoś zrobi DDoSses serwerowi sieci i zmusi go do zużywania wszystkich zasobów, nie będzie to w ogóle prześladowało serwera bazy danych. W środowiskach współdzielonych prawdopodobnie więcej niż jeden serwer sieciowy korzysta z serwera bazy danych, więc jeśli serwer bazy danych zawiera dane dla 50 różnych stron internetowych, to tylko jedna strona internetowa przestaje działać z powodu DDoS jest lepsza niż usunięcie wszystkiego.
Również z punktu widzenia sysadmin bardziej jasne jest, czy istnieją dedykowane serwery o rozsądnych nazwach, takie jak „mysql-01.twojafirma.com” i „webserver-01.twojafirma.com”. Gdy otrzymują alerty, natychmiast widzą, co się dzieje, przynajmniej w sensie „OK, coś jest nie tak z bazą danych”. Wiem, że to słaby argument, ponieważ kilka nazw DNS może wskazywać na pojedynczy serwer, ale nadal.
Twoje aplikacje połączyłyby się ze zdalnym serwerem bazy danych bez problemów przez sieć. Aieeeeeee! Jak twoja przeglądarka łączy się ze zdalnym serwerem? To magia! Eee… poważniej, zamiast „localhost” po prostu podajesz adres serwera w $ programowanie_języku_wyboru i wszystko gotowe.
źródło
źródło
LAMP to stos aplikacji, ale nie wszystkie muszą być zainstalowane na tym samym hoście. Jak zauważyli inni ze względu na wydajność, bezpieczeństwo lub skalowalność, często nie są one instalowane na tym samym hoście. Można również znaleźć, że sprzęt, który jest optymalny dla jednej części architektury, może nie być dla innej.
Na przykład w bazach danych chodzi o zarządzanie pamięcią. Im szybciej mogę uzyskać informacje z dysku, tym szybciej mogę dostać je do requestera. Jeśli współużytkuję podsystem dyskowy z kilkoma innymi elementami stosu aplikacji, takimi jak serwer WWW, rywalizacja o współdzielone zasoby stad odczytu i zapisu dysków może faktycznie obniżyć moją wydajność. Ponadto podział pamięci RAM między serwer WWW i serwer bazy danych na danym hoście może nie zapewnić wystarczającej puli zasobów, aby mógł działać w najbardziej efektywny sposób, być w stanie buforować tyle informacji w pamięci RAM bez konieczności przechodzenia na dysk obraz, stronę lub zestaw wyników zapytania.
Pod względem administracyjnym należy również zwiększyć wydajność. Wyobraź sobie, że uruchamiasz swoje przedsiębiorstwo na aplikacjach open source, które wykorzystują MySQL jako wspólny backend. Czy naprawdę chcesz mieć proliferację serwerów baz danych z każdą aplikacją? Może to być koszmar DBA „OK, która aplikacja korzysta z tej DB?” Będziesz miał wiele wersji, wiele konfiguracji sprzętu / oprogramowania, wiele strategii przechowywania danych. Prawdopodobnie posiadałbyś bardzo rozproszone umiejętności administracyjne. Zamiast tego połącz instancje z jednym fizycznym sprzętem zoptymalizowanym pod kątem roli i przydziel dedykowane zasoby do zarządzania serwerem i jego danymi.
źródło
Zapytania MySQL mogą być bardzo wymagające pod względem zasobów, co może spowolnić twój serwer LAMP.
Gdy prowadzisz dużą, skomplikowaną i obszerną stronę internetową, dobrze jest rozważyć przeniesienie bazy danych na inny serwer dedykowany. W ten sposób masz dwa serwery, jeden dedykowany do sieci, a drugi do awarii bazy danych. Może to zwalniać zasoby i przyspieszać zapytania dotyczące witryny i bazy danych.
Serwer WWW musi po prostu połączyć się z adresem serwera bazy danych zamiast
localhost
wykonywać zapytania do bazy danych.źródło