PostgreSQL ug mga setting sa pagkamakanunayon sa pagsulat nga espesipiko sa koneksyon

Ang paghubad sa artikulo espesipikong giandam alang sa mga estudyante sa kurso "Database". Interesado sa pagpalambo niini nga direksyon? Gidapit ka namo sa Bukas nga Adlaw, diin naghisgot kami sa detalye bahin sa programa, mga bahin sa online nga format, mga kahanas ug mga palaaboton sa karera nga naghulat sa mga gradwado pagkahuman sa pagbansay.

PostgreSQL ug mga setting sa pagkamakanunayon sa pagsulat nga espesipiko sa koneksyon

PostgreSQL ug mga setting sa pagkamakanunayon sa pagsulat nga espesipiko sa koneksyon
Sa Compose, nag-atubang kami sa daghang mga database, nga naghatag kanamo og higayon nga mahimong mas pamilyar sa ilang mga gamit ug mga kakulangan. Samtang nagkat-on kami sa paghigugma sa mga bahin sa bag-ong mga database, usahay magsugod kami sa paghunahuna kung unsa ka nindot kung ang parehas nga mga bahin naa sa mas hamtong nga mga himan nga among gitrabahoan sa dugay nga panahon. Usa sa mga bag-ong bahin nga gusto nakong makita sa PostgreSQL mao ang ma-configure nga pagkamakanunayon sa pagsulat kada koneksyon sa tibuok cluster. Ug ingon nga kini nahimo, naa na kami niini, ug karon gusto namon nga ipaambit kanimo ang kasayuran kung giunsa nimo kini magamit.

Nganong gikinahanglan ko kini?

Kung giunsa ang paggawi sa cluster nagdepende sa imong aplikasyon. Tagda, pananglitan, ang usa ka app sa pagbayad sa bill. Kinahanglan nimo ang XNUMX% nga pagkamakanunayon sa tibuuk nga cluster, mao nga kinahanglan nimo nga i-enable ang mga synchronous commits aron ang imong database maghulat alang sa tanan nga mga pagbag-o nga mahimo. Bisan pa, kung ang imong aplikasyon usa ka paspas nga nagtubo nga social network, nan tingali gusto nimo ang paspas nga pagtubag sa XNUMX% nga pagkamakanunayon. Aron makab-ot kini, mahimo nimong gamiton ang mga asynchronous commit sa imong cluster.

Himamata ang pagkompromiso

Kinahanglan nimo nga maghimo mga pagbag-o tali sa pagkamakanunayon sa datos ug pasundayag. Ang PostgreSQL nagpalayo gikan sa pagkamakanunayon tungod kay ang default nga pag-configure mahimong matag-an ug wala’y wala damha nga mga sorpresa. Karon atong tan-awon ang mga kompromiso.

Tradeoff 1: Pagganap

Kung ang cluster sa PostgreSQL wala magkinahanglan og pagkamakanunayon, mahimo kining modagan nga asynchronously. Ang pagsulat gihimo sa lider sa cluster, ug ang mga update ipadala sa mga replika niini pipila ka milliseconds sa ulahi. Kung ang usa ka cluster sa PostgreSQL nanginahanglan pagkamakanunayon, kinahanglan kini nga dungan nga modagan. Ang pagsulat himuon sa lider sa cluster, nga magpadala ug update sa mga replika ug maghulat sa kumpirmasyon nga gisulat sa matag usa sa wala pa ipadala ang kumpirmasyon sa kliyente nga nagsugod sa pagsulat nga kini malampuson. Ang praktikal nga kalainan tali niini nga mga pamaagi mao nga ang asynchronous nga pamaagi nagkinahanglan og duha ka network hops, samtang ang synchronous nga pamaagi nagkinahanglan og upat.

Tradeoff 2: Pagkamakanunayon

Ang resulta sa higayon nga ang usa ka lider mapakyas niining duha ka mga pamaagi magkalahi usab. Kung ang trabaho gihimo nga asynchronously, nan kung ang ingon nga sayup mahitabo, dili tanan nga mga rekord mahimo sa mga replika. Pila ang mawala? Nagdepende sa aplikasyon mismo ug sa kahusayan sa pagkopya. Ang pag-compose nga replikasyon magpugong sa usa ka replika nga mahimong lider kung ang kantidad sa kasayuran nga naa niini 1 MB nga mas ubos kaysa sa lider, nga mao, hangtod sa 1 MB nga mga rekord mahimo’g mawala sa panahon sa asynchronous nga operasyon.

Dili kini mahitabo sa synchronous mode. Kung mapakyas ang lider, ang tanan nga mga replika ma-update, tungod kay ang bisan unsang sinulat nga gikumpirma sa lider kinahanglan nga makumpirma sa mga replika. Kini mao ang pagkamakanunayon.

Ang dungan nga pamatasan adunay kahulugan sa usa ka aplikasyon sa pagsingil diin ang pagkamakanunayon adunay klaro nga bentaha sa trade-off tali sa pagkamakanunayon ug pasundayag. Ang labing hinungdanon nga butang alang sa ingon nga aplikasyon mao ang balido nga datos. Karon hunahunaa ang usa ka social network diin ang panguna nga buluhaton mao ang pagpadayon sa atensyon sa tiggamit pinaagi sa pagtubag sa mga hangyo sa labing madali. Sa kini nga kaso, ang pasundayag nga adunay gamay nga network hops ug gamay nga paghulat alang sa mga commit mahimong usa ka prayoridad. Bisan pa, ang tradeoff tali sa pasundayag ug pagkamakanunayon dili lamang ang kinahanglan nimong hunahunaon.

Trade-off 3: Pag-crash

Importante kaayo nga masabtan kung giunsa ang paglihok sa usa ka cluster sa panahon sa kapakyasan. Hunahunaa ang usa ka sitwasyon diin ang usa o daghan pang mga replika napakyas. Kung ang mga commit giproseso nga asynchronously, ang lider magpadayon sa paglihok, nga mao, pagdawat ug pagproseso sa pagsulat, nga wala maghulat sa nawala nga mga replika. Sa dihang ang mga replika mobalik sa pungpong, ilang giapas ang lider. Uban sa synchronous replication, kung ang mga replika dili motubag, nan ang lider walay kapilian ug magpadayon sa paghulat alang sa commit confirmation hangtud nga ang replica mobalik sa cluster ug makadawat ug makahimo sa pagsulat.

Usa ka koneksyon matag transaksyon?

Ang matag aplikasyon nanginahanglan usa ka lainlaing klase sa kombinasyon sa pagkamakanunayon ug pasundayag. Gawas kon, siyempre, kini ang among bill-paying app, nga among gihunahuna nga hingpit nga makanunayon, o ang among hapit ephemeral nga social networking app. Sa tanan nga uban nga mga kaso, adunay mga panahon nga ang pipila nga mga operasyon kinahanglan nga magkadungan ug ang uban kinahanglan nga asynchronous. Mahimong dili nimo gusto nga ang sistema maghulat hangtod ang usa ka mensahe nga gipadala sa chat nahimo, apan kung ang usa ka bayad giproseso sa parehas nga aplikasyon, kinahanglan ka maghulat.

Ang tanan niini nga mga desisyon, siyempre, gihimo sa developer sa aplikasyon. Ang paghimo sa husto nga mga desisyon kung kanus-a gamiton ang matag pamaagi makatabang kanimo nga makuha ang labing kaayo sa imong cluster. Importante nga ang developer makahimo sa pagbalhin tali kanila sa lebel sa SQL alang sa mga koneksyon ug alang sa mga transaksyon.

Pagsiguro sa pagkontrol sa praktis

Sa kasagaran, ang PostgreSQL naghatag og pagkamakanunayon. Gikontrol kini sa parameter sa server synchronous_commit. Sa kasagaran kini anaa sa posisyon on, apan aduna kini laing tulo ka kapilian: local, remote_write o off.

Kung gitakda ang parameter sa off ang tanan nga mga synchronous commit gipahunong, bisan sa lokal nga sistema. Ang lokal nga parametro nagtino sa synchronous mode alang sa lokal nga sistema, apan ang pagsulat sa mga replika gihimo nga asynchronously. Remote_write moadto pa: ang pagsulat sa mga replika gihimo nga asynchronous, apan gibalik kung gidawat sa replika ang pagsulat apan wala kini gisulat sa disk.

Pinaagi sa pagkonsiderar sa magamit nga lainlaing mga kapilian, gipili namon ang usa ka pamatasan ug, hinumdoman kana on - kini mga dungan nga pagrekord, among pilion local alang sa asynchronous commits sa network, samtang gibiyaan ang local commits nga dungan.

Karon, sultihan ka namo kung unsaon pag-set up kini sa makadiyot, apan hunahunaa nga among gi-set up synchronous_commit Π² local para sa server. Naghunahuna kami kung posible ba nga usbon ang parameter synchronous_commit sa langaw, ug kini nahimo nga kini dili lamang posible, adunay bisan duha ka mga paagi sa pagbuhat niini. Ang una mao ang pagtakda sa sesyon sa imong koneksyon ingon sa mosunod:

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

Ang tanan nga nagsunod nga pagsulat sa sesyon moila sa mga sinulat sa mga replika sa dili pa ibalik ang positibo nga resulta sa konektado nga kliyente. Gawas lang kung usbon nimo ang setting synchronous_commit pag-usab. Mahimo nimong laktawan ang bahin SESSION sa sugo tungod kay kini anaa sa default nga bili.

Ang ikaduha nga pamaagi maayo kung gusto nimo nga masiguro nga makakuha ka dungan nga pagkopya alang sa usa ka transaksyon. Sa daghang mga database sa henerasyon sa NoSQL ang konsepto sa mga transaksyon wala maglungtad, apan kini anaa sa PostgreSQL. Sa kini nga kaso magsugod ka sa usa ka transaksyon ug dayon itakda synchronous_commit Π² on sa wala pa ipatuman ang entry alang sa transaksyon. COMMIT itugyan ang transaksyon gamit ang bisan unsang parameter value synchronous_commit, nga gitakda sa panahon, bisan kung labing maayo nga ibutang ang variable sa unahan aron masiguro nga ang ubang mga developer nakasabut nga ang mga pagsulat dili asynchronous.

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

Ang tanan nga mga nahimo sa transaksyon makumpirma karon ingon nga gisulat sa mga replika sa wala pa ang database magbalik usa ka positibo nga tubag sa konektado nga kliyente.

Pag-set up sa PostgreSQL

Sa wala pa kini, nahunahuna namon ang usa ka sistema sa PostgreSQL nga adunay synchronous_commit, gibutang sa local. Aron mahimo kini nga realistiko sa bahin sa server, kinahanglan nimo nga magtakda og duha nga kapilian sa pag-configure sa server. Usa pa ka parameter synchronous_standby_names moabut sa iyang kaugalingon sa diha nga synchronous_commit mosulod on. Gitino niini kung unsang mga replika ang angayan alang sa mga dungan nga pag-commit, ug among itakda kini *, nga nagpasabut nga ang tanan nga mga replika naapil. Kini nga mga kantidad kasagarang gi-configure sa configuration file pinaagi sa pagdugang:

synchronous_commit = local  
synchronous_standby_names='*'

Pinaagi sa pagbutang sa parameter synchronous_commit ngadto sa kahulogan local, naghimo kami og sistema diin ang mga lokal nga disk nagpabilin nga magkadungan, apan ang mga replica sa network nga gihimo kay asynchronous sa default. Gawas lang kung, siyempre, magdesisyon kami nga himuon kini nga mga commit nga magkadungan, sama sa gipakita sa ibabaw.

Kung gisunod nimo ang pag-uswag Proyekto sa gobernador, tingali namatikdan nimo ang pipila ka bag-ong mga pagbag-o (1, 2), nga nagtugot sa mga tiggamit sa Gobernador sa pagsulay niini nga mga parameter ug pagmonitor sa ilang pagkamakanunayon.

Pipila pa ka mga pulong...

Usa lang ka semana ang milabay, gisultihan ko ikaw nga imposible nga maayo ang pag-ayo sa PostgreSQL. Sa diha nga si Kurt, usa ka miyembro sa Compose platform team, miinsistir nga adunay ingon nga oportunidad. Gipakalma niya ang akong mga pagsupak ug nakit-an sa dokumentasyon sa PostgreSQL ang mosunod:

PostgreSQL ug mga setting sa pagkamakanunayon sa pagsulat nga espesipiko sa koneksyon

Kini nga setting mahimong usbon bisan unsang orasa. Ang pamatasan alang sa bisan unsang transaksyon gitino pinaagi sa setting nga adunay epekto sa panahon sa pagpasalig. Busa, kini mao ang posible ug mapuslanon alang sa pipila ka mga transaksyon sa pagbuhat sa synchronously ug alang sa uban asynchronously. Pananglitan, sa pagpugos sa usa multistatement transaksyon commit asynchronously sa diha nga ang default nga bili mao ang kaatbang, set SET LOCAL synchronous_commit TO OFF sa usa ka transaksyon.

Uban niining gamay nga pagbag-o sa configuration file, gihatagan namo ang mga tiggamit og kontrol sa ilang pagkamakanunayon ug performance.

Source: www.habr.com

Idugang sa usa ka comment