Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwingxelo yakhe, u-Andrey Borodin uya kukuxelela ukuba bathathele ingqalelo njani amava okulinganisa iPgBouncer xa uyila i-pooler yokudibanisa. Odyssey, njengoko babeyiqengqelekela kwimveliso. Ukongeza, siza kuxubusha ukuba yeyiphi imisebenzi yomtsalane esingathanda ukuyibona kwiinguqulelo ezintsha: kubalulekile kuthi ukuba singaneli nje ukuhlangabezana neemfuno zethu, kodwa ukuphuhlisa uluntu lwabasebenzisi. Odyssey.

Ividiyo:

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Molweni nonke! Igama lam ndinguAndrew.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

KwiYandex, ndiphuhlisa imithombo yolwazi evulekileyo. Kwaye namhlanje sinesihloko malunga noqhagamshelwano lwe-pooler yoqhagamshelwano.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ukuba uyayazi indlela yokufowunela i-pooler yoqhagamshelwano ngesiRashiya, ndixelele. Ndifuna ngokwenene ukufumana igama lobugcisa elilungileyo ekufuneka limiselwe kuncwadi lobugcisa.

Isihloko sinzima kakhulu, kuba kwiinkcukacha ezininzi i-pooler yoqhagamshelwano yakhelwe ngaphakathi kwaye awufuni nokuba wazi ngayo. Ewe kunjalo, kukho ezinye iisetingi kuyo yonke indawo, kodwa kwiPostgres ayisebenzi ngaloo ndlela. Kwaye ngokufanayo (kwi-HighLoad ++ 2019) kukho ingxelo kaNikolai Samokhvalov malunga nokuseka imibuzo kwi-Postgres. Kwaye njengoko ndiyiqonda, abantu beza apha ababesele beyilungisile imibuzo yabo ngokugqibeleleyo, kwaye aba ngabantu abajongene neengxaki zenkqubo ezinqabileyo ezinxulumene nomsebenzi womnatha kunye nokusetyenziswa kobutyebi. Kwaye kwezinye iindawo kunokuba nzima ngengqiqo yokuba iingxaki azibonakali.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Yandex inePostgres. Iinkonzo ezininzi zeYandex zihlala kwiYandex.Cloud. Kwaye sineepetabytes ezininzi zedatha evelisa ubuncinci izicelo ezisisigidi ngomzuzwana kwiPostgres.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye sibonelela ngeqela eliqhelekileyo elisemgangathweni kuzo zonke iinkonzo - le yeyona node iphambili yenode, iireplica ezimbini eziqhelekileyo (synchronous and asynchronous), i-backup, yokulinganisa izicelo zokufunda kwi-replica.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

I-node nganye ye-cluster yi-Postgres, apho, ngaphezu kwe-Postgres kunye neenkqubo zokubeka iliso, i-pooler yokudibanisa nayo ifakwe. I-pooler yokudibanisa isetyenziselwa ukubiyela kunye nenjongo yayo ephambili.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Yintoni eyona njongo iphambili yokudibanisa i-pooler?

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

I-Postgres ithatha imodeli yenkqubo xa isebenza neenkcukacha. Oku kuthetha ukuba uxhulumaniso olunye yinkqubo enye, enye Postgres backend. Kwaye kule backend kukho ezininzi iicache ezahlukeneyo, ezibiza kakhulu ukwenza okwahlukileyo kunxibelelwano olwahlukileyo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ukongeza, ikhowudi yePostgres inoluhlu olubizwa ngokuba yiprocArray. Iqulethe idatha esisiseko malunga noqhagamshelwano lwenethiwekhi. Kwaye phantse zonke ii-algorithms zokusetyenzwa kwe-procArray zinobunzima bomgca; zibaleka kulo lonke uluhlu loqhagamshelo lwenethiwekhi. Ngumjikelo okhawulezayo, kodwa ngoqhagamshelo lwenethiwekhi olungenayo izinto zibiza kakhulu. Kwaye xa izinto zibiza kakhulu, ungaphela uhlawula ixabiso eliphezulu kakhulu kunxibelelwano lwenethiwekhi.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kukho iindlela ezi-3 ezinokwenzeka:

  • Kwicala lesicelo.
  • Kwicala lesiseko sedatha.
  • Kwaye phakathi, oko kukuthi, zonke iintlobo zendibaniselwano.

Ngelishwa, i-pooler eyakhelwe-ngaphakathi okwangoku iphantsi kophuhliso. Abahlobo bethu kwiPostgreSQL Professional benza oku kakhulu. Xa iya kubonakala kunzima ukuqikelela. Kwaye eneneni, sinezisombululo ezibini zomakhi anokukhetha kuzo. Ezi zii-application-side pool kunye ne-proxy pool.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

I-application-side pool yeyona ndlela ilula. Kwaye phantse bonke abaqhubi babathengi babonelela ngendlela: bonisa izigidi zoqhagamshelo lwakho kwikhowudi njengonxibelelwano oluneshumi elinambini kwisiseko sedatha.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ingxaki evelayo kukuba kwinqanaba elithile ufuna ukukala i-backend, ufuna ukuyihambisa koomatshini abaninzi benyani.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Emva koko uyaqonda ukuba uneendawo ezininzi zokufumaneka, amaziko amaninzi edatha. Kwaye indlela yokudibanisa kwicala lomxhasi ikhokelela kumanani amakhulu. Emikhulu imalunga nama-10 onxibelelwano. Lo ngumphetho onokusebenza ngokuqhelekileyo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ukuba sithetha malunga nabadibanisi be-proxy, ke kukho abantu ababini abadibanisayo abanokwenza izinto ezininzi. Abangabophelelekanga kuphela. Bangabadibanisi + ukusebenza okupholileyo ngakumbi. Oku IPgpool и I-Crunchy-Proxy.

Kodwa, ngelishwa, ayinguye wonke umntu ofuna lo msebenzi owongezelelweyo. Kwaye ikhokelela kwinto yokuba abaxhasi baxhasa kuphela iseshoni yokudibanisa, oko kukuthi umxhasi omnye ongenayo, umxhasi omnye ophumayo kwisiseko sedatha.

Oku akufanelekanga kakhulu kwiinjongo zethu, ngoko sisebenzisa i-PgBouncer, eyenza ukudityaniswa kwentengiselwano, o.k.k. uqhagamshelo lweseva lufaniswe kuqhagamshelo lwabathengi kuphela ngexesha lentengiselwano.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye kumsebenzi wethu, oku kuyinyaniso. Kodwa kukho iingxaki ezimbalwa.Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Iingxaki ziqala xa ufuna ukuxilonga iseshoni, kuba lonke unxibelelwano lwakho olungenayo luhlala. Wonke umntu weza ne-loopback kwaye ngandlela thile kuba nzima ukulandelela iseshini.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ewe ungasebenzisa isicelo_name_add_host. Le yindlela kwicala le-Bouncer yokongeza idilesi ye-IP kwi-application_name. Kodwa application_name isetwe ludibaniso olongezelelweyo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kule grafu, apho umgca ophuzi uyizicelo zangempela, kwaye apho umgca ohlaza okwesibhakabhaka ucela ukubhabha kwisiseko sedatha. Kwaye lo mahluko kukufako ngokuchanekileyo kwe-application_name, efunekayo kuphela ekulandeleni umkhondo, kodwa ayisimahla kwaphela.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ukongeza, kwi-Bouncer awukwazi ukukhawulela ichibi elinye, o.k.t. inani loqhagamshelo lwesiseko sedatha ngomsebenzisi othile, ngokwesiseko sedatha ethile.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Oku kukhokelela entwenini? Unenkonzo elayishiweyo ebhalwe kwi-C ++ kwaye kwenye indawo ekufutshane nenkonzo encinci kwi-node engenzi nto imbi nge-database, kodwa umqhubi wayo uyaphambana. Ivula unxibelelwano lwe-20 kwaye yonke enye into iya kulinda. Nokuba ikhowudi yakho iqhelekile.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Thina, ewe, sibhale isiqwenga esincinci seBouncer esongeze olu seto, o.k. ukukhawulela abathengi echibini.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kuya kwenzeka ukwenza oku kwicala le-Postgres, oko kukuthi, ukunciphisa iindima kwi-database ngenani lokudibanisa.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kodwa ke uphulukana namandla okuqonda ukuba kutheni ungenanxibelelwano kumncedisi. IPgBouncer ayiphosi mpazamo yoqhagamshelwano, ihlala ibuyisela ulwazi olufanayo. Kwaye awukwazi ukuqonda: mhlawumbi igama eligqithisiweyo litshintshile, mhlawumbi i-database ilahlekile, mhlawumbi kukho into engalunganga. Kodwa akukho xilongo. Ukuba iseshoni ayinakusekwa, awuyi kukwazi ukuba kutheni ingenakusekwa.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ngexesha elithile, ujonga iigrafu zesicelo kwaye ubone ukuba isicelo asisebenzi.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Jonga phezulu kwaye ubone ukuba iBouncer inomsonto omnye. Olu lutshintsho kubomi benkonzo. Uyaqonda ukuba ubulungiselela ukulinganisa i-database ngonyaka kunye nesiqingatha, kwaye kufuneka ulinganise i-pooler.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Sifikelele kwisigqibo sokuba sifuna iiPgBouncers ezininzi.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

https://lwn.net/Articles/542629/

I-Bouncer ikhutshiwe kancinci.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye benza ukuba iiBouncers ezininzi ziphakanyiswe ngokuphinda zisebenzise i-port ye-TCP. Kwaye inkqubo yokusebenza idlulisela ngokuzenzekelayo uxhulumaniso lwe-TCP olungenayo phakathi kwabo usebenzisa i-round-robin.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Oku kubonakala kubathengi, oku kuthetha ukuba kubonakala ngathi uneBouncer enye, kodwa unoqhekeko loqhagamshelo olungasebenziyo phakathi kokuqhuba iiBouncers.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye ngomzuzu othile unokuqaphela ukuba ezi 3 Bouncers nganye itya undoqo wayo nge-100%. Udinga iiBouncers ezimbalwa. Ngoba?

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kuba une-TLS. Unoqhagamshelwano oluntsonkothileyo. Kwaye ukuba ulinganisela i-Postgres kunye nangaphandle kwe-TLS, uya kufumanisa ukuba inani loqhagamshelo olusekiweyo lehla malunga nemiyalelo emibini yobukhulu kunye ne-encryption enikwe amandla, kuba ukuxhawula ngesandla kwe-TLS kudla izixhobo ze-CPU.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye phezulu ungabona imisebenzi embalwa ye-cryptographic eyenziwa xa kukho amaza oqhagamshelwano olungenayo. Kuba eyona yethu iphambili inokutshintsha phakathi kweendawo ezifumanekayo, iliza loqhagamshelo olungenayo yimeko eqhelekileyo. Oko kukuthi, ngenxa yesizathu esithile iprayimari endala yayingafumaneki, wonke umthwalo wathunyelwa kwelinye iziko ledatha. Baza kuza bonke bezokubulisa kwi-TLS ngaxeshanye.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye inani elikhulu le-TLS lokuxhawula izandla lisenokungaphinde lithi molo kuBouncer, kodwa liza kumcinezela umqala. Ngenxa yokuphela kwexesha, i-wave yoqhagamshelo olungenayo lunokuba lula. Ukuba uzama kwakhona kwisiseko ngaphandle komva we-exponential, aziyi kuphinda zibuye kwaye ziphinde zibe ngamaza ahambelanayo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Nanku umzekelo we-16 PgBouncers elayisha ii-cores ze-16 kwi-100%.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Sifike kwiCascade PgBouncer. Olu lolona lungelelwaniso lubalaseleyo olunokufikelelwa kumthwalo wethu ngeBouncer. IiBouncers zethu zangaphandle zisetyenziselwa ukuxhawula izandla kwe-TCP, kwaye iiBouncers zangaphakathi zisetyenziselwa ukuhlanganisana kwangempela, ukuze zingaqhekeza uxhulumaniso lwangaphandle kakhulu.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kolu qwalaselo, ukuqalisa kwakhona okugudileyo kunokwenzeka. Unokuziqala kwakhona zonke ezi Bouncers zili-18 nganye nganye. Kodwa ukugcina ulungelelwaniso olunjalo kunzima kakhulu. I-Sysadmins, i-DevOps, kunye nabantu abajongene nale seva abayi konwaba kakhulu ngeli lungiselelo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kubonakala ngathi lonke uphuculo lwethu lunokunyuswa lube ngumthombo ovulekileyo, kodwa iBouncer ayixhaswanga kakuhle. Umzekelo, ukukwazi ukuqhuba iiPgBouncers ezininzi kwizibuko elinye kwenziwa kwinyanga ephelileyo. Kwakukho isicelo sokutsalwa ngolu phawu kwiminyaka eliqela eyadlulayo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

https://www.postgresql.org/docs/current/libpq-cancel.html

https://github.com/pgbouncer/pgbouncer/pull/79

Okanye omnye umzekelo. Kwi-Postgres, unokurhoxisa isicelo esiqhubekayo ngokuthumela imfihlo kuqhagamshelo olwahlukileyo ngaphandle kobunyani obungeyomfuneko. Kodwa abanye abathengi bathumela ngokulula ukusetwa kwakhona kwe-TCP, okt baphula unxibelelwano lwenethiwekhi. Uza kwenza ntoni uBouncer? Akayi kwenza nto. Iza kuqhubeka ukwenza isicelo. Ukuba ufumene inani elikhulu loqhagamshelo oludale idatabase enezicelo ezincinci, ukuqhawula nje umdibaniso kwiBouncer akuyi kwanela; kufuneka ugcwalise ezo zicelo zisebenza kuvimba weenkcukacha.

Oku kuchongiwe kwaye le ngxaki ayikadityaniswa neBouncer's upstream.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye ke siye safikelela kwisigqibo sokuba sifuna eyethu i-pooler yokudibanisa, eya kuphuhliswa, ifakwe, apho iingxaki zinokulungiswa ngokukhawuleza kwaye, ngokuqinisekileyo, kufuneka zibe yimisonto emininzi.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Siseta i-multithreading njengowona msebenzi uphambili. Kufuneka sikwazi ukuphatha amaza oqhagamshelwano lwe-TLS olungenayo kakuhle.

Ukwenza oku, kwafuneka siphuhlise ithala leencwadi elahlukileyo elibizwa ngokuba yiMachinarium, eyenzelwe ukuchaza umatshini wonxibelelwano njengekhowudi elandelelanayo. Ukuba ujonga ikhowudi yomthombo we-libpq, uya kubona iifowuni ezintle ezintsonkothileyo ezinokukubuyisela iziphumo kwaye uthi, “Nditsalele umnxeba kamva. Okwangoku ndine-IO okwangoku, kodwa xa i-IO ihamba ndiza kuba nomthwalo kwiprosesa. " Kwaye esi sisikimu esinamanqanaba amaninzi. Unxibelelwano lwenethiwekhi ludla ngokuchazwa ngumatshini karhulumente. Uninzi lwemithetho efana no "Ukuba bendikhe ndafumana ipakethi yentloko yesayizi N, ngoku ndilinde iN bytes," "Ukuba ndithumele ipakethi yeSYNC, ngoku ndilinde ipakethi eneziphumo zemetadata." Isiphumo yikhowudi enzima, ephikisayo, ngokungathi i-maze iguqulelwe kumgca wokuskena. Senze ukuba endaweni yomatshini karhulumente, umdwelisi weprogram uchaza indlela ephambili yokusebenzisana ngendlela yekhowudi eqhelekileyo efunekayo. Kuphela nje ukuba kule khowudi efunekayo kufuneka ufake iindawo apho ulandelelwano lokuphumeza kufuneka luphazamiseke ngokulinda idatha evela kumnatha, ukudlulisa umxholo wophumezo kwenye i-coroutine (intambo eluhlaza). Le ndlela ifana nokuba sibhala phantsi eyona ndlela ilindelekileyo kwi-maze ngokulandelelana, kwaye songeza amasebe kuyo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ngenxa yoko, sinomsonto omnye owenza i-TCP yamkele kwaye i-robin ejikelezayo idlulise uxhulumaniso lwe-TPC kubasebenzi abaninzi.

Kule meko, uxhulumaniso lomxhasi ngamnye luhlala lusebenza kwiprosesa enye. Kwaye oku kukuvumela ukuba wenze i-cache-friendly.

Kwaye ukongeza, siye saphucula kancinane ukuqokelelwa kweepakethi ezincinci kwipakethi enye enkulu ukuze sikhulule inkqubo ye-TCP stack.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ukongezelela, siye saphucula i-transaction pooling ngendlela yokuba i-Odyssey, xa iqwalaselwe, inokuthumela i-CANCEL kunye ne-ROLLBACK kwimeko yokungaphumeleli koxhumo lwenethiwekhi, oko kukuthi ukuba akukho mntu ulindele isicelo, i-Odyssey iya kuxelela i-database ukuba ingazami. zalisekisa isicelo esinokumosha izixhobo ezixabisekileyo.

Kwaye nanini na kunokwenzeka, sigcina uqhagamshelo kumxhasi omnye. Oku kuthintela ukuphinda ufake isicelo_name_add_host. Ukuba oku kuyenzeka, akufuneki siphinde sisete kwakhona iiparamitha ezifunekayo kuxilongo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Sisebenza kwimidla yeYandex.Cloud. Kwaye ukuba usebenzisa i-PostgreSQL elawulwayo kwaye unodibaniso lokudibanisa olufakiweyo, unokwenza ukuphindaphinda okunengqiqo ngaphandle, oko kukuthi, usishiye, ukuba uyafuna, usebenzisa ukuphindaphinda okunengqiqo. I-Bouncer ayizukukhulula uphindaphindo olunengqiqo ngaphandle.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Lo ngumzekelo wokuseta uphindaphindo olunengqiqo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ukongeza, sinenkxaso yophindaphindo lomzimba ngaphandle. Kwilifu, ngokuqinisekileyo, oku akunakwenzeka, kuba ke iqela liya kukunika ulwazi oluninzi malunga nalo. Kodwa kufakelo lwakho, ukuba ufuna ukuphindaphinda ngokwasemzimbeni ngokusebenzisa i-pooler yoqhagamshelo e-Odyssey, oku kunokwenzeka.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

I-Odyssey inohlolo oluhambelana ngokupheleleyo nePgBouncer. Sine console efanayo eqhuba phantse yonke imiyalelo efanayo. Ukuba kukho into engekhoyo, thumela isicelo sokutsala, okanye ubuncinci umcimbi kwi-GitHub, kwaye siya kugqiba imiyalelo efunekayo. Kodwa sele sinomsebenzi ophambili wePgBouncer console.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye, kunjalo, sinempazamo yokuthumela. Siza kubuyisela impazamo echazwe nguvimba weenkcukacha. Uya kufumana ulwazi malunga nokuba kutheni ungafakwanga kwidathabheyisi, kwaye kungekuphela nje ukuba awufakwanga kuyo.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Olu phawu luvaliwe ukuba ufuna ukuhambelana kwe-100% nePgBouncer. Singaziphatha ngendlela efanayo neBouncer, ukuze sibe kwicala elikhuselekileyo.

Phuhliso

Amagama ambalwa malunga nekhowudi yomthombo we-Odyssey.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/66

Umzekelo, kukho imiyalelo ethi “Misa/Qalisa kwakhona”. Ngokuqhelekileyo zisetyenziselwa ukuhlaziya i-database. Ukuba ufuna ukuhlaziya i-Postgres, emva koko ungayimisa kwi-pooler yoqhagamshelwano, yenza pg_upgrade, emva koko uqalise kwakhona. Kwaye kwicala lomxhasi kuya kubonakala ngathi i-database yayicotha nje. Lo msebenzi uziswe kuthi ngabantu abavela kuluntu. Akakabi ngumkhenkce, kodwa kungekudala yonke into iza kuba njalo. (Sele ngumkhenkce)

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/73 - sele ingumkhenkce

Ukongezelela, enye yezinto ezintsha kwi-PgBouncer yinkxaso ye-SCRAM Uqinisekiso, ebuye yaziswa kuthi ngumntu ongasebenzi kwi-Yandex.Cloud. Zombini zisebenza nzima kwaye zibalulekile.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ke ngoko, ndingathanda ukukuxelela ukuba yenziwe ngantoni i-Odyssey, ukuba ufuna ukubhala ikhowudi encinci ngoku.

Unesiseko somthombo we-Odyssey, oxhomekeke kumathala eencwadi amabini aphambili. Ithala leencwadi leKiwi kukuphunyezwa komyalezo olandelwayo wePostgres. Oko kukuthi, iproto ye-3 ye-Postgres yimiyalezo eqhelekileyo apho iziphelo zangaphambili kunye neziphelo zangasemva zinokutshintshiselana. Ziphunyezwa kwithala leencwadi leKiwi.

Ithala leencwadi leMachinarium lilayibrari yokuphunyezwa kwemisonto. Isiqwenga esincinci sale Machinarium sibhalwe ngolwimi lwendibano. Kodwa ungothuki, kukho imigca ye-15 kuphela.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Uyilo lweOdyssey. Kukho umatshini ophambili apho ii-coroutines zisebenza khona. Lo matshini uphumeza ukwamkela uqhagamshelo lwe-TCP olungenayo kwaye usasaze phakathi kwabasebenzi.

Umphathi wabathengi abaninzi unokusebenza ngaphakathi komsebenzi omnye. Intambo ephambili iphinda iqhube i-console kunye nokulungiswa kwemisebenzi ye-crone ukucima imidibaniso engasadingekiyo echibini.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

I-Odyssey ivavanywa kusetyenziswa i-postgres test suite eqhelekileyo. Siqhuba nje ukuhlohla-jonga nge-Bouncer kwaye nge-Odyssey, sifumana i-null div. Kukho iimvavanyo ezininzi ezinxulumene nokufomatha umhla ezingaphumeleli ngokufanayo kwi-Bouncer nakwi-Odyssey.

Ukongeza, kukho abaqhubi abaninzi abanovavanyo lwabo. Kwaye sisebenzisa iimvavanyo zabo ukuvavanya i-Odyssey.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ukongeza, ngenxa yokucwangciswa kwe-cascade yethu, kufuneka sivavanye iinyanda ezahlukeneyo: I-Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey ukuze siqiniseke ukuba i-Odyssey iphelele kuyo nayiphi na indawo kwi-cascade, isasebenza. njengoko silindele.

Qhekeza

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Sisebenzisa i-Odyssey kwimveliso. Kwaye bekungayi kuba fair ukuba ndithe yonke into isebenza nje. Hayi, oko kukuthi, ewe, kodwa kungekhona rhoqo. Ngokomzekelo, kwimveliso yonke into yasebenza nje, emva koko abahlobo bethu basePostgreSQL Professional beza bathi sinememori evuzayo. Babenjalo ngokwenene, sabalungisa. Kodwa yayilula.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Emva koko siye safumanisa ukuba i-pooler yoqhagamshelwano inonxibelelwano lwe-TLS olungenayo kunye noqhagamshelwano lwe-TLS oluphumayo. Kwaye imidibaniso ifuna izatifikethi zabaxumi kunye nezatifikethi zeseva.

Izatifikethi ze-Bouncer kunye ne-Odyssey zeseva ziphinda zifundwe yi-pcache yazo, kodwa izatifikethi zabaxumi akufuneki zifundwe kwakhona kwi-pcache, kuba i-Odyssey yethu enobungozi ekugqibeleni iqhubela kwinkqubo yokufunda esi satifikethi. Oku kwasothusa, kuba akuzange kumthathe ixesha elide ukuxhathisa. Ekuqaleni yayilinganisa ngokulandelelana, kodwa emva koqhagamshelwano olungenayo lwe-20 olungenayo ngexesha elinye le ngxaki yazibonakalisa.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Indlela yoQinisekiso ePluggable kukukwazi ukuqinisekisa usebenzisa izixhobo zeLunux ezakhelwe ngaphakathi. Kwi-PgBouncer iphunyezwa ngendlela yokuba kukho intambo eyahlukileyo yokulinda impendulo esuka kwi-PAM kwaye kukho intambo ye-PgBouncer eyintloko eyenza uxhulumaniso lwangoku kwaye ingabacela ukuba baphile kwintambo ye-PAM.

Asizange sikusebenzise oku ngesizathu esinye esilula. Sinemisonto emininzi. Kutheni sifuna oku?

Oku kunokudala iingxaki ekugqibeleni ukuba unobubhali be-PAM kunye ne-non-PAM yokuqinisekisa, ngoko igagasi elikhulu loqinisekiso lwe-PAM linokulibazisa ngokubonakalayo uqinisekiso lwe-non-PAM. Le yenye yezinto esingakhange sizilungise. Kodwa ukuba ufuna ukuyilungisa, ungayenza le nto.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Enye ireki yayikukuba sinomsonto omnye owamkela lonke udibaniso olungenayo. Kwaye ke batshintshelwe echibini labasebenzi, apho ukuxhawula izandla kwe-TLS kuya kwenzeka.

Umgca osezantsi, ukuba unamaza ahambelanayo angama-20 oqhagamshelwano lwenethiwekhi, zonke ziyakwamkelwa. Kwaye kwicala lomxhasi i-libpq izakuqala ukunika ingxelo yokuphuma kwexesha. Ngokungagqibekanga kubonakala ngathi yimizuzwana emi-000.

Ukuba bonke abanako ukungena kwi-database ngexesha elifanayo, ngoko abanako ukungena kwi-database, kuba konke oku kunokugutyungelwa ngokuzama kwakhona okungabonakaliyo.

Sifikelele kwisigqibo sokuba sikopishe iskimu esivela kwi-PgBouncer apha kunye nenyaniso yokuba sine-throttling inani loqhagamshelwano lwe-TCP esilwamkelayo.

Ukuba sibona ukuba samkela uxhulumaniso, kodwa ekugqibeleni abanalo ixesha lokuxhawula izandla, sibabeka emgceni ukuze bangachithi izixhobo ze-CPU. Oku kukhokelela kwinto yokuba ukuxhawula isandla ngaxeshanye akunakukwenziwa kulo lonke unxibelelwano olufikileyo. Kodwa ubuncinci umntu uya kungena kwisiseko sedatha, nokuba umthwalo unzima kakhulu.

Iphepha leNdlela

Yintoni ongathanda ukuyibona kwixa elizayo e-Odyssey? Yintoni esilungele ukuziphuhlisa kwaye silindele ntoni eluntwini?

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ukusukela ngo-Agasti 2019.

Nantsi indlela imephu yendlela yaseOdyssey yayijongeka ngayo ngo-Agasti:

  • Besifuna iSCRAM kunye nePAM yokuqinisekisa.
  • Besifuna ukudlulisa izicelo zokufunda kwindawo yokulinda.
  • Ndingathanda ukuqalisa kwakhona kwi-intanethi.
  • Kwaye ukukwazi ukunqumama kumncedisi.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Isiqingatha salo mkhombandlela sigqityiwe, hayi ngathi. Kwaye oku kulungile. Ngoko ke masixoxe ngento eseleyo kwaye songeze ngakumbi.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ngokumalunga nemibuzo efundwayo kuphela ukuya phambili? Sineekopi eziya kuthi zifudumeze nje umoya ngaphandle kokwenza izicelo. Sifuna ukuba babonelele nge-failover kunye nokutshintsha. Kwimeko yeengxaki kwelinye lamaziko edatha, ndingathanda ukuwahlalisa ngomsebenzi oluncedo. Kuba singenako ukuqwalasela abaqhubekeki benkqubo efanayo, inkumbulo efanayo ngokwahlukileyo, kuba kungenjalo ukuphindaphinda akuyi kusebenza.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ngokomgaqo, kwi-Postgres, ukususela kwi-10, kunokwenzeka ukucacisa iseshoni_attrs xa udibanisa. Ungadwelisa zonke iinginginya zedatha kuqhagamshelo kwaye utsho ukuba kutheni uya kwisiseko sedatha: bhala okanye ufunde kuphela. Kwaye umqhubi ngokwakhe uya kukhetha umamkeli wokuqala kuluhlu aluthandayo kakhulu, oluzalisekisa iimfuno zeseshoni_attrs.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kodwa ingxaki ngale ndlela kukuba ayilawuli i-replication lag. Usenokuba nekopi ethile eshiyekileyo ngasemva kangangexesha elingamkelekanga lenkonzo yakho. Ukuze sikwazi ukwenza umsebenzi ogcweleyo wemibuzo efundwayo kwi-replica, kufuneka sixhase isakhono se-Odyssey sokungaqhubeki xa singafundeki.

U-Odyssey kufuneka ahambe kwiziko ledatha ngezikhathi ezithile kwaye acele umgama wokuphindaphinda ukusuka kwindawo yokuqala. Kwaye ukuba ifikelele kwixabiso lomda, ungavumeli izicelo ezitsha kwisiseko sedatha, xelela umxhasi ukuba kufuneka aphinde aqalise uxhulumaniso kwaye, mhlawumbi, khetha omnye umkhosi ukwenza izicelo. Oku kuya kuvumela i-database ukuba ibuyisele ngokukhawuleza i-replication lag kwaye ibuyele kwakhona ukuphendula ngesicelo.

Kunzima ukunika ixesha elibekiweyo lokuphunyezwa, kuba ngumthombo ovulekileyo. Kodwa, ndiyathemba, hayi iminyaka eyi-2,5 njengabalingane bam basePgBouncer. Eli linqaku endifuna ukulibona kwi-Odyssey.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kuluntu, abantu babuze malunga nenkxaso yengxelo elungiselelwe. Ngoku unokwenza ingxelo elungiselelwe ngeendlela ezimbini. Okokuqala, unokwenza umyalelo weSQL, othi "ulungisiwe". Ukuze siqonde lo myalelo weSQL, kufuneka sifunde ukuqonda iSQL kwicala leBouncer. Oku kuya kuba kukugqithisela, kuba kugqithise, kuba sifuna yonke i-parser. Asikwazi ukwahlula yonke imiyalelo yeSQL.

Kodwa kukho ingxelo elungisiweyo kwinqanaba lomyalezo weprotocol kwiproto3. Kwaye le yindawo xa ulwazi lokuba isitatimende esilungisiweyo sidalwa sifika kwifom ehleliweyo. Kwaye sinokuxhasa ukuqonda ukuba kuqhagamshelo lweseva ethile umxhasi ucele ukwenza iingxelo ezilungisiweyo. Kwaye nokuba intengiselwano ivaliwe, sisafuna ukugcina unxibelelwano phakathi komncedisi kunye nomxhasi.

Kodwa apha kukho ukungafani kwingxoxo, kuba umntu uthi kufuneka uqonde ukuba luhlobo luni lweengxelo ezilungiselelwe umxhasi kunye nokwabelana ngoxhulumaniso lomncedisi phakathi kwabo bonke abathengi abadale uxhulumaniso lomncedisi, oko kukuthi, ngubani owadala isitatimende esilungisiweyo.

U-Andres Freund uthe ukuba umxhasi uza kuwe osele edale isitatimende esilungisiweyo kwelinye uxhumano lomncedisi, ngoko udale kuye. Kodwa kubonakala kuphosakele kancinci ukwenza imibuzo kwisiseko sedatha endaweni yomxhasi, kodwa ngokwembono yomphuhlisi obhala iprotocol yokunxibelelana nesiseko sedata, kuya kuba lula ukuba unikwe ngokulula uxhulumaniso lwenethiwekhi apho kukho umbuzo onjalo olungiselelwe.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Kwaye enye into ekufuneka siyiphumeze. Ngoku sinokubeka iliso okuhambelana nePgBouncer. Singabuyisela umndilili wexesha lokwenziwa kombuzo. Kodwa ixesha eliqhelekileyo liqondo lokushisa esibhedlele: abanye bayabanda, abanye bafudumala - ngokomyinge, wonke umntu unempilo. Asiyonyani.

Kufuneka siphumeze inkxaso yeepesenti ezinokubonisa ukuba kukho imibuzo ecothayo echitha izibonelelo kwaye yenze ukubeka esweni kwamkeleke ngakumbi.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Eyona nto ibalulekileyo kukuba ndifuna i-version 1.0 (Uguqulelo 1.1 sele lukhutshiwe). Inyani kukuba i-Odyssey ngoku ikwinguqulo 1.0rc, oko kukuthi umgqatswa wokukhulula. Kwaye zonke iingxaki endizidwelisileyo zalungiswa ngohlobo olufanayo, ngaphandle kokuvuza kwememori.

Ingaba inguqulelo 1.0 iza kuthetha ntoni kuthi? Sikhupha i-Odyssey kwiziseko zethu. Isele isebenza kwii-database zethu, kodwa xa ifikelela kwinqanaba lezicelo ze-1 ngomzuzwana, ngoko sinokuthi le yinguqulo yokukhululwa kwaye le yinguqulo enokuthiwa yi-000.

Abantu abaliqela ekuhlaleni bacele ukuba inguqulo 1.0 iquke ikhefu kunye neSCRAM. Kodwa oku kuya kuthetha ukuba kuya kufuneka sikhuphe inguqulelo elandelayo kwimveliso, kuba akukho SCRAM okanye ikhefu ayikabulawa. Kodwa, kunokwenzeka ukuba, lo mbandela uya kusonjululwa ngokukhawuleza.

Imephu yendlela ye-Odyssey: yintoni enye esiyifunayo kwi-pooler yoqhagamshelwano. U-Andrey Borodin (2019)

Ndilinde isicelo sakho sokutsalwa. Ndingathanda ukuva ukuba zeziphi iingxaki onazo ngeBouncer. Makhe sithethe ngazo. Mhlawumbi singasebenzisa eminye imisebenzi oyifunayo.

Isiphelo senxalenye yam le, ndingathanda ukukumamela. Enkosi!

Imibuzo yakho

Ukuba ndimisela eyam yesicelo_igama, ngaba iya kuthunyelwa ngokuchanekileyo, kubandakanywa kwintengiselwano yokudibanisa e-Odyssey?

Odyssey okanye iBouncer?

Kwi-Odyssey. Kwi-Bouncer iphoswe.

Siza kwenza iseti.

Kwaye ukuba uqhagamshelo lwam lokwenyani lutsibela kolunye uqhagamshelo, luya kuhanjiswa?

Siza kwenza isethi yazo zonke iiparameters ezidweliswe kuluhlu. Andazi ukuba isicelo_igama lukuluhlu. Ndicinga ukuba ndimbone apho. Siza kumisela zonke iiparamitha ezifanayo. Ngesicelo esinye, iseti iya kwenza yonke into efakwe ngumxhasi ngexesha lokuqalisa.

Enkosi, Andrey, ngengxelo! Ingxelo entle! Ndiyavuya kuba i-Odyssey ikhula ngokukhawuleza kwaye ngokukhawuleza umzuzu ngamnye. Ndifuna ukuqhubeka ngolu hlobo. Sele sikucelile ukuba ube noqhagamshelo lwedatha yedatha eninzi ukuze i-Odyssey ikwazi ukudibanisa kuluhlu lwedatha ehlukeneyo ngaxeshanye, oko kukuthi ikhoboka eliyintloko, kwaye emva koko uqhagamshele ngokuzenzekelayo kwinkosi entsha emva kokuhluleka.

Ewe, ndibonakala ndiyikhumbula le ngxoxo. Ngoku kukho ezininzi zokugcina. Kodwa akukho ukutshintsha phakathi kwabo. Kwicala lethu, kufuneka sivotele umncedisi ukuba usaphila kwaye siqonde ukuba kwenzeke iphutha, ngubani oya kubiza pg_recovery. Ndinendlela esemgangathweni yokuqonda ukuba asizanga enkosini. Yaye ngaba sifanele siqonde ngandlel’ ithile kwiimpazamo okanye nantoni na? Oko kukuthi, ingcamango inomdla, iyaxoxwa. Bhala ezinye izimvo. Ukuba unabasebenzi abamaziyo uC, kulungile.

Umba wokulinganisa kuzo zonke iireplicas ukwangumdla nakuthi, kuba sifuna ukwenza ulwamkelo lwamaqela aphindiweyo lubelula kangangoko kubaphuhlisi bezicelo. Kodwa apha ndingathanda ukuphawula ngakumbi, oko kukuthi, indlela yokwenza, indlela yokwenza kakuhle.

Umbuzo umalunga neekopi. Kuyavela ukuba unenkosi kunye neereplicas ezininzi. Kwaye kucacile ukuba baya kwi-replica kaninzi kunenkosi yokudibanisa, kuba banokungafani. Utshilo ukuba umahluko kwidatha unokuba yinto yokuba ayizukwanelisa ishishini lakho kwaye awuyi kuya apho de iphindwe. Ngexesha elifanayo, ukuba awuzange uye apho ixesha elide, kwaye emva koko waqala ukuya, ngoko idatha efunekayo ayiyi kufumaneka ngokukhawuleza. Oko kukuthi, ukuba sihlala sisiya kwinkosi, ke i-cache ekhona iyafudumala, kodwa kwi-replica i-cache iyancipha kancinci.

Ewe yinyani. I-pcache ayiyi kuba neebhloko zedatha oyifunayo, i-cache yangempela ayiyi kuba nolwazi malunga neetafile ozifunayo, izicwangciso aziyi kuba nemibuzo edibeneyo, akuyi kubakho nto.

Kwaye xa unohlobo oluthile lweqela, kwaye wongeza i-replica entsha apho, ngoko ngelixa iqala, yonke into imbi kuyo, o.k. inyusa i-cache yayo.

Ndayifumana ingcamango. Indlela echanekileyo iya kuba kukuqhuba ipesenti encinci yemibuzo kwi-replica kuqala, eya kufudumala i-cache. Xa sithetha nje, sinemeko yokuba kufuneka sishiyeke ngasemva kwenkosi ingadlulanga imizuzwana eli-10. Kwaye le meko ayiqukwanga kwelinye igagasi, kodwa ngokutyibilikayo kwabanye abathengi.

Ewe, ukwandisa ubunzima.

Lo ngumbono olungileyo. Kodwa kuqala kufuneka siphumeze olu kuvalwa. Okokuqala kufuneka sivale, kwaye emva koko siza kucinga malunga nendlela yokuvula. Olu luphawu olukhulu ukwenza ngokutyibilikayo.

I-Nginx inolu khetho slowly start kwiqela lomncedisi. Yaye ngokuthe ngcembe uyawandisa umthwalo.

Ewe, umbono omhle, siyakuzama xa sifika kuwo.

umthombo: www.habr.com

Yongeza izimvo