PostgreSQL uye yekubatanidza-chaiyo kunyora kuenderana marongero

Kuturikirwa kwechinyorwa kwakagadzirirwa zvakananga vadzidzi vekosi "Database". Unofarira kusimudzira munzira iyi? Tinokukoka iwe Open Day, kwatinotaura zvakadzama nezvechirongwa, maficha emhando yepamhepo, kugona uye tarisiro yebasa yakamirira vanopedza kudzidza mushure mekudzidziswa.

PostgreSQL uye yekubatanidza-chaiyo kunyora kuenderana marongero

PostgreSQL uye yekubatanidza-chaiyo kunyora kuenderana marongero
PaCompose, tinobata nedatabases zhinji, izvo zvinotipa mukana wekuziva zvakanyanya kushanda kwavo uye nekukanganisa. Sezvo isu tichidzidza kuda maficha emadhatabhesi matsva, dzimwe nguva tinotanga kufunga kuti zvingave zvakanaka sei dai maficha akafanana aripo mune mamwe maturusi akakura atave kushanda nawo kwenguva yakareba. Chimwe chezvinhu zvitsva zvandaida kuona muPostgreSQL yaive inogadziriswa kunyora kuenderana pakubatanidza pane yese cluster. Uye sezvazvinozoitika, isu tatova nazvo, uye nhasi tinoda kugovana newe ruzivo rwekuti ungashandise sei.

Nei ndichichida?

Kuti cluster inofanira kuita sei zvinoenderana nechikumbiro chako. Tora, semuenzaniso, chirongwa chekubhadhara bhiri. Iwe unozoda XNUMX% kuwirirana pane iyo cluster, saka uchafanirwa kugonesa synchronous commits kuitira kuti dhatabhesi rako rimirire shanduko dzese kuti dziitwe. Nekudaro, kana application yako iri kukurumidza kukura pasocial network, saka iwe ungangoda kukurumidza kupindura pamusoro peXNUMX% kuenderana. Kuti uite izvi, unogona kushandisa asynchronous anoita musumbu rako.

Meet compromise

Iwe unofanirwa kuita tradeoffs pakati pe data kuenderana uye kuita. PostgreSQL inoenda kure nekusagadzikana nekuti iyo yekumisikidza yekumisikidza inozofungidzirwa uye pasina zvisingatarisirwe zvinoshamisa. Zvino ngatitarisei pane zvibvumirano.

Tradeoff 1: Kuita

Kana iyo PostgreSQL cluster isingade kuenderana, inogona kumhanya asynchronously. Iyo inonyorwa inoitwa kumutungamiri weboka, uye zvigadziriso zvinozotumirwa kune zvazvinodzokorora mamilliseconds mashoma gare gare. Kana sumbu rePostgreSQL richida kuwirirana, rinofanira kumhanya zvakafanana. Iyo inonyora ichaitwa kumutungamiri weboka, iyo inotumira inovandudza kune replicas uye kumirira simbiso yekuti mumwe nemumwe anyora asati atumira simbiso kune mutengi akatanga kunyora kuti yakabudirira. Musiyano unoshanda pakati pemaitiro aya ndewekuti asynchronous nzira inoda maviri network hops, nepo synchronous nzira inoda ina.

Tradeoff 2: Kuenderana

Mhedzisiro muchiitiko chekukundikana kwemutungamiri mune idzi nzira mbiri dzichave dzakasiyana. Kana basa racho richiitwa asynchronously, zvino kana kukanganisa kwakadaro kukaitika, haasi marekodhi ose achaitwa nekudzokorora. Ingani icharasika? Zvinoenderana nekushandisa kwayo uye kugona kwekudzokorora. Kunyora kudzokorodza kunodzivirira replica kubva pakuva mutungamiri kana huwandu hweruzivo huri mairi huri 1 MB yakaderera pane yemutungamiri, kureva kuti, inosvika 1 MB yemarekodhi inogona kurasika panguva yeasynchronous operation.

Izvi hazviitike musynchronous mode. Kana mutungamiri akakundikana, zvese zvinodzokorora zvinogadziridzwa, sezvo chero chinyorwa chakasimbiswa pamutungamiri chinofanirwa kusimbiswa pane zvinyorwa. Uku kuenderana.

Synchronous maitiro ane musoro mubhadharo rekubhadhara chikumbiro uko kuenderana kune mukana wakajeka mukutengesa-kusiyana pakati pekuenderana uye kuita. Chinhu chinonyanya kukosha chekushandisa kwakadaro ndeye data inoshanda. Iye zvino funga nezvesocial network umo basa guru nderekuchengetedza kutarisa kwemushandisi nekupindura zvikumbiro nekukurumidza sezvinobvira. Muchiitiko ichi, kuita neinetiweki hops shoma uye kumirira kushoma kwekuita kuchave kwekutanga. Nekudaro, iyo tradeoff pakati pekuita uye kuenderana haisiriyo yega yaunofanirwa kufunga nezvayo.

Kutengeserana 3: Kuparara

Izvo zvakakosha kuti unzwisise mabatiro anoita cluster panguva yekutadza. Funga nezvemamiriro ezvinhu apo imwe kana dzakawanda replicas inokundikana. Kana madhiri akagadziriswa asynchronously, mutungamiri acharamba achishanda, ndiko kuti, kugamuchira uye kugadzirisa kunyora, pasina kumirira zvisipo. Kana zvidhori zvadzokera kuboka, zvinobata mutungamiri. Nekudzokorodza kwakafanana, kana replicas ikasapindura, saka mutungamiri haazove nesarudzo uye acharamba akamirira chibvumirano chekusimbisa kudzamara replica yadzokera kusumbu uye inokwanisa kugamuchira nekunyora kunyora.

Imwe yekubatanidza pane kutengeserana?

Yese application inoda rudzi rwakasiyana rwemusanganiswa wekuenderana uye kuita. Kunze kwekunge, chokwadi, iri yedu-yekubhadhara-app app, yatinofungidzira kuti inopindirana zvachose, kana yedu ingangoita ephemeral social network app. Mune zvimwe zviitiko zvese, pachave nenguva dzekuti mamwe ma operation anofanirwa kuenderana uye mamwe anofanirwa kunge asynchronous. Iwe unogona kunge usingadi kuti sisitimu imirire kusvika meseji inotumirwa kune chat yaitwa, asi kana mubhadharo ukagadziriswa mune imwechete application, ipapo uchafanira kumirira.

Ese sarudzo idzi, hongu, dzinoitwa nemugadziri wekushandisa. Kuita sarudzo dzakakodzera nezve nguva yekushandisa nzira yega yega kuchakubatsira kuwana zvakanyanya kubva muboka rako. Izvo zvakakosha kuti mugadziri anogona kushandura pakati pavo padanho reSQL yekubatanidza uye yekutengeserana.

Kuve nechokwadi chekutonga mukuita

Nekutadza, PostgreSQL inopa kuenderana. Izvi zvinodzorwa neserver parameter synchronous_commit. By default iri pachinzvimbo on, asi ine dzimwe nzira nhatu: local, remote_write kana off.

Pakuisa parameter ku off zvese synchronous commits zvinomiswa, kunyangwe pane yemuno system. Iyo yemunharaunda parameter inotsanangura nzira yesynchronous yeiyo yemuno system, asi inonyora kune replicas inoitwa asynchronously. Remote_write inotoenda mberi: inonyorera kune replicas inoitwa asynchronously, asi inodzoswa kana replica yagamuchira kunyora asi isina kuinyorera ku diski.

Nekutarisisa huwandu huripo hwesarudzo, tinosarudza maitiro uye, tichirangarira izvo on - aya marekodha anowirirana, isu tichasarudza local nokuti asynchronous anoita pamusoro petiweki, uku uchisiya emunharaunda anoita synchronous.

Zvino, isu tichakuudza nzira yekumisa izvi munguva pfupi, asi fungidzira kuti isu tamisa synchronous_commit Π² local zve server. Takashamisika kana zvichiita kuchinja parameter synchronous_commit panhunzi, uye zvakazoitika kuti hazvigoneke chete, kune nzira mbiri dzekuita izvi. Yekutanga kuseta chikamu chekubatanidza kwako sezvizvi:

SET SESSION synchronous_commit TO ON;  
// Your writes go here

Vese vanotevera vanonyora muchikamu vanobvuma kunyora kune replicas vasati vadzosera mhedzisiro yakanaka kune yakabatana mutengi. Kunze kwekunge wachinja marongero synchronous_commit zvakare. Unogona kusiya chikamu SESSION mumurairo nekuti ichave iri mumutengo wakasarudzika.

Yechipiri nzira yakanaka kana iwe uchingoda kuve nechokwadi chekuti unowana synchronous replication yechinhu chimwe chete. Mune akawanda NoSQL chizvarwa dhatabhesi pfungwa yekutengeserana haipo, asi inoita muPostgreSQL. Muchiitiko ichi unotanga kutengeserana uye wozoisa synchronous_commit Π² on usati waita yekupinda kwekutengeserana. COMMIT ichaita kutengeserana uchishandisa chero parameter kukosha synchronous_commit, iyo yakagadzwa panguva iyoyo, kunyangwe zviri nani kuseta iyo vhezheni kumusoro kuti uone kuti vamwe vanogadzira vanonzwisisa kuti anonyora haasi asynchronous.

BEGIN;  
SET LOCAL synchronous_commit TO ON;  
// Your writes go here
COMMIT;  

Zvese kutengeserana kuita zvino zvichasimbiswa sekunyorerwa kune replicas dhatabhesi risati radzosa mhinduro yakanaka kumutengi akabatana.

Kugadzira PostgreSQL

Izvi zvisati zvaitika, takafungidzira PostgreSQL system ine synchronous_commit, yakaiswa mukati local. Kuita kuti izvi zvive zvechokwadi padivi reseva, iwe unozofanirwa kuseta maviri masevha ekugadzirisa sarudzo. Imwezve parameter synchronous_standby_names ichauya pachayo kana synchronous_commit ichave iri on. Iyo inosarudza kuti ndedzipi replicas dzinokodzera kuita synchronous, uye isu tichazvimisira *, izvo zvichareva kuti replicas yese inobatanidzwa. Aya ma values ​​anowanzo gadziridzwa mukati configuration file nekuwedzera:

synchronous_commit = local  
synchronous_standby_names='*'

Nekuisa parameter synchronous_commit muchirevo local, isu tinogadzira sisitimu iyo madhisiki emunharaunda anoramba achienderana, asi network replica commits iri asynchronous nekukasira. Kunze kwekunge, hongu, isu tinosarudza kuita izvi zvibvumirano zvakafanana, sezvaratidzwa pamusoro.

Kana wanga uchitevera budiriro Gavhuna chirongwa, unogona kunge waona shanduko dzichangobva kuitika (1, 2), iyo yakabvumira vashandisi veGavhuna kuti vaedze aya ma paramita uye vatarise kuenderana kwavo.

Mamwe mazwi mashoma ...

Vhiki rapfuura, ndingadai ndakakuudza kuti hazvibviri kugadzirisa PostgreSQL zvakanaka. Ndipo apo Kurt, nhengo yeCompose platform team, akasimbirira kuti mukana wakadai uripo. Akanyaradza kuramba kwangu uye akawana mune zvinyorwa zvePostgreSQL zvinotevera:

PostgreSQL uye yekubatanidza-chaiyo kunyora kuenderana marongero

Izvi zvinogona kuchinjwa chero nguva. Maitiro echinhu chero chipi zvacho chekutengeserana anotemerwa nekumisikidza kuri kuitika panguva yekuzvipira. Naizvozvo, zvinogoneka uye zvinobatsira kune kumwe kutengeserana kuita synchronously uye kune vamwe asynchronously. Somuenzaniso, kumanikidza mumwe multistatement transaction yekugadzira inoita asynchronously kana iyo default value yeparameter yakatarisana, set SET LOCAL synchronous_commit TO OFF mukutengeserana.

Neiyi diki gadziriso kune yekumisikidza faira, isu takapa vashandisi kutonga pamusoro pekuenderana kwavo uye kuita kwavo.

Source: www.habr.com

Voeg