Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Embikweni wakhe, u-Andrey Borodin uzokutshela ukuthi bacabangele kanjani isipiliyoni sokukala i-PgBouncer lapho beklama i-pooler yokuxhuma. Odyssey, njengoba beyikhiphela ekukhiqizeni. Ngaphezu kwalokho, sizoxoxa ngokuthi yimiphi imisebenzi yomdobi esingathanda ukuyibona ezinguqulweni ezintsha: kubalulekile kithi ukuthi singagcini nje ngokuhlangabezana nezidingo zethu, kodwa ukuthuthukisa umphakathi wabasebenzisi. Odyssey.

Ividiyo:

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Sanibonani nonke! Igama lami ngingu-Andrew.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kwa-Yandex, ngithuthukisa imininingwane yomthombo ovulekile. Futhi namuhla sinesihloko mayelana nokuxhumeka kwe-pooler yokuxhumana.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Uma wazi ukuthi ungashayela kanjani i-pooler yokuxhumana ngesiRashiya, bese ungitshela. Ngifuna ngempela ukuthola igama elihle lobuchwepheshe okufanele lisungulwe ezincwadini zobuchwepheshe.

Isihloko siyinkimbinkimbi impela, ngoba kudathabhethi eminingi i-pooler yokuxhuma yakhelwe ngaphakathi futhi awudingi nokwazi ngayo. Yiqiniso, kukhona ezinye izilungiselelo yonke indawo, kodwa ku-Postgres akusebenzi ngaleyo ndlela. Futhi ngokufana (ku-HighLoad++ 2019) kukhona umbiko ka-Nikolai Samokhvalov mayelana nokusetha imibuzo ku-Postgres. Futhi njengoba ngikuqonda, abantu beza lapha asebevele beyilungiselele kahle imibuzo yabo, futhi laba abantu ababhekene nezinkinga zesistimu ezingavamile kakhulu ezihlobene nenethiwekhi nokusetshenziswa kwezinsiza. Futhi kwezinye izindawo kungase kube nzima ngomqondo wokuthi izinkinga azibonakali.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

I-Yandex ine-Postgres. Izinsizakalo eziningi ze-Yandex zihlala ku-Yandex.Cloud. Futhi sinama-petabytes ambalwa edatha akhiqiza okungenani izicelo eziyisigidi ngomzuzwana ku-Postgres.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Futhi sihlinzeka ngeqoqo elisezingeni elifanele lazo zonke izinsizakalo - lena i-node eyinhloko ye-node, ama-replicas amabili ajwayelekile (okuvumelanisa futhi asynchronous), ikhophi yasenqolobaneni, ukukala kwezicelo zokufunda ku-replica.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

I-cluster node ngayinye i-Postgres, lapho, ngaphezu kwe-Postgres nezinhlelo zokuqapha, i-pooler yokuxhuma nayo ifakiwe. I-pooler yokuxhuma isetshenziselwa ukubiya kanye nenhloso yayo enkulu.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Iyini inhloso eyinhloko ye-pooler yokuxhuma?

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

I-Postgres yamukela imodeli yenqubo lapho isebenza nesizindalwazi. Lokhu kusho ukuthi ukuxhumana okukodwa kuyinqubo eyodwa, isipele se-Postgres esisodwa. Futhi kulokhu okungemuva kunenqwaba yama-cache ahlukene, abiza kakhulu ukwenza okuhlukile kokuxhumana okuhlukile.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ukwengeza, ikhodi ye-Postgres ine-array ebizwa ngokuthi i-procArray. Iqukethe idatha eyisisekelo mayelana noxhumo lwenethiwekhi. Futhi cishe wonke ama-algorithms wokucubungula we-procArray anobunzima bomugqa; agijima phezu kwalo lonke uhlu lokuxhunywa kwenethiwekhi. Umjikelezo osheshayo, kodwa ngoxhumo lwenethiwekhi olungenayo izinto zibiza kancane. Futhi lapho izinto zibiza kancane, ungagcina ukhokha inani eliphakeme kakhulu lokuxhumeka kwenethiwekhi okuningi.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kunezindlela ezi-3 ezingenzeka:

  • Ngasohlangothini lwesicelo.
  • Ohlangothini lwe-database.
  • Futhi phakathi, okungukuthi, zonke izinhlobo zezinhlanganisela.

Ngeshwa, i-pooler eyakhelwe ngaphakathi isathuthukiswa okwamanje. Abangane bethu kwa-PostgreSQL Professional benza lokhu kakhulu. Ukuthi izovela nini kunzima ukubikezela. Futhi empeleni, sinezixazululo ezimbili zomakhi angakhetha kuzo. Lezi ziyi-application-side pool kanye ne-proxy pool.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

I-application-side pool iyindlela elula. Futhi cishe bonke abashayeli bamaklayenti bakunikeza indlela: thula izigidi zokuxhuma kwakho ngekhodi njengokuxhumana okumbalwa kusizindalwazi.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Inkinga ephakamayo ukuthi ngesikhathi esithile ufuna ukukala i-backend, ufuna ukuyihambisa emishinini eminingi ebonakalayo.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Bese uqaphela ukuthi unezindawo zokutholakala ezimbalwa, izikhungo zedatha ezimbalwa. Futhi indlela yokuhlanganisa amaklayenti ohlangothini iholela ezinombolweni ezinkulu. Emikhulu icishe ibe ngu-10 ukuxhumana. Lolu wunqenqema olungasebenza ngokujwayelekile.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Uma sikhuluma ngama-proxy poolers, khona-ke kukhona ama-poolers amabili angenza izinto eziningi. Ababona nje ama-poolers. Bangama-poolers + ukusebenza okuhle kakhulu. Lokhu I-Pgpool ΠΈ I-Crunchy-Proxy.

Kodwa, ngeshwa, akuwona wonke umuntu odinga lokhu kusebenza okwengeziwe. Futhi kuholela eqinisweni lokuthi ama-poolers asekela kuphela ukuhlanganisa iseshini, okungukuthi iklayenti elilodwa elingenayo, iklayenti eliphumayo elilodwa kusizindalwazi.

Lokhu akuzifanele kakhulu izinjongo zethu, ngakho-ke sisebenzisa i-PgBouncer, esebenzisa ukuhlanganisa okwenziwayo, i.e. uxhumo lweseva lufaniswa noxhumo lwamaklayenti kuphela ngesikhathi sokuthenga.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Futhi emsebenzini wethu, lokhu kuyiqiniso. Kodwa kunezinkinga ezimbalwa.Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Izinkinga ziqala lapho ufuna ukuxilonga iseshini, ngoba konke ukuxhumana kwakho okungenayo kungokwasendaweni. Wonke umuntu weza ne-loopback futhi ngandlela thile kuba nzima ukulandelela iseshini.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Yebo ungasebenzisa isicelo_name_add_host. Lena indlela ngasohlangothini lwe-Bouncer yokwengeza ikheli le-IP ku-application_name. Kodwa i-application_name isethwe uxhumano olwengeziwe.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kule grafu, lapho umugqa ophuzi uyizicelo zangempela, nalapho umugqa oluhlaza okwesibhakabhaka uyizicelo ezindizela kusizindalwazi. Futhi lo mehluko uwukufakwa kwe-application_name, edingekayo kuphela ekulandeleni, kodwa ayimahhala nhlobo.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ukwengeza, ku-Bouncer awukwazi ukukhawulela ichibi elilodwa, okungukuthi inombolo yoxhumo lwesizindalwazi ngomsebenzisi ngamunye, kusizindalwazi ngasinye.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Lokhu kuholela kuphi? Unesevisi elayishiwe ebhalwe ku-C ++ futhi kwenye indawo eduze nesevisi encane endaweni engenzi lutho olubi nge-database, kodwa umshayeli wayo uyahlanya. Ivula ukuxhumana okungu-20 futhi konke okunye kuzolinda. Ngisho nekhodi yakho ijwayelekile.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Thina, vele, sibhale isiqeshana esincane se-Bouncer esingeze lesi silungiselelo, okusho ukuthi sikhawulela amakhasimende echibini.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kungenzeka ukwenza lokhu ohlangothini lwe-Postgres, okungukuthi, ukukhawulela izindima kusizindalwazi ngenombolo yokuxhumana.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kodwa-ke ulahlekelwa amandla okuqonda ukuthi kungani ungenakho ukuxhumana neseva. I-PgBouncer ayiphonsi iphutha lokuxhumeka, ihlezi ibuyisela ulwazi olufanayo. Futhi awukwazi ukuqonda: mhlawumbe iphasiwedi yakho ishintshile, mhlawumbe isizindalwazi sisanda kulahleka, mhlawumbe kukhona okungalungile. Kodwa akukho ukuxilongwa. Uma iseshini ingakwazi ukusungulwa, ngeke wazi ukuthi kungani ingasungulwa.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Esikhathini esithile, ubheka amagrafu ohlelo lokusebenza futhi ubone ukuthi uhlelo lokusebenza alusebenzi.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Bheka phezulu ubone ukuthi iBouncer inomucu owodwa. Lesi yisikhathi soshintsho empilweni yenkonzo. Uyabona ukuthi ubulungiselela ukukala i-database ngonyaka nesigamu, futhi udinga ukukala i-pooler.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Sifinyelele esiphethweni sokuthi sidinga ama-PgBouncer amaningi.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

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

I-Bouncer isipeyishiwe kancane.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Futhi bakwenza ukuze ama-Bouncers amaningana akhuliswe ngokusebenzisa kabusha ichweba le-TCP. Futhi isistimu yokusebenza idlulisela ngokuzenzakalelayo ukuxhumana kwe-TCP okungenayo phakathi kwabo kusetshenziswa i-round-robin.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Lokhu kubonakala kumakhasimende, okusho ukuthi kubukeka sengathi une-Bouncer eyodwa, kodwa unokuhlukana kokuxhumana okungenzi lutho phakathi kwama-Bouncers asebenzayo.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Futhi ngomzuzwana othile ungase uqaphele ukuthi lawa ma-Bouncer angu-3 ngalinye lidla umnyombo walo ngo-100%. Udinga ama-Bouncer ambalwa impela. Kungani?

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ngoba une-TLS. Unoxhumano olubethelwe. Futhi uma ulinganisa i-Postgres nge-TLS nangaphandle kwayo, uzothola ukuthi inani loxhumo olumisiwe lehla cishe ngama-oda amabili obukhulu ngokubethela okuvunyelwe, ngoba ukuxhawula kwe-TLS kudla izinsiza ze-CPU.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Futhi phezulu ungabona imisebenzi embalwa ye-cryptographic eyenziwa uma kukhona igagasi lokuxhumana okungenayo. Njengoba okuyinhloko kwethu kungashintsha phakathi kwezindawo ezitholakalayo, igagasi loxhumo olungenayo yisimo esivamile. Okusho ukuthi, ngesizathu esithile okuyisisekelo esidala bekungatholakali, wonke umthwalo uthunyelwe kwesinye isikhungo sedatha. Bazofika bonke bezobingelela i-TLS kanye kanye.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Futhi inqwaba yokuxhawula i-TLS ingase ingasabingelele ku-Bouncer, kodwa izompintsha umphimbo. Ngenxa yokuphela kwesikhathi, igagasi loxhumo olungenayo lingase lingabi manzi. Uma uzama futhi kusisekelo ngaphandle kokuhlehla komchazi, angeke aze aphindelela ngamagagasi ahambisanayo.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Nasi isibonelo sama-PgBouncers angu-16 alayisha ama-cores angu-16 ku-100%.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Sifike ku-cascade PgBouncer. Lokhu ukucushwa okungcono kakhulu okungafezwa emthwalweni wethu nge-Bouncer. Ama-Bouncer ethu angaphandle asetshenziselwa ukuxhawula kwe-TCP, kanti ama-Bouncer angaphakathi asetshenziselwa ukuhlanganisa ndawonye, ​​ukuze anganqamuli kakhulu ukuxhumana kwangaphandle.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kulokhu kucushwa, ukuqala kabusha okubushelelezi kungenzeka. Ungaqala kabusha wonke lawa ma-Bouncers ayi-18 ngamunye ngamunye. Kodwa ukugcina ukucushwa okunjalo kunzima kakhulu. Ama-Sysadmins, ama-DevOps, kanye nabantu abanesibopho sale seva ngeke bajabule kakhulu ngaleli lungiselelo.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kubukeka sengathi konke ukuthuthukiswa kwethu kungathuthukiswa ukuze kube umthombo ovulekile, kodwa i-Bouncer ayisekelwe kahle kakhulu. Isibonelo, ikhono lokusebenzisa ama-PgBouncer ambalwa echwebeni elilodwa lenziwa enyangeni edlule. Kube nesicelo sokudonsa ngalesi sici eminyakeni embalwa edlule.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

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

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

Noma esinye isibonelo. Ku-Postgres, ungakhansela isicelo esiqhubekayo ngokuthumela imfihlo kuxhumo oluhlukile ngaphandle kokuqinisekisa okungadingekile. Kodwa amanye amaklayenti avele athumele ukusetha kabusha kwe-TCP, okungukuthi aphula uxhumano lwenethiwekhi. Uzokwenzani uBouncer? Ngeke enze lutho. Izoqhubeka nokwenza isicelo. Uma uthole inombolo enkulu yokuxhumana edale isizindalwazi esinezicelo ezincane, ukumane unqamule uxhumano ku-Bouncer ngeke kwanele; udinga futhi ukuqedela lezo zicelo ezisebenza kusizindalwazi.

Lokhu kubhashiwe futhi le nkinga ayikahlanganiswa nomfula okhuphukayo we-Bouncer.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ngakho-ke sifinyelele esiphethweni sokuthi sidinga i-pooler yethu yokuxhuma, ezothuthukiswa, ifakwe nezimagqabhagqabha, lapho izinkinga zingalungiswa khona ngokushesha futhi okumele, yiqiniso, kufanele zibe nezintambo eziningi.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Sibeka i-multithreading njengomsebenzi oyinhloko. Sidinga ukwazi ukuphatha kahle igagasi lokuxhumana kwe-TLS okungenayo.

Ukuze senze lokhu, kwakudingeka sakhe umtapo wolwazi ohlukile obizwa ngokuthi i-Machinarium, oklanyelwe ukuchaza izimo zomshini wokuxhumana kwenethiwekhi njengekhodi elandelanayo. Uma ubheka ikhodi yomthombo ye-libpq, uzobona ezinye izingcingo eziyinkimbinkimbi ezingakubuyisela umphumela bese zithi, β€œNgishayele kamuva. Njengamanje ngine-IO okwamanje, kodwa uma i-IO ihamba ngizoba nomthwalo ku-processor. " Futhi lolu uhlelo olunamazinga amaningi. Ukuxhumana kwenethiwekhi kuvame ukuchazwa umshini wombuso. Imithetho eminingi efana nokuthi "Uma ngaphambilini ngithole unhlokweni wephakethe likasayizi N, manje ngilinde ama-N bytes," "Uma ngithumele iphakethe LOKUVUMELANISA, manje ngilinde iphakethe elinemethadatha yomphumela." Umphumela uba ikhodi enzima, ephikisayo, njengokungathi i-maze iguqulelwe ekuskeneni komugqa. Senze ukuthi esikhundleni somshini wombuso, umhleli uchaza indlela eyinhloko yokusebenzisana ngendlela yekhodi evamile edingekayo. Ukuthi nje kule khodi ebalulekile udinga ukufaka izindawo lapho ukulandelana kokwenza kudinga ukuphazanyiswa ngokulinda idatha evela kunethiwekhi, ukudlulisa umongo wokwenza kwenye i-coroutine (intambo eluhlaza). Le ndlela ifana nokuthi sibhala phansi indlela elindelwe kakhulu ku-maze ngokulandelana, bese sengeza amagatsha kuwo.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Njengomphumela, sinochungechunge olulodwa olwamukela i-TCP futhi i-round-robin idlulise ukuxhumana kwe-TPC kubasebenzi abaningi.

Kulokhu, uxhumano lweklayenti ngalunye luhlala lusebenza kuphrosesa eyodwa. Futhi lokhu kukuvumela ukuthi ukwenze kube lula ukugcina inqolobane.

Futhi ngaphezu kwalokho, sithuthukise kancane ukuqoqwa kwamaphakethe amancane kuphakethe elilodwa elikhulu ukuze sikhulule isitaki sesistimu ye-TCP.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ngaphezu kwalokho, sithuthukise ukuhlanganisa okwenziwayo ngomqondo wokuthi i-Odyssey, lapho imisiwe, ingathumela i-CANCEL kanye ne-ROLLBACK uma kwenzeka ukwehluleka kokuxhumeka kwenethiwekhi, okungukuthi, uma kungekho muntu olindele isicelo, i-Odyssey izotshela isizindalwazi ukuthi singazami gcwalisa isicelo esingamosha izinsiza eziyigugu.

Futhi noma nini lapho kungenzeka, sigcina ukuxhumana neklayenti elifanayo. Lokhu kugwema ukufaka kabusha i-application_name_add_host. Uma lokhu kungenzeka, asikho isidingo sokuthi siphinde sisethe kabusha amapharamitha adingekayo ekuxilongeni.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Sisebenzela izintshisekelo ze-Yandex.Cloud. Futhi uma usebenzisa i-PostgreSQL ephethwe futhi ufake i-pooler yokuxhumana, ungakha ukuphindaphinda okunengqondo ngaphandle, okungukuthi, usishiye, uma ufuna, usebenzisa ukuphindaphinda okunengqondo. I-bouncer ngeke ikhulule ukugeleza kokuphindaphinda okunengqondo ngaphandle.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Lesi isibonelo sokusetha ukuphindaphinda okunengqondo.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ngaphezu kwalokho, sinokusekela kokuphindaphinda ngokomzimba ngaphandle. Emafu, yiqiniso, lokhu akunakwenzeka, ngoba iqoqo lizokunikeza ulwazi oluningi kakhulu mayelana nalo. Kodwa ekufakeni kwakho, uma udinga ukuphindaphinda ngokomzimba ngokusebenzisa i-pooler yokuxhumana e-Odyssey, lokhu kungenzeka.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

I-Odyssey inokuqapha okuhambisana ngokugcwele ne-PgBouncer. Sine-console efanayo esebenzisa cishe yonke imiyalo efanayo. Uma kukhona okushodayo, thumela isicelo sokudonsa, noma okungenani inkinga ku-GitHub, futhi sizoqedela imiyalo edingekayo. Kodwa sesivele sinomsebenzi oyinhloko we-console ye-PgBouncer.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Futhi, kunjalo, sinephutha lokudlulisela phambili. Sizobuyisela iphutha elibikwe yisizindalwazi. Uzothola ulwazi mayelana nokuthi kungani ungafakwanga kusizindalwazi, hhayi nje ukuthi awufakwanga kuyo.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Lesi sici sikhutshaziwe uma kwenzeka udinga ukusebenzisana okungu-100% ne-PgBouncer. Singaziphatha ngendlela efanayo neBouncer, ukuze nje sibe sohlangothini oluphephile.

Ukuthuthukiswa

Amagama ambalwa mayelana nekhodi yomthombo ye-Odyssey.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

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

Isibonelo, kukhona imiyalo ethi "Misa isikhashana / Qalisa kabusha". Ngokuvamile zisetshenziselwa ukuvuselela isizindalwazi. Uma udinga ukubuyekeza i-Postgres, ungakwazi ukuyimisa kancane ku-pooler yokuxhumana, yenza pg_upgrade, bese uqala kabusha. Futhi ohlangothini lweklayenti kuzobukeka sengathi i-database imane yehla. Lokhu kusebenza kwalethwa kithi ngabantu abavela emphakathini. Akakabi yiqhwa, kodwa maduze konke kuzolunga. (Sekuvele kuqandisiwe)

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/73 - kakade iqhwa

Ngaphezu kwalokho, esinye sezici ezintsha ku-PgBouncer ukusekelwa kwe-SCRAM Authentication, esiphinde yalethwa kithi ngumuntu ongasebenzi ku-Yandex.Cloud. Kokubili kuwukusebenza okuyinkimbinkimbi futhi kubalulekile.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ngakho-ke, ngingathanda ukukutshela ukuthi i-Odyssey yenziwe ngani, uma kwenzeka futhi ufuna ukubhala ikhodi encane manje.

Unesisekelo somthombo we-Odyssey, esithembele kumalabhulali amabili amakhulu. Umtapo wezincwadi we-Kiwi uwukuqaliswa kwephrothokholi yomlayezo we-Postgres. Okusho ukuthi, i-proto 3 yomdabu ye-Postgres yimilayezo evamile engashintshaniswa ngabangaphambili nangemuva. Zenziwa emtatsheni wezincwadi weKiwi.

Umtapo wezincwadi weMachinarium umtapo wolwazi wokusebenzisa intambo. Isiqephu esincane sale Machinarium sibhalwe ngolimi lomhlangano. Kodwa ungethuki, kunemigqa engu-15 kuphela.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

I-Architecture ye-Odyssey. Kukhona umshini oyinhloko lapho kusebenza khona ama-coroutines. Lo mshini usebenzisa ukwamukela ukuxhumeka kwe-TCP okungenayo nokukusabalalisa phakathi kwabasebenzi.

Umphathi wamaklayenti amaningana angasebenza ngaphakathi kwesisebenzi esisodwa. Intambo eyinhloko iphinde isebenzise ikhonsoli kanye nokucutshungulwa kwemisebenzi ye-crone ukuze kususwe ukuxhumana okungasadingeki echibini.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

I-Odyssey ihlolwa kusetshenziswa i-postgres test suite ejwayelekile. Sisanda kusebenzisa ukuhlola nge-Bouncer futhi nge-Odyssey, sithola i-null div. Kunokuhlolwa okuningana okuhlobene nokufometha kwedethi okungadluli ngendlela efanayo ku-Bouncer naku-Odyssey.

Ngaphezu kwalokho, kukhona abashayeli abaningi abanokuhlolwa kwabo. Futhi sisebenzisa izivivinyo zabo ukuhlola i-Odyssey.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ngaphezu kwalokho, ngenxa yokucushwa kwethu kwe-cascade, kufanele sihlole izinyanda ezihlukahlukene: I-Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey ukuze siqiniseke ukuthi uma i-Odyssey igcina kunoma yiziphi izingxenye ze-cascade, nayo isasebenza. njengoba silindele.

Ukuqamba

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Sisebenzisa i-Odyssey ekukhiqizeni. Futhi ngeke kulunge uma ngithi yonke into iyasebenza nje. Cha, okungukuthi, yebo, kodwa hhayi njalo. Isibonelo, ekukhiqizeni konke kusanda kusebenza, khona-ke abangani bethu abavela ku-PostgreSQL Professional beza bathi sinenkumbulo evuzayo. Bakhona ngempela, sabalungisa. Kodwa kwakulula.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Sabe sesithola ukuthi i-pooler yokuxhumeka inokuxhumana okungenayo kwe-TLS noxhumo lwe-TLS oluphumayo. Futhi ukuxhumana kudinga izitifiketi zeklayenti nezitifiketi zeseva.

Izitifiketi zeseva ye-Bouncer ne-Odyssey ziphinda zifundwe i-pcache yazo, kodwa izitifiketi zeklayenti azidingi ukuthi zifundwe kabusha ku-pcache, ngoba i-Odyssey yethu ebabazekayo ekugcineni ingena ekusebenzeni kohlelo lokufunda lesi sitifiketi. Lokhu kwasimangalisa, ngoba akumthathanga isikhathi eside ukuthi amelane. Ekuqaleni ilinganise ngomugqa, kodwa ngemva kokuxhumana okufika kanyekanye okungu-20 le nkinga yazibonakalisa.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Indlela Yokufakazela Ubuqiniso Exhumekekayo yikhono lokuqinisekisa usebenzisa amathuluzi e-Lunux akhelwe ngaphakathi. Ku-PgBouncer isetshenziswa ngendlela yokuthi kube khona intambo ehlukile yokulinda impendulo evela ku-PAM futhi kukhona intambo ye-PgBouncer eyinhloko ehlinzeka ngoxhumano lwamanje futhi ingabacela ukuthi baphile kuchungechunge lwe-PAM.

Asikwenzanga lokhu ngesizathu esisodwa esilula. Sinemicu eminingi. Kungani sikudinga lokhu?

Lokhu ekugcineni kungadala izinkinga ngokuthi uma unobuqiniso be-PAM kanye nokungeyona i-PAM, khona-ke igagasi elikhulu lokuqinisekisa le-PAM lingabambezela ngokuphawulekayo ukuqinisekiswa okungeyona kwe-PAM. Lena ngenye yalezo zinto esingakazilungisi. Kodwa uma ufuna ukukulungisa, ungakwenza lokhu.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Enye ireki yayiwukuthi sinochungechunge olulodwa olwamukela konke ukuxhumana okungenayo. Bese bedluliselwa echibini labasebenzi, lapho ukuxhawulana kwe-TLS kuzokwenzeka.

Ngezansi, uma unegagasi elihambisanayo lokuxhumeka kwenethiwekhi okungu-20, wonke azokwamukelwa. Futhi ohlangothini lweklayenti i-libpq izoqala ukubika ukuphela kwesikhathi. Ngokuzenzakalelayo kubonakala kuyimizuzwana emi-000.

Uma bonke bengakwazi ukungena ku-database ngesikhathi esifanayo, ngakho-ke abakwazi ukungena ku-database, ngoba konke lokhu kungambozwa ukuzama kabusha okungeyona i-exponential.

Sifinyelele esiphethweni sokuthi sikopishe uhlelo kusuka ku-PgBouncer lapha ngeqiniso lokuthi sinciphisa inani loxhumo lwe-TCP esilwamukelayo.

Uma sibona ukuthi siyakwamukela ukuxhunywa, kodwa ekugcineni bengenaso isikhathi sokuxhawula, sibabeka emgqeni ukuze bangamoshi izinsiza ze-CPU. Lokhu kuholela eqinisweni lokuthi ukuxhawula kanyekanye kungase kungenziwa kukho konke ukuxhumana okufikile. Kodwa okungenani othile uzongena ku-database, noma ngabe umthwalo unzima kakhulu.

Umgwaqo wendlela

Yini ongathanda ukuyibona esikhathini esizayo e-Odyssey? Yini esilungele ukuzithuthukisa thina futhi yini esiyilindele emphakathini?

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kusukela ngo-Agasti 2019.

Nansi indlela imephu yomgwaqo yase-Odyssey eyayibukeka ngayo ngo-Agasti:

  • Besifuna ukuqinisekiswa kwe-SCRAM ne-PAM.
  • Besifuna ukudlulisa izicelo zokufunda kokubekwe eceleni.
  • Ngingathanda ukuqalisa kabusha ku-inthanethi.
  • Kanye nekhono lokumisa isikhashana kuseva.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ingxenye yalo mgwaqo isiqediwe, hhayi yithi. Futhi lokhu kuhle. Ngakho-ke ake sixoxe ngalokho okusele futhi sengeze okwengeziwe.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Mayelana nemibuzo eya phambili yokufunda kuphela kokubekwe eceleni? Sinezifaniso ezizovele zishise umoya ngaphandle kokufaka izicelo. Sidinga ukuthi zinikeze i-failover kanye nokushintshwa. Uma kunezinkinga kwesinye sezikhungo zedatha, ngingathanda ukuzisebenzisa ngomsebenzi othile owusizo. Ngoba asikwazi ukumisa amaphrosesa amaphakathi afanayo, inkumbulo efanayo ngokuhlukile, ngoba uma kungenjalo ukuphindaphinda ngeke kusebenze.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Empeleni, ku-Postgres, kusukela ku-10, kungenzeka ukucacisa i-session_attrs uma uxhuma. Ungakwazi ukuklelisa bonke abasingathi besizindalwazi ekuxhumekeni bese usho ukuthi kungani uya kusizindalwazi: bhala noma funda kuphela. Futhi umshayeli ngokwakhe uzokhetha umphathi wokuqala ohlwini amthanda kakhulu, ofeza izimfuneko ze-session_attrs.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Kodwa inkinga ngale ndlela ukuthi ayilawuli i-replication lag. Ungase ube nesifaniso esithile esisalele emuva isikhathi esingamukeleki sesevisi yakho. Ukuze unike amandla ukwenza okugcwele okugcwele kwemibuzo efundwayo ku-replica, empeleni sidinga ukusekela ikhono le-Odyssey lokungagijimi uma lingakwazi ukufundwa.

U-Odyssey kufanele aye ku-database ngezikhathi ezithile futhi acele ibanga lokuphindaphinda ukusuka kwesisekelo. Futhi uma isifinyelele inani elilinganiselwe, ungavumeli izicelo ezintsha ku-database, tshela iklayenti ukuthi idinga ukuqalisa kabusha ukuxhumana futhi, mhlawumbe, ukhethe omunye umsingathi ukuze enze izicelo. Lokhu kuzovumela isizindalwazi ukuthi sibuyisele ngokushesha i-replication lag bese sibuyela futhi ukuze siphendule ngesicelo.

Kunzima ukunikeza isikhathi sokuqalisa, ngoba siwumthombo ovulekile. Kodwa, ngithemba, hhayi iminyaka engu-2,5 njengozakwethu abavela ku-PgBouncer. Lesi isici engingathanda ukusibona ku-Odyssey.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Emphakathini, abantu babuze ngokwesekwa kwesitatimende esilungisiwe. Manje ungakha isitatimende esilungisiwe ngezindlela ezimbili. Okokuqala, ungenza umyalo we-SQL, okungukuthi "ulungisiwe". Ukuze siqonde lo myalo we-SQL, sidinga ukufunda ukuqonda i-SQL ohlangothini lwe-Bouncer. Lokhu kungaba ukweqisa, ngoba kuyaqina, njengoba sidinga wonke umhlaseli. Asikwazi ukuncozulula wonke umyalo we-SQL.

Kodwa kunesitatimende esilungisiwe ezingeni lephrothokholi yomlayezo ku-proto3. Futhi lena yindawo lapho ulwazi olwenziwa khona isitatimende esilungisiwe lufika ngendlela ehlelekile. Futhi singasekela ukuqonda ukuthi kokunye uxhumano lweseva iklayenti licele ukudala izitatimende ezilungiselelwe. Futhi noma ngabe umsebenzi uvaliwe, sisadinga ukugcina ukuxhumana phakathi kweseva neklayenti.

Kodwa lapha ukungqubuzana kwenkhulumomphendvulwano kuvela, ngoba othile uthi udinga ukuqonda ukuthi hlobo luni lwezitatimende ezilungiselelwe iklayenti elidala futhi wabelane ngoxhumano lweseva phakathi kwawo wonke amaklayenti adale lokhu kuxhumana kweseva, okungukuthi, ngubani owadala isitatimende esilungisiwe esinjalo.

U-Andres Freund uthe uma iklayenti liza kuwe eselivele lidale isitatimende esilungisiwe kwenye uxhumano lweseva, bese udala yona. Kodwa kubonakala kungalungile kancane ukwenza imibuzo ku-database esikhundleni seklayenti, kodwa ngokombono womthuthukisi obhala umthetho olandelwayo wokuxhumana ne-database, kungaba lula uma evele anikezwe uxhumano lwenethiwekhi lapho. kunombuzo onjalo olungisiwe.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Futhi esinye isici okudingeka sisisebenzise. Manje sinokuqapha okuhambisana ne-PgBouncer. Singabuyisela isilinganiso sesikhathi sokwenza umbuzo. Kodwa isikhathi esijwayelekile yizinga lokushisa elijwayelekile esibhedlela: ezinye ziyabanda, ezinye zifudumele - ngokwesilinganiso, wonke umuntu unempilo. Akulona iqiniso.

Kudingeka sisebenzise ukwesekwa kwamaphesenti angabonisa ukuthi kukhona imibuzo ehamba kancane emosha izinsiza futhi enze ukuqapha kwamukeleke kakhulu.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Okubaluleke kakhulu ukuthi ngifuna inguqulo 1.0 (Inguqulo 1.1 isivele ikhululiwe). Iqiniso liwukuthi i-Odyssey manje isikunguqulo 1.0rc, okungukuthi ikhandidethi lokukhululwa. Futhi zonke izinkinga engizibalile zalungiswa ngenguqulo efanayo ncamashi, ngaphandle kokuvuza kwenkumbulo.

Ngabe inguqulo 1.0 izosho ukuthini kithi? Sikhipha i-Odyssey ezisekelweni zethu. Isivele isebenza kuzinqolobane zethu zolwazi, kodwa lapho ifinyelela iphuzu lezicelo eziyi-1 ngomzuzwana, khona-ke singasho ukuthi lena inguqulo yokukhululwa futhi lena inguqulo engabizwa ngokuthi i-000.

Abantu abambalwa emphakathini bacele ukuthi inguqulo 1.0 ifake isikhashana kanye ne-SCRAM. Kodwa lokhu kuzosho ukuthi sizodinga ukukhipha inguqulo elandelayo ekukhiqizeni, ngoba akukho SCRAM noma ukumisa isikhashana okungakabulawa. Kodwa, cishe, le nkinga izoxazululwa ngokushesha okukhulu.

Imephu yomgwaqo ye-Odyssey: yini enye esiyifunayo ku-pooler yokuxhumana. U-Andrey Borodin (2019)

Ngilinde isicelo sakho sokudonsa. Ngingathanda futhi ukuzwa ukuthi yiziphi izinkinga onazo ngeBouncer. Ake sixoxe ngazo. Mhlawumbe singasebenzisa imisebenzi ethile oyidingayo.

Isiphetho sengxenye yami, ngithanda ukukulalela. Ngiyabonga!

Imibuzo yakho

Uma ngimisa elami igama_lesicelo, ingabe lizodluliselwa kahle, okuhlanganisa nokuhlanganisa okwenziwayo e-Odyssey?

I-Odyssey noma i-Bouncer?

E-Odyssey. Ku-Bouncer kuyaphonswa.

Sizokwenza isethi.

Futhi uma uxhumano lwami lwangempela lweqa kokunye ukuxhumana, ingabe luzodluliselwa?

Sizokwenza isethi yawo wonke amapharamitha asohlwini. Angazi uma isicelo_igama likulolu hlu. Ngicabanga ukuthi ngimbone lapho. Sizosetha wonke amapharamitha afanayo. Ngesicelo esisodwa, isethi izokwenza konke okufakwe iklayenti ngesikhathi sokuqalisa.

Siyabonga, Andrey, ngombiko! Umbiko omuhle! Ngiyajabula ukuthi i-Odyssey ithuthuka ngokushesha futhi ngokushesha njalo ngeminithi. Ngifuna ukuqhubeka kanje. Sesikucelile kakade ukuthi ube noxhumano lwemithombo yedatha eminingi ukuze i-Odyssey ikwazi ukuxhuma kudathabhethi ehlukene ngesikhathi esisodwa, okungukuthi isigqila esiyinhloko, bese ixhuma ngokuzenzakalelayo kunkosi entsha ngemva kokuhluleka.

Yebo, kubonakala sengathi ngiyayikhumbula le ngxoxo. Manje kunezindawo eziningi zokugcina. Kodwa akukho ukushintsha phakathi kwabo. Ngasohlangothini lwethu, kufanele sivotele iseva ukuthi isaphila futhi siqonde ukuthi kwenzeke iphutha, ngubani ozobiza pg_recovery. Nginendlela ejwayelekile yokuqonda ukuthi asizange size kumphathi. Futhi kufanele siqonde ngandlela-thile emaphutheni noma ini? Okungukuthi, umbono uyathakazelisa, kuyaxoxwa ngawo. Bhala amazwana amaningi. Uma unabasebenzi abazi u-C, kuhle lokho.

Indaba yokukala kuzo zonke izifaniso nayo iyasithakazelisa, ngoba sifuna ukwenza ukwamukelwa kwamaqoqo aphindaphindwe kube lula ngangokunokwenzeka kubathuthukisi bohlelo lokusebenza. Kodwa lapha ngithanda ukuphawula okwengeziwe, okungukuthi ukuthi kwenziwa kanjani, ukuthi kwenziwa kanjani kahle.

Umbuzo umayelana nokuphindaphinda. Kuvele ukuthi unenkosi kanye nezifaniso eziningana. Futhi kuyacaca ukuthi baya esifanekisweni izikhathi ezingaphansi kuka-master ukuze baxhumane, ngoba bangase babe nokungafani. Uthe umehluko kuma-data ungaba ngendlela yokuthi ngeke ugculise ibhizinisi lakho futhi ngeke uye lapho kuze kube iphinde yaphindwa. Ngesikhathi esifanayo, uma ungazange uye lapho isikhathi eside, bese uqala ukuya, khona-ke idatha edingekayo ngeke itholakale ngokushesha. Okusho ukuthi, uma sihlala siya ku-master, khona-ke i-cache ekhona iyafudumala, kodwa ku-replica i-cache iyancipha kancane.

Yebo kuyiqiniso. I-pcache ngeke ibe namabhulokhi wedatha oyifunayo, i-cache yangempela ngeke ibe nolwazi mayelana namatafula owafunayo, izinhlelo ngeke zibe nemibuzo ehluziwe, ngeke kube khona lutho.

Futhi uma unohlobo oluthile lweqoqo, futhi ungeza i-replica entsha lapho, khona-ke ngenkathi iqala, yonke into imbi kuyo, okungukuthi ikhulisa inqolobane yayo.

Ngiwutholile umqondo. Indlela efanele kungaba ukusebenzisa iphesenti elincane lemibuzo kusifaniso kuqala, esingafudumeza inqolobane. Uma sikhuluma nje, sinesimo sokuthi kufanele sisale ngemuva kwenkosi ingakapheli imizuzwana eyi-10. Futhi lesi simo asifakiwe ku-wave eyodwa, kodwa ngokushelelayo kwamanye amaklayenti.

Yebo, khulisa isisindo.

Umqondo omuhle lona. Kodwa okokuqala sidinga ukwenza lokhu kuvala. Okokuqala sidinga ukuvala, bese sizocabanga ngendlela yokuvula. Lesi isici esihle sokuvumela ngokushelelayo.

I-Nginx inale nketho slowly start kuqoqo leseva. Futhi kancane kancane uyandisa umthwalo.

Yebo, umbono omuhle, sizowuzama uma sifika kuwo.

Source: www.habr.com

Engeza amazwana