I-PostgreSQL kanye nezilungiselelo zokuvumelana kokubhala okuqondile

Ukuhunyushwa kwalesi sihloko kulungiselelwe ngokukhethekile abafundi bezifundo "Isizindalwazi". Unentshisekelo yokuthuthuka ngale ndlela? Sikumema ukuthi Usuku Lokuvula, lapho sikhuluma ngokuningiliziwe ngohlelo, izici zefomethi ye-inthanethi, amakhono namathemba emisebenzi alindele abaphothule ngemva kokuqeqeshwa.

I-PostgreSQL kanye nezilungiselelo zokuvumelana kokubhala okuqondile

I-PostgreSQL kanye nezilungiselelo zokuvumelana kokubhala okuqondile
Ku-Compose, sibhekana nedathabheyisi eminingi, okusinika ithuba lokujwayelana nokusebenza kwazo kanye nokushiyeka kwazo. Njengoba sifunda ukuthanda izici zolwazi olusha, ngezinye izikhathi siqala ukucabanga ukuthi bekungaba kuhle kanjani ukube izici ezifanayo bezikhona kumathuluzi akhulile kakhudlwana ebesisebenza nawo isikhathi eside. Esinye sezici ezintsha ebengifuna ukuzibona ku-PostgreSQL bekunokuhleleka kokubhala ngokungaguquguquki ekuxhumekeni ngakunye kulo lonke iqoqo. Futhi njengoba kuvela, sesinayo kakade, futhi namuhla sifuna ukwabelana nawe ngolwazi lokuthi ungayisebenzisa kanjani.

Ngiyidinga ngani?

Ukuthi iqoqo kufanele liziphathe kanjani kuncike kuhlelo lwakho lokusebenza. Thatha, isibonelo, uhlelo lokusebenza lokukhokha ibhili. Uzodinga ukuvumelana okungu-XNUMX% kulo lonke iqoqo, ngakho-ke kuzodingeka unike amandla ukuzibophezela okuvumelanayo ukuze isizindalwazi sakho silinde ukuthi zonke izinguquko zenziwe. Kodwa-ke, uma uhlelo lwakho lokusebenza kuyinethiwekhi yokuxhumana nabantu ekhula ngokushesha, uzokhetha impendulo esheshayo ngaphezu kokungaguquguquki okungu-XNUMX%. Ukuze wenze lokhu, ungasebenzisa i-asynchronous commits ku-cluster yakho.

Hlangana nokuyekethisa

Kufanele wenze ukuhwebelana phakathi kokuvumelana kwedatha nokusebenza. I-PostgreSQL iyasuka ekuvumelaneni ngoba ukucushwa okuzenzakalelayo kuyabikezelwa futhi ngaphandle kwezimanga ezingalindelekile. Manje ake sibheke ukuvumelana.

I-Tradeoff 1: Ukusebenza

Uma iqoqo le-PostgreSQL lingadingi ukuvumelana, lingasebenza ngokulinganayo. Ukubhalwa kubhalwa kumholi weqoqo, futhi izibuyekezo zizothunyelwa kuzifaniso zayo ngemva kwama-millisecond ambalwa. Uma iqoqo le-PostgreSQL lidinga ukuvumelana, kufanele lisebenze ngokuvumelanisa. Ukubhalwa kuzobhalwa kumholi weqoqo, ozothumela isibuyekezo kuma-replicas futhi alinde isiqinisekiso sokuthi ngamunye ubhalile ngaphambi kokuthumela isiqinisekiso kuklayenti eliqale ukubhala ukuthi liphumelele. Umehluko ongokoqobo phakathi kwalezi zindlela ukuthi indlela engavumelaniyo idinga ama-hop amabili enethiwekhi, kuyilapho indlela yokuvumelanisa idinga ezine.

I-Tradeoff 2: Ukungaguquguquki

Umphumela uma kwenzeka umholi ehluleka kulezi zindlela ezimbili nazo zizohluka. Uma umsebenzi wenziwa ngendlela efanayo, khona-ke uma iphutha elinjalo lenzeka, akuwona wonke amarekhodi azokwenziwa yi-replicas. Kuzolahleka malini? Kuncike kuhlelo lokusebenza ngokwalo kanye nokusebenza kahle kokuphindaphinda. Ukuphindaphinda okubhaliwe kuzovimbela i-replica ekubeni umholi uma inani lolwazi elikuyo lingaphansi kuka-1 MB kunomholi, okungukuthi, amarekhodi angafika ku-1 MB okungenzeka alahleke ngesikhathi sokusebenza okuvumelanayo.

Lokhu akwenzeki ngemodi yokuvumelanisa. Uma umholi ehluleka, zonke izifaniso ziyabuyekezwa, njengoba noma yikuphi umbhalo oqinisekisiwe kumholi kufanele uqinisekiswe kumakhophi. Lokhu ukuhambisana.

Ukuziphatha okuvumelanayo kunengqondo ohlelweni lokukhokha lapho ukuvumelana kunenzuzo ecacile ekuhwebeni phakathi kokuvumelana nokusebenza. Into ebaluleke kakhulu kuhlelo lokusebenza olunjalo idatha evumelekile. Manje cabanga ngenethiwekhi yokuxhumana nabantu lapho umsebenzi oyinhloko uwukugcina ukunaka komsebenzisi ngokuphendula izicelo ngokushesha ngangokunokwenzeka. Kulesi simo, ukusebenza ngama-hop ambalwa enethiwekhi nokulinda okuncane kokuzibophezela kuzoba okubalulekile. Kodwa-ke, ukuhwebelana phakathi kokusebenza nokungaguquguquki akukona ukuphela okufanele ucabange ngakho.

Ukuhwebelana 3: Ukuphahlazeka

Kubaluleke kakhulu ukuqonda ukuthi iqoqo liziphatha kanjani ngesikhathi sokwehluleka. Cabangela isimo lapho ikhophi eyodwa noma ngaphezulu ihluleka khona. Lapho izibophezelo zicutshungulwa ngokulinganayo, umholi uzoqhubeka nokusebenza, okungukuthi, amukele futhi acubungule ukubhala, ngaphandle kokulinda izifaniso ezingekho. Lapho ama-replicas ebuyela eqenjini, abamba umholi. Ngokuphindaphinda okuvumelanayo, uma izifaniso zingaphenduli, khona-ke umholi ngeke abe nakuzikhethela futhi uzoqhubeka nokulinda ukuqinisekiswa kokuzibophezela kuze kube i-replica ibuyela kuqoqo futhi ingavuma futhi ibhale ukubhala.

Uxhumano olulodwa ngomsebenzi ngamunye?

Lonke uhlelo lokusebenza ludinga uhlobo oluhlukile lwenhlanganisela yokuvumelana nokusebenza. Ngaphandle uma kunjalo, kuwuhlelo lwethu lokusebenza olukhokha ibhili, esicabanga ukuthi aluguquguquki ngokuphelele, noma uhlelo lwethu lokusebenza lwenethiwekhi yokuxhumana nomphakathi olucishe lube isikhashana. Kuzo zonke ezinye izimo, kuzoba nezikhathi lapho eminye imisebenzi kufanele ivumelane futhi eminye kufanele ihambisane. Ungase ungafuni ukuthi isistimu ilinde kuze kube yilapho umlayezo othunyelwe engxoxweni usuzibophezele, kodwa uma inkokhelo icutshungulwa kusicelo esifanayo, kuzodingeka ulinde.

Zonke lezi zinqumo, kunjalo, zenziwa umthuthukisi wohlelo lokusebenza. Ukwenza izinqumo ezifanele mayelana nesikhathi sokusebenzisa indlela ngayinye kuzokusiza ukuthi uthole okuningi kuqoqo lakho. Kubalulekile ukuthi unjiniyela akwazi ukushintsha phakathi kwazo ezingeni le-SQL ukuze axhumane futhi enze imisebenzi.

Ukuqinisekisa ukulawula ngokusebenza

Ngokuzenzakalelayo, i-PostgreSQL inikeza ukungaguquguquki. Lokhu kulawulwa ipharamitha yeseva synchronous_commit. Ngokuzenzakalelayo isesimweni on, kodwa inezinye izinketho ezintathu: local, remote_write noma off.

Lapho usetha ipharamitha ku off zonke izibophezelo ezihambisanayo ziyamiswa, ngisho nakusistimu yendawo. Ipharamitha yendawo icacisa imodi yokuvumelanisa yesistimu yendawo, kodwa ukubhala kuzifaniso kwenziwa ngokuhambisanayo. Remote_write kuya phambili nakakhulu: ukubhala kuzifaniso kwenziwa ngendlela efanayo, kodwa kubuyiselwa lapho isifaniso samukele ukubhala kodwa singakasibhali kudiski.

Ngokucabangela uhla olutholakalayo lwezinketho, sikhetha ukuziphatha futhi, sikhumbula lokho on - lawa amarekhodi ahambisanayo, sizokhetha local ukwenza okungavumelaniyo kunethiwekhi, ngenkathi kushiya ukwenza kwasendaweni kuvumelana.

Manje, sizokutshela ukuthi ungakusetha kanjani lokhu ngokushesha, kodwa ake ucabange ukuthi siyakumisa synchronous_commit Π² local okweseva. Sasizibuza ukuthi kungenzeka yini ukushintsha ipharamitha synchronous_commit empukaneni, futhi kwavela ukuthi akunakwenzeka kuphela, kukhona ngisho nezindlela ezimbili zokwenza lokhu. Okokuqala ukusetha isikhathi soxhumano lwakho ngale ndlela elandelayo:

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

Konke okubhaliwe okulandelayo kuseshini kuzovuma ukuthi kubhaliwe kuma-replicas ngaphambi kokubuyisela umphumela omuhle kuklayenti elixhunyiwe. Ngaphandle uma ushintsha isilungiselelo synchronous_commit futhi. Ungashiya ingxenye SESSION kumyalo ngoba izoba enanini elimisiwe.

Indlela yesibili yinhle uma ufuna ukwenza isiqiniseko sokuthi uthola ukuphindaphinda okuvumelanayo kokwenziwayo okukodwa. Kumininingwane eminingi yesizukulwane se-NoSQL umqondo wokuthengiselana awukho, kodwa ukhona ku-PostgreSQL. Kulokhu uqala ukuthengiselana bese usetha synchronous_commit Π² on ngaphambi kokwenza okufakiwe kokwenziwe. COMMIT izokwenza okwenziwayo isebenzisa noma yiliphi inani lepharamitha synchronous_commit, eyasethwa ngaleso sikhathi, nakuba kungcono kakhulu ukusetha okuguquguqukayo ngaphambili ukuze wenze isiqiniseko sokuthi abanye abathuthukisi bayaqonda ukuthi ukubhala akuhambisani.

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

Konke okwenziwayo manje kuzoqinisekiswa njengokulotshiwe kuma-replicas ngaphambi kokuthi isizindalwazi sibuyisele impendulo eyakhayo kuklayenti elixhunyiwe.

Isetha i-PostgreSQL

Ngaphambi kwalokhu, sicabange uhlelo lwe-PostgreSQL nge synchronous_commit, efakwe ku local. Ukuze wenze lokhu kube ngokoqobo ohlangothini lweseva, uzodinga ukusetha izinketho ezimbili zokucushwa kweseva. Enye ipharamitha synchronous_standby_names izozifikela yona nini synchronous_commit izongena on. Inquma ukuthi yiziphi izifaniso ezifanelekela ukuzibophezela okuvumelanayo, futhi sizokumisa ukuthi kube khona *, okuzosho ukuthi zonke izifaniso zihilelekile. Lawa manani ajwayele ukulungiselelwa kuwo ifayela lokumisa ngokungeza:

synchronous_commit = local  
synchronous_standby_names='*'

Ngokusetha ipharamitha synchronous_commit ibe yincazelo local, sakha isistimu lapho amadiski endawo ahlala evumelanisiwe, kodwa ukwenziwa kwe-replica yenethiwekhi ku-asynchronous ngokuzenzakalela. Ngaphandle kwalapho, kunjalo, sinquma ukwenza lezi zibopho zivumelane, njengoba kukhonjisiwe ngenhla.

Uma ubulokhu ulandela intuthuko Iphrojekthi kaHulumeni, kungenzeka ukuthi uqaphele izinguquko zakamuva (1, 2), okuvumele abasebenzisi boMbusi ukuthi bahlole le mingcele futhi baqaphe ukuvumelana kwayo.

Amanye amagama ambalwa...

Evikini eledlule, bengizokutshela ukuthi akunakwenzeka ukushuna kahle i-PostgreSQL. Kungaleso sikhathi lapho u-Kurt, ilungu lethimba lenkundla ye-Compose, agcizelela ukuthi ithuba elinjalo likhona. Wehlise ukuphikisa kwami ​​futhi wathola emibhalweni ye-PostgreSQL okulandelayo:

I-PostgreSQL kanye nezilungiselelo zokuvumelana kokubhala okuqondile

Lesi silungiselelo singashintshwa noma nini. Ukuziphatha kwanoma yikuphi okwenziwayo kunqunywa isilungiselelo esisebenza ngesikhathi sokwenza. Ngakho-ke, kuyenzeka futhi kuwusizo ukuthi okunye ukuthengiselana kwenziwe ngokuhambisanayo futhi okunye ngokuhambisanayo. Isibonelo, ukuphoqa eyodwa multistatement okwenziwayo kwenziwa ngokuhambisanayo lapho inani elimisiwe lepharamitha liphambene, setha SET LOCAL synchronous_commit TO OFF ekwenziweni.

Ngalokhu kuguqulwa okuncane kufayela lokucushwa, sinikeze abasebenzisi ukulawula phezu kokuvumelana nokusebenza kwabo.

Source: www.habr.com

Engeza amazwana