Sa iyang taho, isulti kanimo ni Andrey Borodin kung giunsa nila gikonsiderar ang kasinatian sa pag-scale sa PgBouncer sa pagdesinyo sa koneksyon pooler
Video:
Kumusta tanan! Ako diay si Andrew.
Sa Yandex, naghimo ko og mga open source database. Ug karon kami adunay usa ka hilisgutan bahin sa koneksyon pooler koneksyon.
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.
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.
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.
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.
Unsa ang nag-unang katuyoan sa koneksyon pooler?
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.
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.
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.
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.
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.
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.
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
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.
Ug sa among trabaho, kini tinuod. Apan adunay pipila ka mga problema.
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.
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.
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.
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.
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.
Kami, siyempre, nagsulat usa ka gamay nga patch alang sa Bouncer nga nagdugang niini nga setting, i.e. paglimita sa mga kliyente sa pool.
Posible nga buhaton kini sa bahin sa Postgres, i.e., limitahan ang mga tahas sa database pinaagi sa gidaghanon sa mga koneksyon.
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.
Sa usa ka punto, imong tan-awon ang mga graph sa aplikasyon ug makita nga ang aplikasyon wala molihok.
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.
Nakaabot kami sa konklusyon nga kinahanglan namon ang daghang mga PgBouncers.
Medyo natambalan na ang bouncer.
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.
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.
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?
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.
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.
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.
Ania ang usa ka pananglitan sa 16 PgBouncers nga nagkarga sa 16 ka mga core sa 100%.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Kini usa ka pananglitan sa pag-set up sa lohikal nga replikasyon.
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.
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.
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.
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.
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)
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.
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 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.
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.
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
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.
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.
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.
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?
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.
Ang katunga niini nga roadmap nahuman na, ug dili pinaagi kanato. Ug kini maayo. Busa atong hisgutan kung unsa ang nahabilin ug dugangan pa.
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.
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.
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.
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.
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.
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