Pracuję nad projektem, który ma służyć milionom użytkowników wkrótce po uruchomieniu. Baza danych jest postgres i na razie zakładam, że będą potrzebne co najmniej dwa serwery. Administrator sys (który jest dobrze zaznajomiony z systemami skalowalnymi) zasugerował wprowadzenie modułu równoważenia obciążenia między serwerami WWW i serwerami bazy danych.
Moje pytanie dotyczy różnicy między równoważeniem obciążenia a pulą połączeń. Czy w celu utrzymania wydajności powinienem patrzeć na jedno, czy drugie?
postgresql
bogeymin
źródło
źródło
Odpowiedzi:
Z PostgreSQL masz dwa różne obszary, które mogą wykonywać pule, albo w warstwie aplikacji (tj. Jdbc wbudowane w pule itp.) Lub w warstwie pośredniej, która znajduje się między aplikacją a bazami danych, np. Pgbouncer lub pgpool.
Jeśli tworzysz pule w warstwie pośredniej, takiej jak pgbouncer lub pgpool, wówczas ta warstwa może RÓWNIEŻ wykonać równoważenie obciążenia wybranych zapytań. Co więcej, podczas równoważenia obciążenia możesz zapisywać na dwa sposoby: możesz mieć jednego wzorca zapisu, który replikuje się za pomocą innych środków do czytników podrzędnych, używając narzędzia takiego jak slony lub wbudowanej replikacji strumieniowej, która pojawiła się na stronie 9.0 i powyżej, lub możesz mieć moduł równoważenia obciążenia wykonujący całe zapisywanie, tak aby przychodzące odczyty trafiały tylko jednego db, ale zapisy trafiały do każdej bazy danych, aby wszystkie były aktualizowane.
Lub jeśli jesteś zaawansowany, możesz przenieść warstwę równoważenia obciążenia w dół innej warstwy do samego postgresql za pomocą plproxy. Jest to język pl dla pgsql zaprojektowany, aby umożliwić Ci umieszczenie jednej bazy danych pg w interfejsie, w której nie ma żadnych rzeczywistych danych, a ta baza danych może następnie działać na wielu ewentualnie redundantnych dbs dla niewiarygodnej przepustowości. plpoxy jest dość skomplikowany w konfiguracji i działaniu, ale jest również dość skalowalny. Pamiętaj, że twoja aplikacja musi zostać napisana od nowa, aby ją obsługiwać, więc nie można jej wyrzucić pod żadną starą aplikację i po prostu działać.
http://slony.info/ http://wiki.postgresql.org/wiki/PL/Proxy http://pgpool.projects.postgresql.org/
źródło
Równoważenie obciążenia i pule połączeń to dwie bardzo różne rzeczy.
Pula połączeń (pochodzę ze strony Microsoftu, ale zakładam, że rzeczy są podobne) pozwala aplikacji na utrzymanie połączenia z bazą danych otwartą, aby mógł ponownie użyć jej do następnego zapytania zamiast konieczności rozłączania się i ponownego łączenia dla każdego zapytania, które należy uruchomić.
Równoważenie obciążenia pozwala mieć wiele serwerów baz danych za modułem równoważenia obciążenia, dzięki czemu można rozłożyć obciążenie na wiele serwerów zamiast jednego serwera obsługującego całą pracę.
Można używać puli połączeń z równoważeniem obciążenia, jednak należy pamiętać, że ponieważ połączenia nigdy nie zostaną zerwane, może dojść do niezrównoważonego obciążenia między dwoma serwerami bazy danych.
Jeśli pojedynczy serwer bazy danych nie jest w stanie obsłużyć obciążenia aplikacji, uzyskaj tam 3 serwery. W ten sposób możesz zrestartować jeden w razie potrzeby bez awarii aplikacji.
źródło