PostgreSQL sy fifandraisana manokana momba ny fanoratana tsy miovaova

Ny fandikana ny lahatsoratra dia nomanina manokana ho an'ny mpianatry ny taranja "Database". Liana amin'ny fampandrosoana amin'io lalana io? Manasa anao izahay Andro misokatra, izay miresaka amin'ny antsipiriany momba ny programa, ny endri-javatra amin'ny endrika an-tserasera, ny fahaiza-manao ary ny fahatsinjovana asa miandry ireo nahazo diplaoma taorian'ny fiofanana.

PostgreSQL sy fifandraisana manokana momba ny fanoratana tsy miovaova

PostgreSQL sy fifandraisana manokana momba ny fanoratana tsy miovaova
Ao amin'ny Compose, miatrika angon-drakitra maro izahay, izay manome antsika fahafahana hahafantatra bebe kokoa ny asany sy ny lesoka. Rehefa mianatra mitia ny endrik'ireo angon-drakitra vaovao isika, indraindray dia manomboka mieritreritra hoe tena tsara raha toa ka misy endri-javatra mitovy amin'izany ao amin'ireo fitaovana matotra kokoa niara-niasa taminay hatry ny ela. Ny iray amin'ireo endri-javatra vaovao tiako hojerena ao amin'ny PostgreSQL dia ny fifanarahan'ny fanoratana isaky ny fifandraisana manerana ny cluster manontolo. Ary raha ny fantatra dia efa manana izany izahay, ary androany izahay dia te-hizara aminareo ny fomba fampiasana azy.

Nahoana aho no mila izany?

Ny fomba tokony hitondran'ny cluster dia miankina amin'ny fampiharanao. Raiso, ohatra, ny fampiharana fandoavana faktiora. Mila fitoniana XNUMX% manerana ny cluster ianao, noho izany dia tsy maintsy mamela ny commit synchronous ianao mba hiandry ny fanovana rehetra ataonao. Na izany aza, raha tambajotra sosialy mitombo haingana ny fampiharanao, dia mety ho tianao ny valiny haingana noho ny tsy miovaova XNUMX%. Mba hahatratrarana izany dia azonao atao ny mampiasa commit asynchronous ao amin'ny cluster anao.

Mihaona marimaritra iraisana

Tsy maintsy manao fifampiraharahana eo amin'ny fitovian'ny angona sy ny fampisehoana ianao. Ny PostgreSQL dia miala amin'ny tsy fitovian-kevitra satria azo vinavinaina sy tsy ampoizina tsy ampoizina ny config default. Andeha hojerentsika ny marimaritra iraisana.

Fifanakalozana 1: Fampisehoana

Raha tsy mitaky firindrana ny kluster PostgreSQL, dia afaka mandeha tsy mifanaraka. Ny fanoratana dia natao ho an'ny mpitarika cluster, ary ny fanavaozana dia halefa any amin'ny dika mitovy aminy iray milisegondra vitsivitsy. Rehefa mila fitoniana ny kluster PostgreSQL dia tsy maintsy mandeha miaraka. Ny fanoratana dia hatao amin'ny mpitarika cluster, izay handefa fanavaozana ho an'ny kopia ary miandry ny fanamafisana fa samy nanoratra ny tsirairay alohan'ny handefasana fanamafisana amin'ny mpanjifa izay nanomboka ny fanoratana fa nahomby. Ny maha samy hafa azo ampiharina eo amin'ireo fomba fiasa ireo dia ny fomba asynchronous dia mitaky tambajotra roa hop, raha ny synchronous fomba dia mitaky efatra.

Tradeoff 2: Fifanarahana

Hafa ihany koa ny vokatra raha sendra tsy fahombiazana ny mpitarika amin'ireo fomba roa ireo. Raha toa ka atao asynchronous ny asa, dia raha misy hadisoana toy izany, tsy ny rakitra rehetra no ataon'ny replicas. Ohatrinona no ho very? Miankina amin'ny fampiharana azy sy ny fahombiazan'ny replication. Ny dika mitovy amin'ny compose dia hanakana ny dika iray tsy ho mpitarika raha toa ka latsaka 1 MB ny habetsaky ny fampahalalana ao anatiny raha oharina amin'ny an'ny mpitarika, izany hoe, mety ho very hatramin'ny 1 MB ny rakitra mandritra ny fandidiana asynchronous.

Tsy mitranga amin'ny fomba synchronous izany. Raha tsy mahomby ny mpitarika, dia havaozina ny dika mitovy rehetra, satria tsy maintsy voamarina ao amin'ny dika mitovy ny soratra rehetra voamarina amin'ny mpitarika. Izany no tsy miovaova.

Ny fitondran-tena synchronous dia misy dikany amin'ny fampiharana faktiora izay manana tombony mazava amin'ny fifampiraharahana eo amin'ny tsy miovaova sy ny fahombiazan'ny tsy miovaova. Ny zava-dehibe indrindra amin'ny fampiharana toy izany dia angon-drakitra manan-kery. Eritrereto izao ny tambajotra sosialy iray izay ny tena asa dia ny mitazona ny sain'ny mpampiasa amin'ny alΓ lan'ny famaliana haingana ny fangatahana. Amin'ity tranga ity, ho laharam-pahamehana ny fampandehanana miaraka amin'ny hop amin'ny tambajotra ary kely kokoa ny fiandrasana commit. Na izany aza, ny fifampiraharahana eo amin'ny fampisehoana sy ny tsy fitoviana dia tsy ny hany tokony hoeritreretinao.

Fifamoivoizana 3: fianjerana

Tena zava-dehibe ny mahatakatra ny fomba fitondran'ny cluster mandritra ny tsy fahombiazana. Diniho ny toe-javatra iray izay tsy nahomby ny kopia iray na maromaro. Rehefa karakaraina asynchronous ny commit, dia hanohy hiasa ny mpitarika, izany hoe manaiky sy manoratra, tsy miandry kopia tsy hita. Rehefa miverina any amin'ny cluster ny kopia dia tratrany ny mpitarika. Miaraka amin'ny replication synchronous, raha tsy mamaly ny dika mitovy, dia tsy hanan-tsafidy ny mpitarika ary hanohy hiandry ny fanamafisana ny fanolorana mandra-piverin'ny replica ao amin'ny cluster ary afaka manaiky sy manao ny fanoratana.

Fifandraisana iray isaky ny fifampiraharahana?

Ny fampiharana tsirairay dia mila karazana fampifangaroana tsy miovaova sy fampisehoana. Raha tsy hoe, mazava ho azy, fa ny fampiharana fandoavana faktiora, izay heverintsika ho tsy miovaova tanteraka, na ny fampiharana tambajotra sosialy saika vetivety. Amin'ny toe-javatra hafa rehetra, hisy fotoana tsy maintsy asynchronous ny asa sasany ary tsy maintsy asynchronous ny sasany. Mety tsy tianao ny hiandry ny rafitra mandra-pahatongan'ny hafatra alefa amin'ny chat, fa raha misy fandoavam-bola atao amin'ny fampiharana mitovy, dia tsy maintsy miandry ianao.

Ireo fanapahan-kevitra rehetra ireo, mazava ho azy, dia ataon'ny mpamorona fampiharana. Ny fandraisana fanapahan-kevitra tsara momba ny fotoana hampiasana ny fomba fiasa tsirairay dia hanampy anao hahazo tombony betsaka amin'ny cluster. Zava-dehibe ny ahafahan'ny mpamorona mifamadika amin'izy ireo amin'ny ambaratonga SQL ho an'ny fifandraisana sy ho an'ny fifanakalozana.

Miantoka ny fanaraha-maso amin'ny fampiharana

Amin'ny alΓ lan'ny default, ny PostgreSQL dia manome tsy miovaova. Izany dia fehezin'ny parameter server synchronous_commit. Amin'ny alΓ lan'ny default dia eo amin'ny toerany on, fa manana safidy telo hafa: local, remote_write na off.

Rehefa mametraka ny parameter ho off ny commit synchronous rehetra dia atsahatra, na dia eo amin'ny rafitra eo an-toerana aza. Ny mari-pamantarana eo an-toerana dia mamaritra ny fomba synchronous ho an'ny rafitra eo an-toerana, fa ny fanoratana amin'ny dika mitovy dia atao asynchronously. Remote_write dia lasa lavitra kokoa: ny fanoratana amin'ny kopia dia atao asynchronous, fa averina rehefa nanaiky ny fanoratana ny kopia fa tsy nanoratra izany tamin'ny kapila.

Amin'ny fandinihana ny karazana safidy misy, misafidy fitondran-tena isika ary, mitadidy izany on – firaketana synchronous ireo, hofidianay local ho an'ny asynchronous commits amin'ny tambajotra, raha mamela ny local commits synchronous.

Ankehitriny, holazainay aminao ny fomba fametrahana an'io ao anatin'ny fotoana fohy, fa alaivo sary an-tsaina hoe nanangana izany izahay synchronous_commit Π² local ho an'ny mpizara. Nanontany tena izahay raha azo atao ny manova ny parameter synchronous_commit amin'ny lalitra, ary hita fa tsy azo atao ihany, misy fomba roa mihitsy aza hanaovana izany. Ny voalohany dia ny mametraka ny session ny fifandraisanao toy izao manaraka izao:

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

Ny fanoratana manaraka rehetra ao amin'ny fivoriana dia hanaiky ny fanoratana amin'ny kopia alohan'ny hamerenana vokatra tsara amin'ny mpanjifa mifandray. Raha tsy hoe ovainao ny toerana synchronous_commit indray. Azonao atao ny manala ny ampahany SESSION ao amin'ny baiko satria ho ao amin'ny sanda default.

Ny fomba faharoa dia tsara rehefa te-hahazo antoka ianao fa mahazo replication synchronous ho an'ny fifanakalozana tokana. Amin'ny angon-drakitra taranaka NoSQL maro dia tsy misy ny foto-kevitry ny fifampiraharahana, fa ao amin'ny PostgreSQL. Amin'ity tranga ity dia manomboka fifampiraharahana ianao ary mametraka synchronous_commit Π² on alohan'ny hanatanterahana ny fidirana amin'ny fifampiraharahana. COMMIT dia hanao ny fifampiraharahana amin'ny fampiasana ny sanda parameter rehetra synchronous_commit, izay napetraka tamin'izany fotoana izany, na dia tsara kokoa aza ny mametraka ny fari-piainana eo anoloana mba hahazoana antoka fa azon'ny mpamorona hafa fa tsy asynchronous ny fanoratana.

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

Ny fifampiraharahana rehetra dia hohamafisina ho voasoratra amin'ny kopia alohan'ny hamerenan'ny angon-drakitra valiny tsara amin'ny mpanjifa mifandray.

Fametrahana ny PostgreSQL

Talohan'ity dia nieritreritra ny rafitra PostgreSQL izahay synchronous_commit, napetraka ao local. Mba hahatonga izany ho zava-misy eo amin'ny lafiny mpizara dia mila mametraka safidy roa amin'ny fanamafisana ny mpizara ianao. Paramètre iray hafa synchronous_standby_names ho tonga amin'ny azy rehefa synchronous_commit ho ao on. Izy io no mamaritra hoe iza amin'ireo kopia no mendrika ho an'ny commit synchronous, ary hametraka izany izahay *, izay midika fa ny kopia rehetra dia tafiditra ao. Ireo soatoavina ireo dia matetika voarindra ao fichier configuration amin'ny fanampiana:

synchronous_commit = local  
synchronous_standby_names='*'

Amin'ny fametrahana ny parameter synchronous_commit amin'ny dikany local, mamorona rafitra misy ny kapila eo an-toerana mijanona ho synchronous, fa ny replica replica commit dia asynchronous amin'ny alΓ lan'ny default. Raha tsy hoe, mazava ho azy, dia manapa-kevitra ny hanao ireo commits synchronous, araka ny aseho etsy ambony.

Raha nanaraka ny fampandrosoana ianao Tetikasa governora, mety nahatsikaritra fiovana vao haingana ianao (1, 2), izay nahafahan'ireo mpampiasa Governora nanandrana ireo masontsivana ireo sy nanara-maso ny tsy fitovian'izy ireo.

Teny vitsivitsy...

Herinandro lasa izay dia efa nilaza taminao aho fa tsy azo atao ny manitsy tsara ny PostgreSQL. Tamin'izay i Kurt, mpikambana ao amin'ny ekipan'ny sehatra Compose, no nanizingizina fa misy ny fahafahana toy izany. Nampitony ny fanoherako izy ary hita tao amin'ny antontan-taratasy PostgreSQL ireto manaraka ireto:

PostgreSQL sy fifandraisana manokana momba ny fanoratana tsy miovaova

Ity toe-javatra ity dia azo ovaina amin'ny fotoana rehetra. Ny fitondran-tena ho an'ny fifampiraharahana rehetra dia faritana amin'ny toe-javatra manan-kery amin'ny fotoan'ny fanoloran-tena. Noho izany, azo atao sy mahasoa ny fifampiraharahana sasany ny manao synchronously ary ny hafa asynchronously. Ohatra, hanery ny iray multistatement transaction to make commits asynchronously rehefa mifanipaka ny sandan'ny parameter, set SET LOCAL synchronous_commit TO OFF amin'ny fifampiraharahana.

Miaraka amin'ity fanovana kely amin'ny fisie fanamafisana ity, nomenay ny mpampiasa ny fanaraha-maso ny tsy fitoviana sy ny fahombiazany.

Source: www.habr.com

Add a comment