Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Sa iyang taho, isulti kanimo ni Andrey Borodin kung giunsa nila gikonsiderar ang kasinatian sa pag-scale sa PgBouncer sa pagdesinyo sa koneksyon pooler Odyssey, samtang ilang gilukot kini ngadto sa produksyon. Dugang pa, atong hisgutan kung unsa nga mga gimbuhaton sa puller ang gusto natong makita sa mga bag-ong bersyon: importante alang kanato dili lamang sa pagtagbo sa atong mga panginahanglan, apan sa pagpalambo sa komunidad sa tiggamit Odyssey.

Video:

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Kumusta tanan! Ako diay si Andrew.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Sa Yandex, naghimo ko og mga open source database. Ug karon kami adunay usa ka hilisgutan bahin sa koneksyon pooler koneksyon.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Kung nahibal-an nimo kung giunsa pagtawag ang koneksyon pooler sa Russian, unya sultihi ako. Gusto gyud nako nga makit-an ang usa ka maayo nga termino sa teknikal nga kinahanglan matukod sa teknikal nga literatura.

Ang hilisgutan medyo komplikado, tungod kay sa daghang mga database ang koneksyon pooler gitukod ug dili nimo kinahanglan nga mahibal-an bahin niini. Siyempre, adunay pipila ka mga setting bisan asa, apan sa Postgres dili kini molihok sa ingon. Ug parehas (sa HighLoad ++ 2019) adunay usa ka taho ni Nikolai Samokhvalov bahin sa pag-set up sa mga pangutana sa Postgres. Ug sa akong nasabtan, ang mga tawo mianhi dinhi nga hingpit nang na-configure ang ilang mga pangutana, ug kini ang mga tawo nga nag-atubang sa mas talagsaon nga mga problema sa sistema nga may kalabutan sa paggamit sa network ug kahinguhaan. Ug sa pipila ka mga dapit kini mahimong lisud kaayo sa diwa nga ang mga problema dili klaro.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang Yandex adunay mga Postgres. Daghang serbisyo sa Yandex nagpuyo sa Yandex.Cloud. Ug kami adunay daghang mga petabytes sa datos nga nagmugna labing menos usa ka milyon nga mga hangyo matag segundo sa Postgres.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug naghatag kami usa ka patas nga sukaranan nga kumpol alang sa tanan nga mga serbisyo - kini ang panguna nga panguna nga node sa node, ang naandan nga duha nga mga replika (kasabay ug asynchronous), backup, pag-scale sa mga hangyo sa pagbasa sa replika.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang matag cluster node mao ang Postgres, diin, dugang sa Postgres ug mga sistema sa pag-monitor, usa ka koneksyon pooler ang gi-install usab. Ang koneksyon pooler gigamit alang sa fencing ug alang sa panguna nga katuyoan niini.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Unsa ang nag-unang katuyoan sa koneksyon pooler?

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Gisagop sa mga postgres ang usa ka modelo sa proseso kung nagtrabaho kauban ang usa ka database. Kini nagpasabot nga ang usa ka koneksyon usa ka proseso, usa ka Postgres backend. Ug sa kini nga backend adunay daghang lainlaing mga cache, nga medyo mahal aron mahimo nga lahi alang sa lainlaing mga koneksyon.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Dugang pa, ang Postgres code adunay array nga gitawag og procArray. Naglangkob kini sa sukaranan nga datos bahin sa mga koneksyon sa network. Ug hapit tanan nga mga algorithm sa pagproseso sa procArray adunay linear nga pagkakomplikado; kini nagdagan sa tibuuk nga han-ay sa mga koneksyon sa network. Kini usa ka dali nga siklo, apan sa daghang umaabot nga mga koneksyon sa network mas mahal ang mga butang. Ug kung ang mga butang mahimong labi ka mahal, mahimo ka nga magbayad usa ka taas nga presyo alang sa daghang mga koneksyon sa network.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Adunay 3 ka posible nga mga pamaagi:

  • Sa bahin sa aplikasyon.
  • Sa bahin sa database.
  • Ug sa taliwala, nga mao, ang tanan nga mga matang sa mga kombinasyon.

Ikasubo, ang built-in nga pooler karon gipauswag. Ang among mga higala sa PostgreSQL Professional kasagarang nagbuhat niini. Kanus-a kini motungha lisud matagna. Ug sa pagkatinuod, kami adunay duha ka solusyon nga mapilian sa arkitekto. Kini ang application-side pool ug proxy pool.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Application-side pool mao ang pinakasayon ​​nga paagi. Ug hapit tanan nga mga drayber sa kliyente naghatag kanimo usa ka paagi: ipakita ang milyon-milyon sa imong mga koneksyon sa code ingon daghang dosena nga koneksyon sa database.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang problema nga mitungha mao nga sa usa ka punto nga gusto nimo nga sukdon ang backend, gusto nimo nga i-deploy kini sa daghang mga virtual machine.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Dayon imong naamgohan nga duna kay daghang mga available zone, daghang mga data center. Ug ang pamaagi sa pooling sa kilid sa kliyente nagdala sa daghang mga numero. Ang mga dagko kay mga 10 ka koneksyon. Kini ang ngilit nga mahimong molihok nga normal.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Kung maghisgot kita bahin sa mga proxy pooler, nan adunay duha ka pooler nga makahimo daghang mga butang. Dili lang sila mga pooler. Sila mga pooler + mas cool nga gamit. Kini Pgpool и Crunchy-Proxy.

Apan, ikasubo, dili tanan ang nanginahanglan niining dugang nga pagpaandar. Ug kini nagdala sa kamatuoran nga ang mga pooler nagsuporta lamang sa session pooling, i.e. usa ka umaabot nga kliyente, usa ka outgoing nga kliyente sa database.

Dili kaayo kini angay alang sa among mga katuyoan, mao nga gigamit namon ang PgBouncer, nga nagpatuman sa pooling sa transaksyon, i.e. ang mga koneksyon sa server gipares sa mga koneksyon sa kliyente lamang sa gidugayon sa transaksyon.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug sa among trabaho, kini tinuod. Apan adunay pipila ka mga problema.Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Nagsugod ang mga problema kung gusto nimo nga masusi ang usa ka sesyon, tungod kay ang tanan nimo nga umaabot nga koneksyon lokal. Ang tanan miabut uban sa usa ka loopback ug sa usa ka paagi nga kini mahimong lisud nga sa pagsubay sa sesyon.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Siyempre mahimo nimong gamiton ang application_name_add_host. Kini usa ka paagi sa kilid sa Bouncer aron makadugang usa ka IP address sa application_name. Apan ang application_name gitakda sa usa ka dugang nga koneksyon.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Niini nga graph, diin ang yellow nga linya mao ang tinuod nga mga hangyo, ug diin ang asul nga linya mao ang mga hangyo nga molupad ngadto sa database. Ug kini nga kalainan mao ang tukma nga pag-instalar sa application_name, nga gikinahanglan lamang sa pagsubay, apan dili kini libre.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Dugang pa, sa Bouncer dili nimo limitahan ang usa ka pool, i.e. ang gidaghanon sa mga koneksyon sa database matag piho nga tiggamit, matag piho nga database.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Unsay hinungdan niini? Ikaw adunay usa ka loaded nga serbisyo nga gisulat sa C ++ ug sa usa ka dapit duol sa usa ka gamay nga serbisyo sa usa ka node nga dili pagbuhat sa bisan unsa nga makalilisang sa database, apan ang drayber niini nabuang. Nagbukas kini sa 20 ka koneksyon ug ang tanan maghulat. Bisan ang imong code normal.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Kami, siyempre, nagsulat usa ka gamay nga patch alang sa Bouncer nga nagdugang niini nga setting, i.e. paglimita sa mga kliyente sa pool.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Posible nga buhaton kini sa bahin sa Postgres, i.e., limitahan ang mga tahas sa database pinaagi sa gidaghanon sa mga koneksyon.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Apan nawad-an ka sa abilidad nga masabtan kung nganong wala ka'y ​​koneksyon sa server. Ang PgBouncer wala maglabay sa usa ka sayup sa koneksyon, kini kanunay nga nagbalik sa parehas nga kasayuran. Ug dili nimo masabtan: tingali ang imong password nausab, tingali ang database nawala lang, tingali adunay sayup. Apan walay diagnosis. Kung ang usa ka sesyon dili ma-establisar, dili nimo mahibal-an kung ngano nga dili kini ma-establisar.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Sa usa ka punto, imong tan-awon ang mga graph sa aplikasyon ug makita nga ang aplikasyon wala molihok.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Tan-awa ang taas ug tan-awa nga ang Bouncer usa ka sinulid. Kini usa ka pagbag-o sa kinabuhi sa serbisyo. Nahibal-an nimo nga nangandam ka sa pag-scale sa database sa usa ug tunga ka tuig, ug kinahanglan nimo nga sukdon ang pooler.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Nakaabot kami sa konklusyon nga kinahanglan namon ang daghang mga PgBouncers.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

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

Medyo natambalan na ang bouncer.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug gihimo nila kini aron daghang mga Bouncers ang mapataas pinaagi sa paggamit pag-usab sa TCP port. Ug ang operating system awtomatik nga nagbalhin sa umaabot nga mga koneksyon sa TCP tali kanila gamit ang round-robin.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Kini mao ang transparent sa mga kliyente, nga nagpasabot nga kini daw adunay usa ka Bouncer, apan ikaw adunay fragmentation sa walay pulos nga mga koneksyon tali sa running Bouncers.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug sa usa ka gutlo mahimo nimong mamatikdan nga kini nga 3 ka Bouncers matag usa mokaon sa ilang kinauyokan sa 100%. Kinahanglan nimo ang pipila ka mga Bouncer. Ngano man?

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Kay naa kay TLS. Naa kay naka-encrypt nga koneksyon. Ug kung imong gimarkahan ang mga Postgres nga adunay ug wala ang TLS, imong mahibal-an nga ang gidaghanon sa mga natukod nga koneksyon mikunhod sa hapit duha ka mga order sa kadako nga adunay pagpaandar sa pag-encrypt, tungod kay ang TLS handshake naggamit sa mga kapanguhaan sa CPU.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug sa ibabaw makita nimo ang pipila ka mga cryptographic function nga gipatuman kung adunay usa ka balud sa umaabot nga mga koneksyon. Tungod kay ang among panguna mahimo’g magbalhin taliwala sa mga magamit nga sona, usa ka balud sa umaabot nga mga koneksyon usa ka kasagaran nga kahimtang. Kana mao, sa pipila ka rason nga ang daan nga panguna wala magamit, ang tibuok nga load gipadala ngadto sa laing sentro sa datos. Magdungan silang tanan aron mangumusta sa TLS.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug ang daghang gidaghanon sa TLS handshake mahimong dili na mangumusta sa Bouncer, apan mopislit sa iyang tutunlan. Tungod sa timeout, ang balud sa umaabot nga mga koneksyon mahimong dili mabag-o. Kung sulayan nimo pag-usab ang base nga wala’y exponential backoff, dili na sila magbalikbalik sa usa ka managsama nga balud.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ania ang usa ka pananglitan sa 16 PgBouncers nga nagkarga sa 16 ka mga core sa 100%.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Miabot mi sa cascade PgBouncer. Kini ang labing kaayo nga pag-configure nga makab-ot sa among load sa Bouncer. Ang among mga external nga Bouncers gigamit para sa TCP handshake, ug ang internal nga mga Bouncers kay gigamit para sa tinuod nga pooling, para dili kaayo mabahin ang external connections.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Sa kini nga pag-configure, posible ang usa ka hapsay nga pag-restart. Mahimo nimong i-restart ang tanan niining 18 ka Bouncers sa usag usa. Apan ang pagmentinar sa ingon nga pagsumpo medyo lisud. Ang Sysadmins, DevOps, ug mga tawo nga tinuod nga responsable niini nga server dili kaayo malipay niini nga kahikayan.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Mopatim-aw nga ang tanan namong mga pag-uswag mahimong ma-promote sa open source, apan ang Bouncer dili kaayo suportado. Pananglitan, ang abilidad sa pagpadagan sa daghang PgBouncers sa usa ka pantalan nahimo usa ka bulan ang milabay. Adunay usa ka hangyo sa pagbitad niini nga bahin pipila ka tuig na ang milabay.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

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

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

O usa pa ka pananglitan. Sa Postgres, mahimo nimong kanselahon ang usa ka hangyo nga nagpadayon pinaagi sa pagpadala sa sekreto sa usa ka lahi nga koneksyon nga wala kinahanglana nga panghimatuud. Apan ang ubang mga kliyente nagpadala lang og TCP reset, i.e. gibuak nila ang koneksyon sa network. Unsa ang buhaton sa Bouncer? Wala siyay buhaton. Magpadayon kini sa pagpatuman sa hangyo. Kung nakadawat ka daghang mga koneksyon nga nakamugna usa ka database nga adunay gagmay nga mga hangyo, dili igo ang pagdiskonekta sa koneksyon gikan sa Bouncer; kinahanglan nimo usab nga makompleto ang mga hangyo nga nagdagan sa database.

Gitambalan na kini ug kini nga problema wala pa ma-merge sa upstream sa Bouncer.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug mao nga nakahinapos kami nga kinahanglan namon ang among kaugalingon nga pooler sa koneksyon, nga maugmad, ma-patch, diin ang mga problema dali nga matul-id ug nga, siyempre, kinahanglan nga multi-threaded.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Gibutang namon ang multithreading isip panguna nga buluhaton. Kinahanglan nga makadumala kami og maayo sa balud sa umaabot nga mga koneksyon sa TLS.

Aron mahimo kini, kinahanglan namon nga maghimo usa ka lahi nga librarya nga gitawag nga Machinarium, nga gilaraw aron ihulagway ang mga estado sa makina sa usa ka koneksyon sa network ingon sequential code. Kung imong tan-awon ang libpq source code, imong makita ang pipila ka medyo komplikado nga mga tawag nga makabalik kanimo ug usa ka resulta ug moingon, “Tawga ko unya. Karon naa koy IO sa pagkakaron, pero kung mawala na ang IO duna koy load sa processor.” Ug kini usa ka multi-level nga laraw. Ang komunikasyon sa network kasagaran gihulagway sa usa ka makina sa estado. Daghang mga lagda sama sa "Kung nakadawat ako kaniadto usa ka packet header nga gidak-on N, karon naghulat ako sa N bytes," "Kung nagpadala ako usa ka SYNC packet, karon naghulat ako usa ka pakete nga adunay metadata sa resulta." Ang resulta mao ang usa ka medyo lisud, counterintuitive code, ingon nga ang maze nakabig sa linya scan. Gibuhat namo kini aron imbes usa ka makina sa estado, ang programmer naghulagway sa nag-unang dalan sa interaksyon sa porma sa ordinaryo nga imperative code. Kini ra nga sa kini nga kinahanglanon nga code kinahanglan nimo nga isulud ang mga lugar diin ang pagkasunod-sunod sa pagpatuman kinahanglan nga mabalda pinaagi sa paghulat sa datos gikan sa network, pagpasa sa konteksto sa pagpatuman sa lain nga coroutine (berde nga hilo). Kini nga pamaagi susama sa kamatuoran nga atong isulat ang labing gipaabot nga dalan sa maze sa usa ka laray, ug dayon idugang ang mga sanga niini.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ingon usa ka sangputanan, kami adunay usa ka hilo nga gidawat sa TCP ug gipasa sa round-robin ang koneksyon sa TPC sa daghang mga trabahante.

Sa kini nga kaso, ang matag koneksyon sa kliyente kanunay nga nagdagan sa usa ka processor. Ug kini nagtugot kanimo sa paghimo niini nga cache-friendly.

Ug dugang pa, gipauswag namo ang pagkolekta sa gagmay nga mga pakete ngadto sa usa ka dako nga pakete aron mahupay ang sistema sa TCP stack.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Dugang pa, gipauswag namo ang transactional pooling sa diwa nga ang Odyssey, kung gi-configure, makapadala sa CANCEL ug ROLLBACK kung adunay kapakyasan sa koneksyon sa network, i.e. kung wala’y naghulat alang sa usa ka hangyo, isulti ni Odyssey ang database nga dili sulayan. tumana ang hangyo nga mahimong mag-usik sa bililhong mga kahinguhaan.

Ug kung mahimo, nagpadayon kami mga koneksyon sa parehas nga kliyente. Gilikayan niini ang pag-instalar pag-usab sa application_name_add_host. Kung mahimo kini, nan dili na naton kinahanglan nga dugang nga i-reset ang mga parameter nga gikinahanglan alang sa mga diagnostic.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Nagtrabaho kami alang sa interes sa Yandex.Cloud. Ug kung mogamit ka sa gidumala nga PostgreSQL ug adunay usa ka koneksyon nga pooler nga na-install, mahimo ka makahimo og lohikal nga replikasyon sa gawas, ie, biyai kami, kung gusto nimo, gamit ang lohikal nga pagkopya. Dili ipagawas sa Bouncer ang lohikal nga pag-agos sa replikasyon sa gawas.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Kini usa ka pananglitan sa pag-set up sa lohikal nga replikasyon.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Dugang pa, kami adunay suporta alang sa pisikal nga pagkopya sa gawas. Sa Cloud, siyempre, imposible kini, tungod kay ang cluster maghatag kanimo daghang kasayuran bahin sa iyang kaugalingon. Apan sa imong mga pag-install, kung kinahanglan nimo ang pisikal nga pagkopya pinaagi sa koneksyon pooler sa Odyssey, posible kini.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang Odyssey adunay hingpit nga katugbang nga pag-monitor sa PgBouncer. Kami adunay parehas nga console nga nagpadagan sa hapit tanan nga parehas nga mga mando. Kung adunay kulang, magpadala usa ka hangyo sa pagbitad, o labing menos usa ka isyu sa GitHub, ug makompleto namon ang kinahanglan nga mga mando. Apan naa na kami sa panguna nga gamit sa PgBouncer console.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug, siyempre, kami adunay sayup nga pagpasa. Ibalik namon ang sayup nga gitaho sa database. Makadawat ka og impormasyon kung nganong wala ka naapil sa database, ug dili lang kay wala ka naapil niini.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Kini nga bahin gi-disable kung kinahanglan nimo ang 100% nga pagkaangay sa PgBouncer. Mahimo kitang molihok sama sa Bouncer, para lang sa luwas nga bahin.

Pagpalambo

Pipila ka mga pulong mahitungod sa source code sa Odyssey.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

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

Pananglitan, adunay mga "Pause / Resume" nga mga sugo. Kasagaran sila gigamit sa pag-update sa database. Kung kinahanglan nimo nga i-update ang Postgres, mahimo nimong ihunong kini sa pooler sa koneksyon, buhata ang pg_upgrade, dayon ipadayon. Ug gikan sa kilid sa kliyente kini tan-awon ingon nga ang database naghinayhinay lang. Kini nga gamit gidala kanamo sa mga tawo gikan sa komunidad. Wala pa siya nagyelo, apan sa dili madugay ang tanan mahimong. (Na-frozen na)

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/73 - frozen na nga

Dugang pa, usa sa mga bag-ong bahin sa PgBouncer mao ang suporta alang sa SCRAM Authentication, nga gidala usab kanamo sa usa ka tawo nga wala magtrabaho sa Yandex.Cloud. Ang duha komplikado ug importante.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Busa, gusto ko nga isulti kanimo kung unsa ang gihimo sa Odyssey, kung gusto nimo usab magsulat usa ka gamay nga code karon.

Ikaw adunay Odyssey source base, nga nagsalig sa duha ka nag-unang librarya. Ang Kiwi library kay usa ka pagpatuman sa Postgres message protocol. Sa ato pa, ang lumad nga proto 3 sa Postgres maoy mga standard nga mensahe nga mahimong ibaylo sa mga front-ends ug back-ends. Gipatuman sila sa Kiwi library.

Ang librarya sa Machinarium usa ka librarya sa pagpatuman sa hilo. Usa ka gamay nga tipik niini nga Machinarium gisulat sa pinulongang asembliya. Pero ayawg kabalaka kay 15 lang ka linya.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Odyssey nga arkitektura. Adunay usa ka nag-unang makina diin ang mga coroutine nagdagan. Kini nga makina nagpatuman sa pagdawat sa umaabot nga mga koneksyon sa TCP ug pag-apod-apod niini sa mga trabahante.

Ang usa ka handler alang sa daghang mga kliyente mahimong magtrabaho sulod sa usa ka trabahante. Ang panguna nga hilo nagpadagan usab sa console ug pagproseso sa mga buluhaton sa crone aron mapapas ang mga koneksyon nga dili na kinahanglan sa pool.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang Odyssey gisulayan gamit ang standard nga Postgres test suite. Nagdagan lang kami sa pag-install-check pinaagi sa Bouncer ug pinaagi sa Odyssey, nakakuha kami usa ka null div. Adunay ubay-ubay nga mga pagsulay nga may kalabutan sa pag-format sa petsa nga dili parehas nga moagi sa Bouncer ug sa Odyssey.

Dugang pa, adunay daghang mga drayber nga adunay kaugalingon nga pagsulay. Ug gigamit namon ang ilang mga pagsulay aron sulayan ang Odyssey.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Dugang pa, tungod sa among pag-configure sa cascade, kinahanglan namon nga sulayan ang lainlaing mga bundle: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey aron masiguro nga kung ang Odyssey natapos sa bisan unsang mga bahin sa cascade, kini molihok gihapon. sa atong gipaabot.

Pagripa

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Gigamit namon ang Odyssey sa produksiyon. Ug dili kini patas kung giingon nako nga ang tanan molihok. Dili, kana mao, oo, apan dili kanunay. Pananglitan, sa produksiyon ang tanan nagtrabaho lang, unya ang among mga higala gikan sa PostgreSQL Professional miabut ug miingon nga kami adunay usa ka memory leak. Sila gyud, gitul-id namo. Apan yano ra.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Dayon among nadiskobrehan nga ang connection pooler adunay umaabot nga TLS connections ug outgoing TLS connections. Ug ang mga koneksyon nanginahanglan mga sertipiko sa kliyente ug mga sertipiko sa server.

Ang mga sertipiko sa server sa Bouncer ug Odyssey gibasa pag-usab sa ilang pcache, apan ang mga sertipiko sa kliyente dili kinahanglan nga basahon pag-usab gikan sa pcache, tungod kay ang among scalable nga Odyssey sa katapusan modagan sa performance sa sistema sa pagbasa niini nga sertipiko. Nakurat kini kanamo, tungod kay wala magdugay sa iyang pagsukol. Sa sinugdan kini nag-scale sa linya, apan pagkahuman sa 20 nga umaabot nga dungan nga mga koneksyon kini nga problema nagpakita mismo.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang Pluggable Authentication Method mao ang abilidad sa pag-authenticate gamit ang built-in nga Lunux tools. Sa PgBouncer kini gipatuman sa paagi nga adunay usa ka linain nga hilo nga maghulat alang sa tubag gikan sa PAM ug adunay usa ka nag-unang thread sa PgBouncer nga nagserbisyo sa kasamtangan nga koneksyon ug makahangyo kanila nga magpuyo sa PAM nga hilo.

Wala namo kini gipatuman sa usa ka yanong rason. Daghan mig thread. Nganong gikinahanglan nato kini?

Kini sa katapusan makamugna og mga problema nga kung ikaw adunay PAM authentication ug non-PAM authentication, unya ang usa ka dako nga balud sa PAM authentication mahimong makalangan sa non-PAM authentication. Usa kini sa mga butang nga wala pa namo masulbad. Apan kung gusto nimo nga ayohon kini, mahimo nimo kini.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang laing rake mao nga kami adunay usa ka hilo nga modawat sa tanan nga umaabot nga koneksyon. Ug dayon ibalhin sila sa worker pool, diin mahitabo ang TLS handshake.

Ubos nga linya, kung ikaw adunay usa ka managsama nga balud sa 20 nga koneksyon sa network, silang tanan madawat. Ug sa kilid sa kliyente ang libpq magsugod sa pagreport sa mga timeout. Sa kasagaran kini daw 000 segundos.

Kung silang tanan dili makasulod sa database sa samang higayon, nan dili sila makasulod sa database, tungod kay kining tanan mahimong masakop sa non-exponential retry.

Nakaabot kami sa konklusyon nga among gikopya ang laraw gikan sa PgBouncer dinhi sa kamatuoran nga among gipugngan ang gidaghanon sa mga koneksyon sa TCP nga among gidawat.

Kung nakita namon nga nagdawat kami mga koneksyon, apan sa katapusan wala silay oras sa paglamano, gibutang namon sila sa usa ka pila aron dili sila mag-usik sa mga kapanguhaan sa CPU. Kini modala ngadto sa kamatuoran nga ang usa ka dungan nga paglamano dili mahimo alang sa tanan nga mga koneksyon nga miabut. Pero at least naay musulod sa database bisag medyo bug-at ang load.

roadmap

Unsa ang gusto nimo nga makita sa umaabot sa Odyssey? Unsa ang atong andam sa pagpalambo sa atong kaugalingon ug unsa ang atong gipaabot gikan sa komunidad?

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Sukad sa Agosto 2019.

Kini ang hitsura sa Odyssey roadmap kaniadtong Agosto:

  • Gusto namo ang SCRAM ug PAM authentication.
  • Gusto namon nga ipasa ang mga hangyo sa pagbasa sa standby.
  • Gusto ko nga i-restart ang online.
  • Ug ang abilidad sa paghunong sa server.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang katunga niini nga roadmap nahuman na, ug dili pinaagi kanato. Ug kini maayo. Busa atong hisgutan kung unsa ang nahabilin ug dugangan pa.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Mahitungod sa ipasa ang read-only nga mga pangutana ngadto sa standby? Naa mi mga replika nga mupainit lang sa hangin nga walay hangyo. Kinahanglan namon sila nga maghatag failover ug switchover. Kung adunay mga problema sa usa sa mga sentro sa datos, gusto nako nga okupar sila sa pipila ka mapuslanon nga trabaho. Tungod kay dili namo ma-configure ang parehas nga sentral nga mga processor, lahi ang parehas nga memorya, tungod kay kung dili ang pagkopya dili molihok.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Sa prinsipyo, sa Postgres, sugod sa 10, posible nga ipiho ang session_attrs kung magkonektar. Mahimo nimong ilista ang tanan nga mga host sa database sa koneksyon ug isulti kung ngano nga moadto ka sa database: pagsulat o pagbasa lamang. Ug ang drayber mismo ang mopili sa una nga host sa lista nga labing gusto niya, nga nagtuman sa mga kinahanglanon sa session_attrs.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Apan ang problema sa kini nga pamaagi mao nga dili kini makontrol ang lag sa pagkopya. Mahimong adunay ka pipila ka kopya nga nalangan sa dili madawat nga oras sa imong serbisyo. Aron mahimo ang bug-os nga bahin nga pagpatuman sa mga pangutana sa pagbasa sa usa ka replika, kinahanglan namon nga suportahan ang katakus ni Odyssey nga dili modagan kung dili kini mabasa.

Ang Odyssey kinahanglan nga moadto sa database matag karon ug unya ug mangayo alang sa gilay-on nga pagkopya gikan sa panguna. Ug kung nakaabot na sa limit nga kantidad, ayaw tugoti ang mga bag-ong hangyo sa database, sultihi ang kliyente nga kinahanglan nga magsugod pag-usab sa mga koneksyon ug, posible, pagpili og lain nga host aron ipatuman ang mga hangyo. Gitugotan niini ang database nga dali nga mabalik ang lag sa pagkopya ug mobalik pag-usab aron matubag ang usa ka hangyo.

Lisud ang paghatag ug time frame para sa pagpatuman, tungod kay open source kini. Apan, nanghinaut ko, dili 2,5 ka tuig sama sa akong mga kauban gikan sa PgBouncer. Kini ang bahin nga gusto nakong makita sa Odyssey.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Sa komunidad, ang mga tawo nangutana bahin sa suporta alang sa giandam nga pahayag. Karon makahimo ka og andam nga pahayag sa duha ka paagi. Una, mahimo nimong ipatuman ang SQL command, nga mao ang "andam". Aron masabtan kini nga SQL command, kinahanglan natong makat-on sa pagsabut sa SQL sa Bouncer nga bahin. Kini mahimong usa ka overkill, tungod kay kini sobra ka daghan, tungod kay kinahanglan namon ang tibuuk nga parser. Dili namo ma-parse ang matag SQL command.

Apan adunay giandam nga pahayag sa lebel sa protocol sa mensahe sa proto3. Ug kini ang lugar kung ang kasayuran nga gihimo ang usa ka giandam nga pahayag moabut sa usa ka istruktura nga porma. Ug mahimo namon nga suportahan ang pagsabut nga sa pipila nga koneksyon sa server gihangyo sa kliyente nga maghimo mga andam nga pahayag. Ug bisan kung sirado ang transaksyon, kinahanglan gihapon naton nga ipadayon ang koneksyon tali sa server ug kliyente.

Apan dinhi ang usa ka kalainan sa diyalogo mitungha, tungod kay adunay usa nga nag-ingon nga kinahanglan nimo nga masabtan kung unsang klase nga giandam nga mga pahayag ang gihimo sa kliyente ug gipaambit ang koneksyon sa server tali sa tanan nga mga kliyente nga nagmugna niini nga koneksyon sa server, i.e., nga naghimo sa ingon nga giandam nga pahayag.

Si Andres Freund nag-ingon nga kung ang usa ka kliyente moabut kanimo nga nakahimo na sa ingon nga giandam nga pahayag sa lain nga koneksyon sa server, dayon buhata kini alang kaniya. Apan ingon og usa ka gamay nga sayup ang pag-execute sa mga pangutana sa database imbes sa kliyente, apan gikan sa punto sa panglantaw sa developer nga nagsulat sa protocol alang sa pagpakig-uban sa database, kini sayon ​​​​kon siya gihatagan lamang og koneksyon sa network diin adunay ingon nga giandam nga pangutana.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ug usa pa ka bahin nga kinahanglan naton ipatuman. Naa na miy monitoring compatible sa PgBouncer. Mahimo natong ibalik ang kasagaran nga oras sa pagpatuman sa pangutana. Apan ang kasagaran nga oras mao ang kasagaran nga temperatura sa ospital: ang uban bugnaw, ang uban init - sa kasagaran, ang tanan himsog. Dili kini tinuod.

Kinahanglan natong ipatuman ang suporta alang sa mga porsyento nga nagpakita nga adunay hinay nga mga pangutana nga nag-usik sa mga kapanguhaan ug naghimo sa pagmonitor nga mas madawat.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Ang labing importante nga butang mao nga gusto ko nga bersyon 1.0 (bersyon 1.1 gipagawas na). Ang kamatuoran mao nga ang Odyssey anaa na karon sa bersyon 1.0rc, i.e. release candidate. Ug ang tanan nga mga problema nga akong gilista giayo sa parehas nga bersyon, gawas sa pagtulo sa memorya.

Unsay kahulogan sa bersyon 1.0 alang kanato? Gilunsad namon ang Odyssey sa among mga base. Nagdagan na kini sa among mga database, apan kung moabot sa punto nga 1 nga mga hangyo matag segundo, mahimo naton isulti nga kini ang bersyon sa pagpagawas ug kini usa ka bersyon nga matawag nga 000.

Daghang mga tawo sa komunidad ang nangutana nga ang bersyon 1.0 naglakip sa paghunong ug SCRAM. Apan kini nagpasabut nga kinahanglan naton nga i-roll out ang sunod nga bersyon sa produksiyon, tungod kay wala pa gipatay ang SCRAM o paghunong. Apan, lagmit, kini nga isyu masulbad dayon.

Odyssey roadmap: unsa pa ang gusto namon gikan sa usa ka pooler sa koneksyon. Andrey Borodin (2019)

Naghuwat ko sa imong pull request. Gusto usab nako madungog kung unsa ang imong mga problema sa Bouncer. Atong hisgotan sila. Tingali mahimo natong ipatuman ang pipila ka mga gimbuhaton nga imong gikinahanglan.

Kini ang katapusan sa akong bahin, gusto ko nga maminaw kanimo. Salamat!

Ang imong mga pangutana

Kung ako magbutang sa akong kaugalingon nga aplikasyon_ngalan, ipasa ba kini sa husto, lakip ang pagtipon sa transaksyon sa Odyssey?

Odyssey o Bouncer?

Sa Odyssey. Sa Bouncer kini gilabay.

Magbuhat mi ug set.

Ug kung ang akong tinuod nga koneksyon moambak sa ubang mga koneksyon, mapasa ba kini?

Maghimo kami usa ka set sa tanan nga mga parameter nga gilista sa lista. Dili nako mahibal-an kung ang application_name naa sa kini nga lista. Abi nakog nakita nako siya didto. Atong ibutang ang tanan nga parehas nga mga parameter. Sa usa ka hangyo, buhaton sa set ang tanan nga gi-install sa kliyente sa panahon sa pagsugod.

Salamat, Andrey, sa report! Maayong report! Nalipay ko nga ang Odyssey nag-uswag nga mas paspas ug mas paspas matag minuto. Gusto kong magpadayon sama niini. Gihangyo na ka namo nga adunay daghang koneksyon sa tinubdan sa datos aron ang Odyssey makakonektar sa lain-laing mga database nga dungan, i.e. usa ka agalon nga ulipon, ug dayon awtomatikong magkonektar sa usa ka bag-ong agalon human sa failover.

Oo, morag nahinumdom ko niini nga panaghisgot. Karon adunay daghang mga pagtipig. Apan walay pagbalhin tali kanila. Sa among bahin, kinahanglan namon nga i-survey ang server nga kini buhi pa ug masabtan nga adunay usa ka failover nga nahitabo, nga motawag sa pg_recovery. Ako adunay usa ka sumbanan nga paagi sa pagsabut nga wala kami moabut sa agalon. Ug kinahanglan ba nga kita makasabut sa usa ka paagi gikan sa mga sayup o unsa? Sa ato pa, ang ideya makapaikag, kini gihisgutan. Pagsulat ug dugang mga komento. Kung ikaw adunay mga trabahante nga nakaila sa C, nan maayo kana.

Ang isyu sa pag-scale sa mga replika makapainteres usab kanamo, tungod kay gusto namon nga himuon ang pagsagop sa mga gisubli nga mga pungpong nga yano kutob sa mahimo alang sa mga nag-develop sa aplikasyon. Apan dinhi gusto ko og dugang nga mga komento, i.e. eksakto kung giunsa kini buhaton, kung giunsa kini buhaton nga maayo.

Ang pangutana bahin usab sa mga replika. Kini nahimo nga ikaw adunay usa ka agalon ug daghang mga replika. Ug klaro nga dili kaayo kanunay sila moadto sa replika kaysa sa agalon alang sa mga koneksyon, tungod kay mahimo sila adunay mga kalainan. Nag-ingon ka nga ang kalainan sa datos mahimong ingon nga dili kini makatagbaw sa imong negosyo ug dili ka moadto didto hangtod nga kini gisundog. Sa parehas nga oras, kung wala ka moadto didto sa dugay nga panahon, ug dayon nagsugod sa pag-adto, nan ang datos nga gikinahanglan dili dayon magamit. Kana mao, kung kita kanunay nga moadto sa agalon, nan ang cache didto gipainit, apan sa replika ang cache lags gamay.

Oo tinuod. Ang pcache wala'y mga bloke sa datos nga imong gusto, ang tinuod nga cache walay impormasyon mahitungod sa mga lamesa nga imong gusto, ang mga plano wala'y mga parse nga mga pangutana, wala'y bisan unsa.

Ug sa diha nga ikaw adunay usa ka matang sa cluster, ug ikaw makadugang sa usa ka bag-o nga replica didto, unya samtang kini magsugod, ang tanan nga mga butang nga dili maayo sa niini, ie nagdugang sa iyang cache.

Nakuha nako ang ideya. Ang husto nga pamaagi mao ang pagpadagan og gamay nga porsyento sa mga pangutana sa replika una, nga makapainit sa cache. Sa kinatibuk-an nga pagsulti, kita adunay usa ka kondisyon nga kita kinahanglan nga malangan sa agalon sa dili molapas sa 10 segundos. Ug kini nga kondisyon wala gilakip sa usa ka balud, apan hapsay alang sa pipila nga mga kliyente.

Oo, dugangi ang timbang.

Kini usa ka maayong ideya. Apan kinahanglan una natong ipatuman kini nga pagsira. Una kinahanglan naton nga i-off, ug dayon hunahunaon naton kung giunsa ang pag-on. Kini usa ka maayo nga bahin aron mahimo nga hapsay.

Ang Nginx adunay kini nga kapilian slowly start sa usa ka cluster alang sa server. Ug anam-anam niyang gidugangan ang karga.

Oo, maayo nga ideya, sulayan naton kini kung maabut naton kini.

Source: www.habr.com

Idugang sa usa ka comment