Moderne apps som mikrotjenester kræver typisk mange databaseforbindelser, de bruger og frigiver også disse forbindelser meget hurtigt. Da PostgreSQL blev udviklet for næsten 25 år siden, besluttede dets udviklere ikke at bruge tråde til nye anmodninger, men at oprette en ny proces for hver anmodning i stedet. Selvom den beslutning nok gav mening dengang, kan mange forbindelser være et alvorligt problem i dag. En af løsningerne på dette problem er en forbindelsespulje. I dette blogindlæg vil vi diskutere PgBouncer Connection Pool og hvordan man bruger det i ClusterControl 1.8.2.
Hvorfor bruge Connection Pool
Nå, det korte svar på dette spørgsmål er, at det er en enkel, men effektiv løsning til at forbedre ydeevnen af dine apps, samtidig med at den reducerer belastningen på PostgreSQL-serveren. Lad os gå lidt dybere på dette, skal vi?
En forbindelsespulje kan defineres som en cache af åbne databaseforbindelser, der kan genbruges af klienterne. Med andre ord vil det mindske belastningen på databasen ved at reducere anmodningerne på hver ny forbindelse. Disse nye forbindelser er dybest set affødt af postmaster-processen, hver gang en forbindelse etableres, hvilket normalt vil tage omkring 2 til 3 MB hukommelse pr. forbindelse.
Uden en forbindelsespulje vil dette føre til et problem, når antallet af forbindelser er for højt, da postmesteren skal sørge for en masse hukommelse. I PostgreSQL administreres forbindelsespuljen af PgBouncer.
Hvad er PgBouncer
PgBouncer er en letvægts, single-binær, open source og sandsynligvis den mest populære forbindelsespooler til PostgreSQL. PgBouncer er et simpelt værktøj, der gør præcis én ting, det sidder mellem databasen og klienterne og taler PostgreSQL-protokollen og kopierer en PostgreSQL-server. I skrivende stund er den seneste version af PgBouncer 1.15.0.
Lad os se, hvad der er nogle af de bedste funktioner, den tilbyder, og sandsynligvis grunden til, at den er så populær i PostgreSQL-verdenen:
-
Letvægt - kun én enkelt proces, alle anmodninger fra klienten og svar fra serveren passerer PgBouncer uden yderligere behandling
-
Nem opsætning – kræver ingen kodeændringer på klientsiden og en af de enkleste PostgreSQL-forbindelsespoolere at konfigurere P>
-
Skalerbarhed og ydeevne – den skalerer godt til et stort antal kunder og øger samtidig transaktionerne markant sekund, som PostgreSQL-serveren kan understøtte
Trin til opsætning af PgBouncer med ClusterControl
Der er et par trin for at du kan installere og konfigurere PgBouncer med ClusterControl. I dette afsnit vil vi gennemgå trinene, forudsat at du allerede har PostgreSQL-klyngen installeret. Hvis du ikke har klyngen endnu, kan du følge guiden i dette blogindlæg.
Fra din web-brugergrænseflade> Vælg PostgreSQL Cluster> Administrer> Load Balancer> fanen Vælg PgBouncer, og følgende skærmbillede vises. Her kan du vælge om du vil implementere eller importere PgBouncer, i dette eksempel vil vi vælge Deploy.:
Du kan vælge noden fra rullemenuen, angive porten, tilføje ' PgBouncer Admin User' samt adgangskoden og klik på 'Deploy PgBouncer'. Jobbet vil begynde at køre, og status vil begynde at blive vist på denne skærm, du kan også overvåge den på fanen 'Aktivitet'.
Efter at PgBouncer-noden er implementeret, er næste trin at oprette forbindelsespuljen. Fra din Cluster> Nodes> Vælg PgBouncer node, og følgende skærmbillede vises:
Forbindelsesskærmen vises, når du klikker på 'Opret forbindelsespulje' knap. Du kan udfylde alle oplysninger og opdatere værdien afhængigt af din opsætning, i dette eksempel vil vi bruge standardværdien for 'Pool Mode', 'Pool Size' og 'Max Database Connection':
Her skal du tilføje følgende oplysninger:
-
PgBouncer-værtsnavn:Vælg nodeværterne for at oprette forbindelsespuljen.
-
Poolnavn:Pool- og databasenavne skal være de samme.
-
Brugernavn: Vælg en bruger fra PostgreSQL-masternoden, eller opret en ny.
-
Puljetilstand:session (standard), transaktion eller pooling af kontoudtog.
-
session (standard):Serveren frigives tilbage til puljen efter klienten afbrydes
-
transaktion:Serveren frigives tilbage til puljen efter transaktionen er afsluttet
-
erklæring:Serveren frigives tilbage til puljen efter forespørgslen er afsluttet. Transaktioner, der spænder over flere udsagn, er ikke tilladt i denne tilstand
-
-
Poolstørrelse:Maksimal størrelse af pools for denne database. Standardværdien er 20.
-
Maks. databaseforbindelser:Konfigurer et maksimum for hele databasen. Standardværdien er 0, hvilket betyder ubegrænset.
Forbindelsespuljen vises, når du har klikket på knappen 'Udfør' som på skærmbilledet nedenfor, og både PgBouncer og forbindelsespuljen er nu klar:
Konklusion
Brug af forbindelsespool og PgBouncer er nogle af trinene til at forbedre din applikations ydeevne, når det kommer til høj tilgængelighed. Med ClusterControl kan du implementere PgBouncer samt oprette en forbindelsespulje nemt og hurtigt.
For at gøre det endnu bedre foreslår vi også at implementere HAProxy ud over PgBouncer. HAProxy-funktionen er tilgængelig i ClusterControl, og i skrivende stund er den version, vi bruger, 1.8.23.