Tietokantayhteyksien poolaus
Oppikaa, miten yhteyspoolit poistavat tietokantayhteyksien avaamisen kustannukset jokaisella pyynnöllä ja miten pooli mitoitetaan ja säädetään suorituskyvyn kannalta.
Tietokantayhteyksien poolaus on ilmainen Järjestelmäsuunnittelun perusteet backend-kehittäjille-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Järjestelmäsuunnittelun perusteet backend-kehittäjille-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Järjestelmäsuunnittelun perusteet backend-kehittäjille-kurssilla on yhteensä 4 oppituntia.
Yhteyden muodostamisen kustannus
Yhteyden avaaminen tietokantaan on kallista: TCP-kättely, todentaminen ja istunnon määritys voivat kestää kymmeniä millisekunteja. Jos tämä tehdään jokaisella pyynnöllä, se lisää tarpeettomasti viivettä ja kuormaa.
Mikä yhteyspooli on
Yhteyspooli ylläpitää joukkoa avoimia ja uudelleenkäyttövalmiita yhteyksiä. Pyyntö lainaa yhden, suorittaa kyselynsä ja palauttaa yhteyden pooliin – yhteyttä ei tarvitse määrittää erikseen jokaista pyyntöä varten.
- Pienempi viive
- Vähemmän kuormaa tietokannalle
- Samanaikaisten yhteyksien luontainen enimmäismäärä
Lainaaminen ja palauttaminen
Elinkaari on yksinkertainen: hankkikaa yhteys, käyttäkää sitä ja vapauttakaa se takaisin pooliin. Kriittinen sääntö on vapauttaa yhteys aina, myös virheen yhteydessä, muuten pooliin syntyy vuoto.
conn = pool.acquire()
try:
conn.execute('SELECT 1')
finally:
pool.release(conn)Poolin koon perusteet
Keskeinen säätöparametri on poolin enimmäiskoko. Jos koko on liian pieni, pyynnöt jonottavat yhteyttä; jos se on liian suuri, kuormitatte tietokantaa liiallisella samanaikaisella työllä ja kontekstinvaihdolla.
Poolin koon määrittäminen
Suurempi ei ole aina parempi. Yleinen lähtökohta on käyttää suorittimen ytimien määrään eikä pyyntöjen määrään perustuvaa nyrkkisääntöä, koska tietokanta pystyy käsittelemään vain rajallisen määrän työtä rinnakkain.
cores = 4
# A popular rule of thumb (HikariCP):
pool_size = (cores * 2) + 1
print('suggested pool size:', pool_size)Jonotus ja aikakatkaisut
Kun kaikki yhteydet ovat käytössä, uudet lainaajat joutuvat odottamaan. Asettakaa hankinnan aikakatkaisu, jotta pyyntö epäonnistuu nopeasti sen sijaan, että se jäisi poolin ehtyessä odottamaan loputtomasti. Virheen ilmoittaminen ajoissa on parempi kuin huomaamaton jumittuminen.
Yhteysvuodot
Vuoto syntyy, kun lainattua yhteyttä ei koskaan palauteta. Pooli tyhjenee vähitellen, kunnes jokainen pyyntö estyy. Vapauttakaa yhteys aina finally-lohkossa (tai käyttäkää kontekstinhallintaa / try-with-resources-rakennetta) ja ottakaa tuotannossa käyttöön vuotojen tunnistus.
with pool.acquire() as conn:
conn.execute('SELECT 1')
# released automatically on exitJoutoaika ja enimmäiskesto
Säätäkää yhteyksien käyttöikää: joutoajan aikakatkaisu sulkee yhteydet, joita pooli ei enää tarvitse, ja enimmäiskesto kierrättää vanhat yhteydet, jotta vanhentuneet socket-yhteydet ja palvelimen aikakatkaisut voidaan välttää (esimerkiksi palomuuri, joka katkaisee joutilaana olevan TCP-yhteyden).
Poolit ja horisontaalinen skaalaus
Seuratkaa laskelmaa: 20 sovelluspalvelinta, joista jokaisella on 50 yhteyden pooli, voi tarkoittaa jopa 1 000 yhteyttä yhteen tietokantaan – todennäköisesti yli sen enimmäisrajan. Mitoittakaa instanssikohtaiset poolit koko palvelinjoukon perusteella tai lisätkää yhteysvälityspalvelin.
instances = 20
per_instance = 50
print('total connections:', instances * per_instance)Ulkoiset poolinhallintapalvelut
PgBouncerin kaltaiset työkalut toimivat sovellusten ja tietokannan välissä ja multipleksoivat useita asiakasyhteyksiä muutamaan tietokantayhteyteen. Ne ovat välttämättömiä, kun käytössä on monia sovellusinstansseja tai palvelimettomia funktioita, jotka kukin avaavat yhteyksiä.
Säätäminen mittausten perusteella
Älkää arvatko. Seuratkaa poolin mittareita – aktiivisia yhteyksiä, odotusaikaa ja aikakatkaisuja – realistisella kuormalla ja säätäkää sitten kokoa ja aikakatkaisuja. Oikea poolikoko on pienin koko, jolla odotusaika pysyy lähes nollassa.
Pikatarkistus
Testatkaa, miten hyvin ymmärrätte yhteyksien poolituksen.
Kertaus
Opitte optimoimaan tietokannan käytön yhteyspoolien avulla:
- Poolit käyttävät yhteyksiä uudelleen ja välttävät jokaiseen pyyntöön liittyvät määrityskustannukset
- Mitoittakaa poolit kapasiteetin (esimerkiksi ytimien määrän), ei pyyntömäärän, perusteella
- Vapauttakaa yhteydet aina ja estäkää vuodot aikakatkaisuilla ja tunnistuksella
- Huomioikaa kaikkien instanssien yhteismäärä; käyttäkää laajassa ympäristössä PgBouncerin kaltaisia poolinhallintapalveluita
Opi Järjestelmäsuunnittelun perusteet backend-kehittäjille tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Tietokantayhteyksien poolaus” ilmainen?
Kyllä – oppitunnin ”Tietokantayhteyksien poolaus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Järjestelmäsuunnittelun perusteet backend-kehittäjille-kurssin, päivitä CoddyKit PROhon. Järjestelmäsuunnittelun perusteet backend-kehittäjille-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Tietokantayhteyksien poolaus”?
Oppikaa, miten yhteyspoolit poistavat tietokantayhteyksien avaamisen kustannukset jokaisella pyynnöllä ja miten pooli mitoitetaan ja säädetään suorituskyvyn kannalta. Harjoittelet Järjestelmäsuunnittelun perusteet backend-kehittäjille-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Järjestelmäsuunnittelun perusteet backend-kehittäjille-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Järjestelmäsuunnittelun perusteet backend-kehittäjille-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Tietokantayhteyksien poolaus”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Järjestelmäsuunnittelun perusteet backend-kehittäjille-oppitunnilla?
Kyllä. Jokainen Järjestelmäsuunnittelun perusteet backend-kehittäjille-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Viiveen ja läpimenon optimointi
- Samanaikaisuus ja rinnakkaisuus
- Suorituskykytestaus ja profilointi
- Tietokantayhteyksien poolaus