Завантажуйте балансир проти об'єднання з'єднань - чи є різниця?


11

Я працюю над проектом, який, як очікується, буде обслуговувати мільйони користувачів незабаром після запуску. База даних - це постгреси, і зараз я припускаю, що потрібно буде щонайменше два сервери. Адміністратор sys (який явно добре розбирається в масштабованих системах) запропонував встановити балансир навантаження між веб-серверами та серверами баз даних.

Моє запитання стосується різниці балансування навантаження від об'єднання з'єднань. Щоб підтримувати продуктивність, я повинен дивитись на одного чи іншого, або на обох?


Вони майже однакове. pgbouncer - рекомендований пул, pgpool II має більше функцій, але є складнішим у налаштуванні.
Скотт Марлоу

Відповіді:


7

У PostgreSQL у вас є дві різні області, які можуть робити об'єднання, або на рівні програми (наприклад, jdbc, вбудований в об'єднання тощо), або в проміжному шарі, що знаходиться між додатком і db (s), наприклад pgbouncer або pgpool.

Якщо ви об'єднуєте в проміжний шар, наприклад, pgbouncer або pgpool, то цей шар може ТАКОЖ завантажувати балансування вибраних запитів. Далі, коли балансує завантаження, ви можете робити записи одним із двох способів: ви можете мати єдиний майстер запису, який реплікує за допомогою інших засобів на ваші зчитувані раби, використовуючи такий інструмент, як неохайний, або вбудовану потокову реплікацію, що з’явилася в pg 9.0 і вище, або ви можете змусити балансир навантаження виконати всі записи, так що вхідні зчитування потрапляють лише на один db, але записують удари по кожній базі даних, щоб постійно оновлювати їх.

Або якщо ви рівномірна, ви можете перемістити балансуючий шар навантаження вниз по іншому шару в самому postgresql, використовуючи plproxy. Це мова pl для pgsql, призначена для того, щоб ви могли поставити одну базу даних pg на передній частині, яка не має в ній фактичних даних, і ця база може потім працювати над декількома, можливо, зайвими dbs для неймовірної пропускної здатності. plpoxy є досить складним для налаштування та роботи, але він також досить масштабований. Зауважте, що ваша програма повинна бути переписана для її підтримки, щоб її не можна було перекинути під будь-яку стару програму та просто працювати.

http://slony.info/ http://wiki.postgresql.org/wiki/PL/Proxy http://pgpool.projects.postgresql.org/


3

Балансування навантаження та об'єднання з'єднань - це дві дуже різні речі.

Об'єднання об'єднань (я приїжджаю зі світу Майкрософт, але я вважаю, що подібні речі) дозволяє додатку зберігати з'єднання з базою даних відкритим, щоб він міг повторно використовувати його для наступного запиту замість того, щоб відключатись і знову підключатися для кожного запиту, який потрібно виконати.

Балансування навантаження дозволяє вам мати декілька серверів баз даних за балансиром навантаження, щоб ви могли розподілити навантаження на декілька серверів, а не на одному сервері, який виконує всю роботу.

Ви можете використовувати об'єднання з'єднань з балансуванням навантаження, проте майте на увазі, що оскільки з'єднання ніколи не припиняться, у вас може виникнути незбалансоване навантаження між двома серверами баз даних.

Якщо один сервер бази даних не може впоратися з завантаженням програми, то поверніть туди 3 сервери. Таким чином, ви можете перезавантажити її за потребою, не забиваючи додаток.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.