Модерните приложения като микросервизи обикновено изискват много връзки към базата данни, те също използват и освобождават тези връзки много бързо. Когато PostgreSQL беше разработен преди почти 25 години, неговите разработчици решиха да не използват нишки за нови заявки, а вместо това да създадат нов процес за всяка заявка. Въпреки че това решение вероятно е имало смисъл тогава, много връзки могат да бъдат сериозен проблем днес. Едно от решенията на този проблем е пул за връзки. В тази публикация в блога ще обсъдим PgBouncer Connection Pool и как да го използвате в ClusterControl 1.8.2.
Защо да използвате пул за връзки
Е, краткият отговор на този въпрос е, че това е просто, но ефективно решение за подобряване на производителността на вашите приложения, като в същото време намалява натоварването на сървъра на PostgreSQL. Нека отидем малко по-задълбочено, нали?
Пулът за връзки може да бъде дефиниран като кеш на отворени връзки към база данни, който може да се използва повторно от клиентите. С други думи, това ще смекчи натоварването на базата данни, като намали заявките при всяка нова връзка. Тези нови връзки основно се създават от процеса на администратора всеки път, когато се установи връзка, която обикновено отнема около 2 до 3 MB памет на връзка.
Без пул за връзки това ще доведе до проблем всеки път, когато броят на връзките е твърде голям, тъй като администраторът на пощата трябва да осигури много памет. В PostgreSQL пулът за връзки се управлява от PgBouncer.
Какво е PgBouncer
PgBouncer е лек, еднодвоичен, с отворен код и вероятно най-популярният пул за връзки за PostgreSQL. PgBouncer е проста помощна програма, която прави точно едно нещо, тя седи между базата данни и клиентите и говори по протокола PostgreSQL, копирайки PostgreSQL сървър. Към момента на писане най-новата версия на PgBouncer е 1.15.0.
Нека видим кои са някои от най-добрите функции, които предлага, и вероятно причината, поради която е толкова популярен в света на PostgreSQL:
-
Леко – само един процес, всички заявки от клиента и отговори от сървъра през PgBouncer без никакви допълнителни обработка
-
Лесна настройка – не изисква промени в кода от страна на клиента и един от най-простите PostgreSQL пулери за свързване за настройка
-
Мащабируемост и производителност – мащабира се добре за голям брой клиенти и в същото време значително увеличава транзакциите в секунда, които PostgreSQL сървърът може да поддържа
Стъпки за настройка на PgBouncer с ClusterControl
Има няколко стъпки, за да инсталирате и конфигурирате PgBouncer с ClusterControl. В този раздел ще преминем през стъпките, при условие че вече имате разгърнат PostgreSQL клъстер. Ако все още нямате клъстера, можете да следвате ръководството в тази публикация в блога.
От вашия уеб потребителски интерфейс> Изберете PostgreSQL Cluster> Manage> Load Balancer> Изберете раздела PgBouncer и ще се появи следната екранна снимка. Тук можете да изберете дали да разположите или импортирате PgBouncer, в този пример ние ще изберем Deploy.:
Можете да изберете възела от падащото меню, да посочите порта, да добавите ' PgBouncer Admin User“, както и паролата и щракнете върху „Deploy PgBouncer“. Заданието ще започне да се изпълнява и състоянието ще започне да се показва на този екран, можете също да го наблюдавате в раздела „Дейност“.
След като възелът PgBouncer бъде успешно разгърнат, следващата стъпка е да създадете пула за връзки. От вашия Cluster> Nodes> Изберете възел PgBouncer и ще се появи следната екранна снимка:
Екранът за връзка ще се появи, след като щракнете върху „Създаване на пул за връзки“ бутон. Можете да попълните цялата информация и да актуализирате стойността в зависимост от вашата настройка, за този пример ще използваме стойността по подразбиране за „Режим на басейна“, „Размер на басейна“ и „Макс. връзка с база данни“:
Тук ще трябва да добавите следната информация:
-
Име на хост PgBouncer:Изберете хостовете на възела, за да създадете пула за връзки.
-
Име на пул:Имената на пула и базата данни трябва да са еднакви.
-
Потребителско име: Изберете потребител от главния възел на PostgreSQL или създайте нов.
-
Режим на пул:сесия (по подразбиране), обединяване на транзакции или изрази.
-
сесия (по подразбиране):Сървърът се освобождава обратно към пула, след като клиентът прекъсне връзката
-
транзакция:Сървърът се освобождава обратно в пула след приключване на транзакцията
Инструкция -
:Сървърът се освобождава обратно в пула след приключване на заявката. Транзакциите, обхващащи множество оператори, са забранени в този режим
-
-
Размер на пул:максимален размер на пуловете за тази база данни. Стойността по подразбиране е 20.
-
Максимален брой връзки към базата данни:Конфигурирайте максимум за цялата база данни. Стойността по подразбиране е 0, което означава неограничено.
Пулът за връзки ще се появи, след като щракнете върху бутона „Край“, както е показано на екранната снимка по-долу и PgBouncer и пулът за връзки вече са готови:
Заключение
Използването на пул за връзки и PgBouncer са някои от стъпките за подобряване на производителността на вашето приложение, когато става въпрос за висока наличност. С ClusterControl можете да разположите PgBouncer, както и да създадете пул за връзки лесно и бързо.
За да го направим още по-добър, предлагаме също да разположите HAProxy в допълнение към PgBouncer. Функцията HAProxy е налична в ClusterControl и към момента на писане използваната от нас версия е 1.8.23.