Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

M'nkhani yake, Andrey Borodin akuwuzani momwe adaganizira zomwe zinachitikira PgBouncer scaling popanga pooler yolumikizira. Odyssey, momwe adazitulutsa popanga. Kuphatikiza apo, tikambirana ntchito za pooler zomwe tikufuna kuziwona m'matembenuzidwe atsopano: ndikofunikira kwa ife osati kungophimba zosowa zathu, koma kukulitsa gulu la ogwiritsa ntchito. Odyssey.

Video:

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Moni nonse! Dzina langa ndine Andrew.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ku Yandex, ndikupanga ma database otseguka. Ndipo lero tili ndi mutu wokhudza kulumikizana kwa pooler.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ngati mukudziwa kuyimba kugwirizana pooler mu Russian, ndiuzeni. Ndikufunadi kupeza nthawi yabwino yaukadaulo yomwe iyenera kukhazikitsidwa m'mabuku aukadaulo.

Mutuwu ndi wovuta kwambiri, chifukwa m'ma database ambiri cholumikizira cholumikizira chimamangidwa ndipo simuyenera kudziwa za izi. Zokonda zina, ndithudi, zili paliponse, koma mu Postgres izi sizikugwira ntchito. Ndipo mofananira (pa HighLoad ++ 2019) pali lipoti la Nikolai Samokhvalov pakukhazikitsa mafunso ku Postgres. Ndipo ndikumvetsetsa kuti anthu abwera kuno omwe adakonza kale zopempha mwangwiro, ndipo awa ndi anthu omwe akukumana ndi mavuto osowa kwambiri okhudzana ndi intaneti, kugwiritsa ntchito zipangizo. Ndipo m’madera ena zingakhale zovuta kwambiri m’lingaliro lakuti mavutowo sawonekeratu.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Yandex ili ndi Postgres. Ntchito zambiri za Yandex zimakhala mu Yandex.Cloud. Ndipo tili ndi ma petabytes angapo a data omwe amapanga zopempha zosachepera miliyoni imodzi pamphindikati ku Postgres.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo timapereka gulu lofananira la mautumiki onse - iyi ndiye mfundo yayikulu ya node, zofananira ziwiri zanthawi zonse (zofanana ndi zofananira), zosunga zobwezeretsera, kukulitsa zopempha zowerengera pazofananira.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Node iliyonse yamagulu ndi Postgres, pomwe, kuwonjezera pa Postgres ndi machitidwe owunikira, cholumikizira cholumikizira chimayikidwanso. Cholumikizira cholumikizira chimagwiritsidwa ntchito pomanga mipanda komanso cholinga chake chachikulu.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Kodi cholinga chachikulu cholumikizirana ndi chiyani?

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Postgres imatenga njira yogwirira ntchito ndi database. Izi zikutanthauza kuti kulumikizana kumodzi ndi njira imodzi, Postgres backend imodzi. Ndipo pali ma cache ambiri osiyanasiyana kumbuyoku, omwe ndi okwera mtengo kwambiri kuti apange maulumikizidwe osiyanasiyana.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Komanso, pali mndandanda mu code ya Postgres yotchedwa procArray. Lili ndi deta yofunikira yokhudzana ndi maukonde. Ndipo pafupifupi ma aligorivimu onse a procArray ali ndi zovuta zofananira, amadutsa mumitundu yonse yolumikizira maukonde. Ndikuyenda mwachangu, koma ndi ma network omwe akubwera, zinthu zimakwera mtengo. Ndipo zinthu zikakwera mtengo pang'ono, mumatha kulipira mtengo wokwera kwambiri pamalumikizidwe ambiri apaintaneti.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Pali njira zitatu zomwe zingatheke:

  • Kumbali yofunsira.
  • Kumbali ya database.
  • Ndipo pakati, ndiye kuti, kuphatikiza zonse zotheka.

Tsoka ilo, pooler yomangidwira pano ikukonzedwa. Anzanu ku PostgreSQL Professional amachita izi makamaka. Pamene izo zidzawonekera ndizovuta kulosera. Ndipo kwenikweni, tili ndi njira ziwiri zopangira chisankho cha womanga. Izi ndi dziwe lakumbali la ntchito komanso dziwe la proxy.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Pogwiritsira ntchito-mbali dziwe ndiye njira yosavuta. Ndipo pafupifupi madalaivala onse amakasitomala amakupatsirani njira: kuyimilira mamiliyoni amalumikizidwe anu mu code ngati maulumikizidwe angapo ku database.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Pali vuto ndi mfundo yakuti panthawi ina mukufuna kukweza kumbuyo, mukufuna kuyiyika pamakina ambiri.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndiye mukuzindikirabe kuti muli ndi magawo angapo opezeka, malo angapo a data. Ndipo njira yophatikizira mbali ya kasitomala imabweretsa ziwerengero zazikulu. Zazikuluzikulu zimakhala pafupifupi 10 zolumikizira. Uwu ndi m'mphepete womwe ungagwire ntchito bwino.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ngati tilankhula za ophatikiza ma proxy, ndiye kuti pali awiri omwe amatha kuchita zinthu zambiri. Iwo sali ophatikizana okha. Ndiwophatikiza + magwiridwe antchito abwino kwambiri. Izi pgpool ΠΈ Wothandizira Wothandizira.

Koma, mwatsoka, si aliyense amene amafunikira izi zowonjezera. Ndipo zimatsogolera ku mfundo yoti ophatikiza amathandizira kugawana magawo, mwachitsanzo, kasitomala mmodzi wobwera, kasitomala wotuluka ku database.

Izi sizoyenera kwambiri pantchito zathu, chifukwa chake timagwiritsa ntchito PgBouncer, yomwe imagwiritsa ntchito kugawana zinthu, mwachitsanzo, kulumikizana kwa seva kumajambulidwa ku kulumikizana kwamakasitomala panthawi yonseyi.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo pa katundu wathu - ndi zoona. Koma pali mavuto angapo.Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Mavuto amayamba mukafuna kudziwa gawo, chifukwa kulumikizana konse komwe kumabwera ndi komweko. Aliyense adabwera ndi loopback ndipo mwanjira ina zimakhala zovuta kutsatira gawoli.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Zachidziwikire mutha kugwiritsa ntchito application_name_add_host. Iyi ndi njira ya mbali ya Bouncer yowonjezerera adilesi ya IP ku application_name. Koma application_name imayikidwa ndi kulumikizana kwina.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Pa tchatichi, pomwe mzere wachikasu ndi zopempha zenizeni, komanso pomwe mzere wabuluu ndi zopempha zomwe zimawulukira ku database. Ndipo kusiyana uku ndikukhazikitsa kwa application_name, komwe kumangofunika kutsatira, koma sikuli kwaulere.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Kuphatikiza apo, Bouncer sangathe kuchepetsa dziwe limodzi, mwachitsanzo, kuchuluka kwa zolumikizirana ndi wogwiritsa ntchito, pa database.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Kodi izi zimabweretsa chiyani? Muli ndi ntchito yodzaza yolembedwa mu C ++ ndi kwinakwake pafupi ndi ntchito yaying'ono pa node yomwe sichita cholakwika chilichonse ndi maziko, koma woyendetsa wake amapenga. Imatsegula maulumikizidwe 20 ndipo china chilichonse chidikirira. Ngakhale code yanu ndi yolondola.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Zachidziwikire, tidalemba kachidutswa kakang'ono ka Bouncer komwe kadawonjezera izi, mwachitsanzo, kuchepetsa makasitomala kudziwe.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Zingakhale zotheka kuchita izi kumbali ya Postgres, mwachitsanzo, kuchepetsa maudindo omwe ali mu database ku chiwerengero cha maulumikizidwe.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Koma ndiye mumataya kuthekera komvetsetsa chifukwa chake mulibe zolumikizana ndi seva. PgBouncer sikutaya cholakwika cholumikizira, nthawi zonse imabweretsa zomwezo. Ndipo simungamvetsetse: mwina mawu anu achinsinsi asintha, mwina database idangotsika, mwina china chake chalakwika. Koma palibe matenda. Ngati gawoli silingakhazikitsidwe, simudzadziwa chifukwa chake silingachitike.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Panthawi ina, mumayang'ana ma graph a pulogalamuyo ndikuwona kuti ntchitoyo sikugwira ntchito.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Yang'anani pamwamba ndikuwona kuti Bouncer ili ndi ulusi umodzi. Ichi ndi nthawi yosinthira moyo wautumiki. Mukumvetsetsa kuti mukukonzekera kukulitsa nkhokwe mu chaka ndi theka, ndipo muyenera kukulitsa pooler.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Tafika pamapeto kuti tikufunika ma PgBouncers ambiri.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

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

Bouncer yasinthidwa pang'ono.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo adazipanga kuti ma Bouncers angapo akwezedwe ndikugwiritsanso ntchito doko la TCP. Ndipo kale opaleshoni dongosolo basi anasamutsa ukubwera TCP kugwirizana pakati pawo ndi round-robin'om.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Izi ndi zowonekera kwa makasitomala, mwachitsanzo, zikuwoneka ngati muli ndi Bouncer imodzi, koma muli ndi magawo olumikizana opanda pake pakati pa ma Bouncer.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo nthawi ina, mutha kuwona kuti ma Bouncers atatuwa aliyense amadya pachimake chake ndi 3%. Mufunika ma Bouncer angapo. Chifukwa chiyani?

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Chifukwa muli ndi TLS. Muli ndi kulumikizana kobisika. Ndipo ngati muyika benchmark Postgres ndi popanda TLS, mupeza kuti kuchuluka kwa maulumikizidwe okhazikika kumatsika pafupifupi maulalo awiri akulu ndi kubisa komwe kumathandizidwa, chifukwa kugwirana chanza kwa TLS kumawononga zida za CPU.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo pamwamba, mutha kuwona ntchito zingapo za cryptographic zomwe zimachitidwa panthawi yolumikizana ndi omwe akubwera. Popeza kuti pulayimale yathu imatha kusinthana pakati pa malo omwe alipo, mafunde olumikizana omwe akubwera ndizochitika zofananira. Ndiko kuti, pazifukwa zina, pulayimale yakale sinapezeke, katundu wonsewo anatumizidwa kumalo ena a data. Onse adzabwera kudzapereka moni ku TLS nthawi imodzi.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo kuchuluka kwa TLS kugwirana chanza sikungamulonjere Bouncer kale, koma kufinya kukhosi kwake. Kuchuluka kwa maulumikizidwe omwe akubwera atha kukhala osakhazikika chifukwa chakutha kwa nthawi. Ngati mutayesanso kumunsi popanda kubwereza kwachidziwitso, iwo sangabwererenso mobwerezabwereza mumayendedwe ogwirizana.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Nachi chitsanzo cha 16 PgBouncers chomwe chimanyamula ma cores 16 pa 100%.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Tafika ku Cascading PgBouncer. Uku ndiye kasinthidwe kabwino kwambiri komwe tingakwaniritse pa Bouncer katundu wathu. Ma Bouncer athu akunja amatumizira TCP kugwirana chanza, ndipo ma Bouncer amkati amagwira ntchito limodzi, kuti asawononge kwambiri kulumikizana kwakunja.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Mu kasinthidwe uku, kuyambiranso kofewa ndikotheka. Mutha kuyambitsanso ma Bouncer onsewa 18 amodzi ndi amodzi. Koma kusunga kasinthidwe koteroko ndikovuta. Oyang'anira makina, DevOps, ndi anthu omwe ali ndi udindo pa seva iyi sangasangalale kwambiri ndi dongosololi.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Zikuwoneka kuti zosintha zathu zonse zitha kukwezedwa pamalo otseguka, koma Bouncer sichikuthandizira bwino. Mwachitsanzo, kuthekera koyendetsa ma PgBouncers angapo padoko lomwelo kudachitika mwezi wapitawo. Pempho kukoka ndi mbali imeneyi anali zaka zingapo zapitazo.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

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

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

Kapenanso chitsanzo chimodzi. Mu Postgres, mutha kuletsa zopempha potumiza chinsinsi ku kulumikizana kwina popanda kutsimikizika kowonjezera. Koma makasitomala ena amangotumiza kukonzanso kwa TCP, mwachitsanzo, amaphwanya maukonde. Kodi Bouncer achita chiyani ndi izi? Sangachite kalikonse. Idzapitiliza kuchita pempholo. Ngati mwalandira maulumikizidwe ambiri omwe adayika maziko ndi zopempha zazing'ono, ndiye kungochotsa kulumikizana kuchokera ku Bouncer sikungakhale kokwanira, muyeneranso kumaliza zopempha zomwe zikuyenda mu database.

Izi zasinthidwa ndipo nkhaniyi sinaphatikizidwebe kumtunda kwa Bouncer.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo kotero ife tinafika pa mfundo yakuti tifunika pooler wathu kugwirizana, amene adzapangidwa, zigamba, momwe zidzathere mwamsanga kukonza mavuto ndi amene, ndithudi, ayenera Mipikisano threaded.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Timayika multithreading ngati ntchito yayikulu. Tiyenera kukwanitsa kuthana ndi mafunde a ma TLS omwe akubwera.

Kuti tichite izi, tidayenera kupanga laibulale yosiyana yotchedwa Machinarium, yomwe idapangidwa kuti ifotokoze momwe makina amalumikizirana ndi ma netiweki ngati serial code. Mukayang'ana pa libpq source code, muwona mafoni ovuta omwe angakubwezereni ndikunena kuti, "Ndiyimbireni mtsogolo. Pakali pano ndili ndi IO pakalipano, koma IO ikadutsa, ndili ndi katundu pa purosesa. Ndipo iyi ndi ndondomeko yamagulu ambiri. Kuyanjana kwa maukonde nthawi zambiri kumafotokozedwa ndi makina aboma. Malamulo ambiri monga "Ngati ndinalandira kale mutu wa paketi wa kukula kwa N, ndiye tsopano ndikuyembekezera N bytes", "Ngati ndatumiza paketi ya SYNC, ndiye tsopano ndikudikirira paketi yokhala ndi zotsatira za metadata." Zimakhala zovuta zotsutsana nazo, ngati kuti maze adasinthidwa kukhala jambulani mzere. Tidapanga kuti m'malo mwa makina aboma, wopanga mapulogalamu amafotokozera njira yayikulu yolumikizirana mwanjira ya code yofunikira wamba. Pokhapokha mu code yofunikirayi, muyenera kuyika malo omwe kutsata kumayenera kusokonezedwa podikirira deta kuchokera pa netiweki, kupititsa zomwe zikuchitika ku coroutine ina (ulusi wobiriwira). Njirayi ndi yofanana ndi yomwe timalemba njira yomwe tikuyembekezera kwambiri pamzerewu, ndikuwonjezera nthambi zake.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Zotsatira zake, tili ndi ulusi umodzi womwe umapangitsa kuti TCP ivomereze ndipo robin yozungulira imadutsa kulumikizana kwa TPC kwa antchito ambiri.

Pankhaniyi, kulumikizana kulikonse kwa kasitomala nthawi zonse kumayendera purosesa imodzi. Ndipo izi zimakupatsani mwayi kuti mupange cache-wochezeka.

Kupatula apo, tasintha pang'ono kusonkhanitsa mapaketi ang'onoang'ono kukhala paketi imodzi yayikulu kuti titsitse stack ya TCP.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Kuonjezera apo, tapititsa patsogolo kugwirizanitsa kotero kuti Odyssey, ikakonzedwa, ikhoza kutumiza CANCEL ndi ROLLBACK ngati vuto la intaneti likulephera, mwachitsanzo, ngati palibe amene akuyembekezera pempho, Odyssey adzauza database kuti asayese kukwaniritsa. pempho limene lingawononge chuma chamtengo wapatali.

Ndipo ngati kuli kotheka, timasunga zolumikizana ndi kasitomala yemweyo. Izi zimapewa kuyikanso application_name_add_host. Ngati ndi kotheka, ndiye kuti tilibe kukonzanso kowonjezera kwa magawo omwe amafunikira pakuwunika.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Timagwira ntchito mokomera Yandex.Cloud. Ndipo ngati mukugwiritsa ntchito PostgreSQL yoyendetsedwa ndipo muli ndi cholumikizira cholumikizira, mutha kupanga zobwereza zomveka kunja, mwachitsanzo, tisiyeni ngati mukufuna, pogwiritsa ntchito kubwereza koyenera. Bouncer kunja kwa kubwereza zomveka sikudzapereka.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ichi ndi chitsanzo cha kukhazikitsa zobwerezabwereza zomveka.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Kuonjezera apo, tili ndi chithandizo cha kubwereza kwa thupi kunja. Mu Mtambo, ndithudi, sizingatheke, chifukwa ndiye tsango lidzakupatsani inu zambiri zambiri za iyo yokha. Koma pakuyika kwanu, ngati mukufuna kubwerezabwereza kudzera pa pooler yolumikizira ku Odyssey, ndizotheka.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Odyssey ili ndi kuwunika kogwirizana kwathunthu ndi PgBouncer. Tili ndi kutonthoza komweko komwe kumapereka pafupifupi malamulo onse omwewo. Ngati china chake chikusowa, tumizani pempho kukoka, kapena vuto pa GitHub, tidzamaliza malamulo ofunikira. Koma tili ndi ntchito yayikulu ya PgBouncer console.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo ndithudi tili ndi zolakwika kutumiza. Tidzabwezera zolakwika zomwe zidanenedwa ndi maziko. Mudzapeza zambiri chifukwa chake simuli m'munsi, osati kuti mulibemo.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Izi ndizozimitsidwa ngati mungafunike 100% yogwirizana ndi PgBouncer. Titha kukhala ngati Bouncer, mwina.

Development

Mawu ochepa okhudza gwero la Odyssey.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

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

Mwachitsanzo, pali malamulo a "Imani / Yambitsaninso". Nthawi zambiri amagwiritsidwa ntchito kukonza database. Ngati mukufuna kukweza Postgres, mutha kuyimitsa kaye polumikizira, chitani pg_upgrade, ndikuyambiranso. Ndipo kuchokera kumbali ya kasitomala, zidzawoneka ngati nkhokwe ikungochepa. Izi zidabweretsedwa kwa ife ndi anthu ammudzi. Iye sanafe, koma posachedwapa zonse zidzachitika. (wamwalira kale)

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/73 - wakufa kale

Kuonjezera apo, chimodzi mwa zinthu zatsopano mu PgBouncer ndi SCRAM Authentication support, yomwe inabweretsedwanso kwa ife ndi munthu yemwe sagwira ntchito ku Yandex.Cloud. Zonsezi ndizovuta komanso zofunikira.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Chifukwa chake, ndikufuna ndikuuzeni zomwe Odyssey amapangidwa nazo, ngati mungafunenso kulemba nambala pano.

Muli ndi maziko oyamba a Odyssey, omwe amadalira malaibulale akulu awiri. Laibulale ya Kiwi ndikukhazikitsa ma protocol a Postgres. Ndiko kuti, Postgres 'wamba proto 3 ndi mauthenga wamba kuti frontend ndi backends akhoza kusinthana. Amagwiritsidwa ntchito mu library ya Kiwi.

Laibulale ya Machinarium ndi laibulale yokhazikitsa ulusi. Chidutswa chaching'ono cha Machinarium ichi chalembedwa mu assembler. Koma musade nkhawa, pali mizere 15 yokha.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Zomangamanga za Odyssey. Pali makina akuluakulu oyendetsa ma coroutines. Makinawa amagwiritsa ntchito kuvomereza kulumikizidwa kwa TCP ndikugawa pakati pa antchito.

Mwa wogwira ntchito m'modzi, wothandizira makasitomala angapo amatha kugwira ntchito. Komanso mu ulusi waukulu, cholumikizira ndi kukonza ntchito za crone kuchotsa zolumikizira zomwe sizikufunikanso mu dziwe zikuzungulira.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Odyssey amayesedwa pogwiritsa ntchito standard Postgres test suite. Timangoyendetsa cheke kudzera pa Bouncer ndikudutsa Odyssey, timapeza null div. Pali mayeso angapo okhudzana ndi masanjidwe amasiku omwe amalephera chimodzimodzi mu Bouncer ndi Odyssey.

Kuphatikiza apo, pali madalaivala ambiri omwe ali ndi mayeso awoawo. Ndipo timagwiritsa ntchito mayeso awo kuyesa Odyssey.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Komanso, chifukwa cha kasinthidwe kathu, tiyenera kuyesa mitolo yosiyanasiyana: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey kuti titsimikize kuti ngati Odyssey ili mu gawo lililonse la cascade, imagwiranso ntchito monga momwe amayembekezera. .

Makoswe

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Timagwiritsa ntchito Odyssey popanga. Ndipo sizingakhale bwino ndikanena kuti zonse zimayenda bwino. Ayi, i.e. inde, koma osati nthawi zonse. Mwachitsanzo, popanga zonse zidangogwira ntchito, ndiye anzathu ochokera ku PostgreSQL Professional adabwera nati tinali ndi vuto lokumbukira. Iwo analidi, tinawakonza. Koma zinali zosavuta.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Kenako tidapeza kuti cholumikizira cholumikizira chili ndi zolumikizira za TLS zomwe zikubwera komanso zolumikizira zotuluka za TLS. Ndipo maulumikizidwe amafunikira ziphaso za kasitomala ndi satifiketi ya seva.

Ziphaso za seva ya Bouncer ndi Odyssey zimawerengedwanso ndi pcache, koma ziphaso zamakasitomala siziyenera kuwerengedwanso kuchokera ku pcache, chifukwa Odyssey yathu yowopsa imakhazikika pamachitidwe owerengera satifiketi iyi. Izi zinatidabwitsa, chifukwa sanapume nthawi yomweyo. Poyamba, idakula motsatana, ndipo pambuyo pa kulumikizana 20 komwe kukubwera nthawi imodzi, vutoli lidawonekera.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

plugable Authentication Method ndikutha kutsimikizira ndi zida zomangidwira za lunux. Mu PgBouncer, imayendetsedwa m'njira yoti pali ulusi wosiyana womwe ukuyembekezera yankho kuchokera ku PAM ndipo pali ulusi waukulu wa PgBouncer womwe umagwiritsa ntchito kugwirizana komweko ndipo ukhoza kuwafunsa kuti azikhala mu ulusi wa PAM.

Sitinagwiritse ntchito izi pa chifukwa chimodzi chophweka. Tili ndi mitsinje yambiri. N’chifukwa chiyani tikuzifuna?

Zotsatira zake, izi zitha kubweretsa mavuto chifukwa ngati muli ndi kutsimikizika kwa PAM komanso kutsimikizira kopanda PAM, ndiye kuti kutsimikizika kwakukulu kwa PAM kumatha kuchedwetsa kutsimikizika kopanda PAM. Ndi chimodzi mwa zinthu zomwe sitinazikonze. Koma ngati mukufuna kukonza, mutha kuchita izi.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Chojambula china chinali chakuti tili ndi ulusi umodzi womwe umavomereza zolumikizira zonse zomwe zikubwera. Kenako amasamutsidwa ku dziwe la ogwira ntchito, komwe kugwirana chanza kwa TLS kudzachitika.

Zotsatira zake, ngati muli ndi mafunde ogwirizana a maukonde 20, onse adzalandiridwa. Ndipo kumbali ya kasitomala, libpq iyamba kupereka lipoti latha. Mwachikhazikitso, zimakhala ngati masekondi atatu pamenepo.

Ngati onse sangathe kulowa m'munsi nthawi imodzi, ndiye kuti sangathe kulowa m'munsi, chifukwa zonsezi zikhoza kutsekedwa ndi kuyesa kosawerengeka.

Tidamaliza kukopera dongosolo la PgBouncer pano kuti tichepetse kuchuluka kwa ma TCP omwe timavomereza.

Ngati tiwona kuti tikuvomereza kulumikizana, koma alibe nthawi yogwirana chanza pamapeto pake, timawayika pamzere kuti asawononge zida za CPU. Izi zimapangitsa kuti kugwirana chanza nthawi imodzi sikungachitike pazolumikizana zonse zomwe zafika. Koma osachepera wina adzalowa mu database, ngakhale katunduyo ndi wamphamvu mokwanira.

Roadmap

Kodi mungakonde kuwona chiyani m'tsogolomu ku Odyssey? Kodi ndife okonzeka kudzitukumula tokha ndipo tikuyembekezera chiyani kwa anthu ammudzi?

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Kwa Ogasiti 2019.

Izi ndi zomwe misewu ya Odyssey inkawoneka mu Ogasiti:

  • Tinkafuna kutsimikizika kwa SCRAM ndi PAM.
  • Tinkafuna kutumiza zopempha zowerengera ku standby.
  • Ndikufuna kuyambitsanso intaneti.
  • Komanso kutha kuyimitsa pa seva.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Theka la mapuwa apangidwa, osati ndi ife. Ndipo izi ndi zabwino. Ndiye tiyeni tikambirane zomwe zatsala ndikuwonjezera zina.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Zokhudza zowerengera zongowerenga zokha mpaka zoyimilira? Tili ndi zofananira zomwe, popanda kukwaniritsa zopempha, zimangotenthetsa mpweya. Tikufuna kuti apereke kulephera ndi kusintha. Pakakhala zovuta m'malo osungiramo data, ndikufuna kuti ndiwagwiritse ntchito zina zothandiza. Chifukwa sitingathe kukhazikitsa mapurosesa apakati omwewo, kukumbukira komweko mwanjira ina, chifukwa kubwereza sikungagwire ntchito mwanjira ina.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

M'malo mwake, mu Postgres, kuyambira 10, ndizotheka kufotokoza gawo_attrs polumikizana. Mutha kulembetsa nkhokwe zonse zomwe zili mumgwirizanowu ndikunena chifukwa chake mukupita ku database: lembani kapena werengani kokha. Ndipo dalaivala mwiniwakeyo adzasankha wolandira woyamba pamndandanda womwe amakonda kwambiri, womwe umakwaniritsa zofunikira za session_attrs.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Koma vuto ndi njira iyi ndikuti sikuwongolera kubwerezabwereza. Mutha kukhala ndi mtundu wina wofananira womwe watsalira ndi nthawi yosavomerezeka yautumiki wanu. Kuti tikwaniritse zopempha zowerenga pa chofananira, tifunika kuthandizira ku Odyssey kuthekera kosagwira ntchito ngati sikungathe kuwerenga.

Odyssey amayenera kupita ku database nthawi ndi nthawi ndikupempha mtunda wobwereza kuchokera ku pulayimale. Ndipo ngati zafika polekezera, musalole zopempha zatsopano mu database, auzeni kasitomala kuti muyenera kuyambitsanso maulumikizidwe ndipo, mwina, sankhani wolandira wina kuti apereke zopempha. Izi zilola kuti databaseyo ibwezeretse mwachangu kubwereza ndikubwereranso kuti muyankhe ndi funso.

Ndizovuta kutchula masiku okhazikitsa, chifukwa ndi gwero lotseguka. Koma, ndikuyembekeza, osati zaka 2,5 monga anzanga ochokera ku PgBouncer. Izi ndi zomwe ndikufuna kuwona ku Odyssey.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

M'deralo, anthu adafunsa za chithandizo chokonzekera mawu. Tsopano mutha kupanga mawu okonzekera m'njira ziwiri. Choyamba, mutha kupereka lamulo la SQL, lomwe ndi "okonzeka". Kuti timvetse lamulo la SQL ili, tifunika kuphunzira momwe tingamvetsetsere SQL kumbali ya Bouncer. Izi zitha kukhala zochulukira chifukwa ndizochulukira chifukwa timafunikira gulu lonse. Sitingathe kufotokozera lamulo lililonse la SQL.

Koma pali mawu okonzekera pamlingo wa protocol wa proto3. Ndipo awa ndi malo pomwe chidziwitso chomwe mawu okonzekera akupangidwa amabwera mwadongosolo. Ndipo titha kuthandizira kumvetsetsa kuti pamalumikizidwe ena a seva kasitomala amafunsa kuti apange mawu okonzekera. Ndipo ngakhale ntchitoyo itatsekedwa, tifunikabe kusunga seva ndi kasitomala zikugwirizana.

Koma apa pali kusiyana pakati pa zokambirana, chifukwa wina akunena kuti muyenera kumvetsetsa zomwe wokonzekera kasitomala adalenga ndikugawana kugwirizana kwa seva pakati pa makasitomala onse omwe adapanga kugwirizana kwa seva, mwachitsanzo, amene adapanga mawu okonzeka.

Andres Freund adanena kuti ngati kasitomala abwera kwa inu yemwe adapanga kale mawu okonzekera otere mu kulumikizana kwina kwa seva, ndiye mpangireni. Koma zikuwoneka kuti ndi zolakwika pang'ono kuchita mafunso mu database m'malo mwa kasitomala, koma kuchokera kumalingaliro a wopanga mapulogalamu omwe amalemba protocol yolumikizirana ndi nkhokwe, zingakhale bwino ngati angopatsidwa kulumikizidwa kwa netiweki. amene ali ndi pempho lokonzekera chotero.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndipo chinthu chinanso chomwe tiyenera kuchita. Tsopano tili ndi kuwunika komwe kumagwirizana ndi PgBouncer. Titha kubweza nthawi yapakati yoyankha mafunso. Koma nthawi yapakati ndi kutentha kwapakati m'chipatala: wina akuzizira, wina ndi wofunda - pafupifupi aliyense ali wathanzi. Sizoona.

Tiyenera kugwiritsa ntchito thandizo la ma percentiles, zomwe zingasonyeze kuti pali zopempha zapang'onopang'ono zomwe zimawononga chuma ndipo zingapangitse kuwunika kukhala kovomerezeka.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Chofunika kwambiri ndikuti ndikufuna mtundu 1.0 (Version 1.1 yatulutsidwa kale). Chowonadi ndi chakuti tsopano Odyssey ili mu mtundu 1.0rc, mwachitsanzo, womasulidwa. Ndipo zonse zomwe ndidazilemba zidakonzedwa ndendende ndi mtundu womwewo, kupatula kutayikira kwa kukumbukira.

Kodi mtundu 1.0 utanthauza chiyani kwa ife? Tikutulutsa Odyssey ku maziko athu. Ikuyendetsa kale pamabuku athu, koma ikafika pazifukwa za 1 pamphindikati, ndiye kuti tinganene kuti iyi ndi mtundu womasulidwa ndipo iyi ndi mtundu womwe ungatchulidwe 000.

Anthu angapo mderali apempha kuti ayime pang'ono ndi SCRAM mu mtundu 1.0. Koma izi zikutanthauza kuti tifunika kutulutsa mtundu wina kuti upangidwe, chifukwa SCRAM kapena kupuma sikunaphatikizidwebe. Koma, mwina, nkhaniyi idzathetsedwa mwachangu.

Mapu amsewu a Odyssey: ndi chiyani chinanso chomwe tikufuna kuchokera kwa wolumikizira. Andrey Borodin (2019)

Ndikuyembekezera pempho lanu kukoka. Ndipo ndikufunanso kumva zovuta zomwe muli nazo ndi Bouncer. Tiyeni tikambirane. Mwina titha kugwiritsa ntchito zina zomwe mukufuna.

Izi zikumaliza gawo langa, ndikufuna kumva kuchokera kwa inu. Zikomo!

Mafunso anu

Ngati ndiyika application_name yanga, kodi idzaponyedwa molondola, kuphatikiza pakugawana ku Odyssey?

Odyssey kapena Bouncer?

Mu Odyssey. Bouncer waponyedwa.

Tipanga seti.

Ndipo ngati kulumikizana kwanga kwenikweni kumadumphira pamalumikizidwe ena, kodi kufalikira?

Tipanga ma parameter onse omwe alembedwa. Sindikudziwa ngati application_name ili pamndandandawu. Zikuoneka kuti anamuona kumeneko. Tikhazikitsa magawo onse ofanana. Ndi pempho limodzi, setiyo idzachita zonse zomwe zinayikidwa ndi kasitomala panthawi yoyambira.

Zikomo Andrey chifukwa cha lipoti! Lipoti labwino! Ndine wokondwa kuti Odyssey ikukula mwachangu komanso mwachangu mphindi iliyonse. Ndikufuna kupitiriza zomwezo. Takufunsani kale kuti mukhale ndi malumikizano ambiri a data-source kuti Odyssey athe kulumikizana ndi ma database osiyanasiyana nthawi imodzi, i.e. mbuye wa akapolo, ndiyeno mulumikizane ndi mbuye watsopanoyo pambuyo polephera.

Inde, ndikuwoneka kuti ndikukumbukira zokambiranazo. Tsopano pali angapo storages. Koma palibe kusinthana pakati pawo. Kumbali yathu, tiyenera kufunsa seva kuti ikadali yamoyo ndikumvetsetsa kuti kulephera kwachitika, ndani adzayitana pg_recovery. Ndili ndi njira yodziwika bwino yomvetsetsa kuti sitinabwere kwa mbuye. Ndipo tiyenera kumvetsetsa mwanjira ina kuchokera ku zolakwazo kapena motani? Ndiko kuti, lingalirolo ndi losangalatsa, likukambidwa. Lembani ndemanga zambiri. Ngati muli ndi manja ogwira ntchito omwe amadziwa C, ndiye kuti izi ndizabwino kwambiri.

Nkhani yakukulitsa zofananira ndi yosangalatsanso kwa ife, chifukwa tikufuna kupanga kutengera magulu ofananirako kukhala kosavuta momwe tingathere kwa opanga mapulogalamu. Koma apa ndikufuna ndemanga zambiri, ndiye kuti, momwe mungachitire, momwe mungachitire bwino.

Funso likukhudzanso zofananira. Zikuoneka kuti muli ndi mbuye ndi angapo replicas. Ndipo zikuwonekeratu kuti amapita kofananira nthawi zambiri kuposa kwa ambuye kuti akalumikizane, chifukwa amatha kukhala ndi kusiyana. Munanena kuti kusiyana kwa data kungakhale kotero kuti bizinesi yanu siikhutiritsa ndipo simudzapita kumeneko mpaka itabwerezedwanso. Panthawi imodzimodziyo, ngati simunapite kumeneko kwa nthawi yaitali, ndiyeno mutayamba kupita, ndiye kuti deta yomwe mukufunikira sidzakhalapo nthawi yomweyo. Ndiko kuti, ngati timapita kwa mbuye nthawi zonse, ndiye kuti cache imatenthedwa pamenepo, ndipo posungirayo ndi kumbuyo pang'ono mu replica.

Inde ndi zoona. Sipadzakhala midadada ya data mu pcache yomwe mukufuna, mu cache yeniyeni sipadzakhala chidziwitso cha matebulo omwe mukufuna, sipadzakhalanso mafunso osankhidwa mu mapulani, palibe kalikonse.

Ndipo mukakhala ndi mtundu wina wa tsango, ndipo muwonjezera chofananira chatsopano pamenepo, ndiye pamene icho chikuyamba, chirichonse chimakhala choipa mmenemo, mwachitsanzo, chimakula posungira.

Ndinali ndi lingaliro. Njira yolondola ingakhale kufunsa mafunso pang'ono pazithunzizo poyamba, zomwe zingatenthetse cache. Mwachidule, tili ndi chikhalidwe choti sitiyenera kukhala opitilira masekondi 10 kumbuyo kwa mbuye. Ndipo chikhalidwe ichi sichiyenera kuphatikizidwa mu funde limodzi, koma bwino kwa makasitomala ena.

Inde, onjezerani kulemera.

Ili ndi lingaliro labwino. Koma choyamba muyenera kukhazikitsa shutdown iyi. Choyamba tiyenera kuzimitsa, ndiyeno tiganizira momwe tingayatse. Ichi ndi chachikulu mbali kuyatsa bwino.

nginx ili ndi izi slowly start mu gulu la seva. Ndipo pang’onopang’ono amaukulitsa.

Inde, lingaliro labwino, tidzayesa tikafika pamenepo.

Source: www.habr.com

Kuwonjezera ndemanga