Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ao amin'ny lahateniny, Andrey Borodin dia hilaza aminao ny fomba nikarakaran'izy ireo ny traikefan'ny scaling PgBouncer rehefa namolavola pooler fifandraisana. Odyssey, ny fomba nanoratany izany tamin'ny famokarana. Ho fanampin'izay, hiresaka momba ny fiasan'ny pooler tiantsika ho hita amin'ny dikan-teny vaovao isika: zava-dehibe ho antsika tsy ny famenoana ny filantsika fotsiny, fa ny fampivoarana ny vondrom-piarahamonina mpampiasa. Odyssey.

horonan-tsary:

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Salama daholo! Andrew no anarako.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ao amin'ny Yandex, mamorona angon-drakitra loharano misokatra aho. Ary ankehitriny isika dia manana lohahevitra momba ny fifandraisana pooler fifandraisana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Raha fantatrao ny fomba fiantsoana pooler fifandraisana amin'ny teny Rosiana, dia lazao amiko. Tena te hahita teny teknika tsara tokony hapetraka ao amin'ny literatiora teknika aho.

Sarotra be ny lohahevitra, satria amin'ny angon-drakitra maro dia naorina ao ny pooler fifandraisana ary tsy mila mahafantatra izany akory ianao. Ny toe-javatra sasany, mazava ho azy, dia eny rehetra eny, fa amin'ny Postgres dia tsy mandeha izany. Ary mitovitovy (amin'ny HighLoad++ 2019) dia misy ny tatitra nataon'i Nikolai Samokhvalov momba ny fametrahana fanontaniana ao amin'ny Postgres. Ary azoko fa tonga eto ny olona izay efa nanamboatra fangatahana tonga lafatra, ary ireo dia olona miatrika olana tsy fahita firy mifandraika amin'ny tambajotra, ny fampiasana loharano. Ary amin'ny toerana sasany dia mety ho sarotra be izany amin'ny heviny hoe tsy mibaribary ny olana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Yandex dia manana Postgres. Tolotra Yandex maro no mipetraka ao amin'ny Yandex.Cloud. Ary manana angon-drakitra petabytes maromaro izay miteraka fangatahana iray tapitrisa isan-tsegondra farafahakeliny ao amin'ny Postgres.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary manome cluster mahazatra ho an'ny serivisy rehetra izahay - ity no node voalohany amin'ny node, ny replika roa mahazatra (synchronous sy asynchronous), backup, scaling ny fangatahana famakiana amin'ny replica.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ny node cluster tsirairay dia Postgres, izay, ankoatry ny Postgres sy ny rafitra fanaraha-maso, dia apetraka koa ny pooler. Connection pooler dia ampiasaina amin'ny fefy sy ho an'ny tanjona lehibe indrindra.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Inona no tena tanjona ny fifandraisana pooler?

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Postgres dia mampiasa modely amin'ny fizotran'ny asa miaraka amin'ny angon-drakitra. Midika izany fa ny fifandraisana iray dia dingana iray, backend Postgres iray. Ary be dia be ny cache isan-karazany ao amin'ity backend ity, izay tena lafo ny manao hafa ho an'ny fifandraisana samy hafa.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary koa, misy array ao amin'ny kaody Postgres antsoina hoe procArray. Ahitana angona fototra momba ny fifandraisana amin'ny tambajotra. Ary saika ny algorithm fanodinana procArray rehetra dia manana fahasarotana tsipika, mihazakazaka amin'ny alàlan'ny fifandraisana amin'ny tambajotra manontolo. Fihodinana tena haingana izy io, saingy miaraka amin'ny fifandraisana amin'ny tambajotra miditra bebe kokoa dia miha lafo ny zavatra. Ary rehefa lasa lafo kokoa ny zava-drehetra, dia miafara amin'ny sarany lafo be ianao amin'ny fifandraisana amin'ny tambajotra marobe.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Misy fomba 3 azo atao:

  • Eo amin'ny lafiny fampiharana.
  • Eo amin'ny lafiny database.
  • Ary eo anelanelany, izany hoe, ny fitambarana rehetra azo atao.

Indrisy anefa fa eo am-pamolavolana ny pooler naorina amin'izao fotoana izao. Ny namana ao amin'ny PostgreSQL Professional no manao izany matetika. Rahoviana no hiseho dia sarotra ny maminavina. Ary raha ny marina, manana vahaolana roa isika amin'ny fisafidianana ny mpanao mari-trano. Ireo dia dobo amin'ny lafiny fampiharana sy dobo proxy.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ny dobo amin'ny lafiny fampiharana no fomba tsotra indrindra. Ary saika ny mpamily mpanjifa rehetra dia manome anao fomba iray: hanehoana ny fifandraisanao an-tapitrisany amin'ny kaody toy ny fifandraisana am-polony amin'ny angon-drakitra.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Misy olana amin'ny hoe amin'ny fotoana iray tianao hanesorana ny backend, te-hametraka azy amin'ny milina virtoaly maro ianao.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Avy eo dia mbola tsapanao fa manana faritra maro azo ampiasaina ianao, foibe data maromaro. Ary ny fomba famoriam-bola amin'ny lafiny mpanjifa dia mitarika amin'ny isa lehibe. Ny lehibe dia manodidina ny 10 ny fifandraisana. Ity dia sisiny izay afaka miasa tsara.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Raha miresaka momba ny proxy poolers isika, dia misy poolers roa afaka manao zavatra maro. Tsy mpanangom-bokatra fotsiny izy ireo. Izy ireo dia poolers + fiasa mahafinaritra kokoa. izany pgpool и Crunchy Proxy.

Saingy, indrisy, tsy ny rehetra no mila an'io fiasa fanampiny io. Ary izany dia mitarika ho amin'ny hoe ny poolers dia tsy manohana afa-tsy session pooling, izany hoe mpanjifa iray miditra, mpanjifa iray mivoaka amin'ny angon-drakitra.

Tsy mety amin'ny asantsika izany, noho izany dia mampiasa PgBouncer izahay, izay mametraka ny fifampiraharahana, izany hoe ny fifandraisana amin'ny mpizara dia aseho amin'ny fifandraisan'ny mpanjifa mandritra ny faharetan'ny fifampiraharahana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary amin'ny entanay - marina izany. Saingy misy olana maromaro.Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Manomboka ny olana rehefa te-hanamarina fivoriana ianao, satria eo an-toerana ny fifandraisana rehetra miditra. Tonga niaraka tamin'ny loopback ny rehetra ary lasa sarotra ny manara-maso ny fivoriana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Mazava ho azy fa afaka mampiasa application_name_add_host ianao. Ity no fomba Bouncer hanampiana adiresy IP amin'ny application_name. Fa application_name dia napetraky ny fifandraisana fanampiny.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Amin'ity tabilao ity, izay misy ny tsipika mavo dia tena fangatahana, ary aiza ny tsipika manga misy fangatahana izay manidina ao anaty tahiry. Ary io fahasamihafana io dia ny fametrahana ny anarana_application, izay ilaina amin'ny fanaraha-maso fotsiny, fa tsy maimaim-poana mihitsy.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Fanampin'izany, tsy afaka mametra dobo iray i Bouncer, izany hoe ny isan'ny fifandraisana amin'ny angona isaky ny mpampiasa, isaky ny angona.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Inona no mahatonga izany? Manana serivisy feno entana voasoratra ao amin'ny C ++ ianao ary eo akaikin'ny serivisy kely amin'ny node iray izay tsy misy maharatsy ny fototra, fa lasa adala ny mpamily azy. Manokatra fifandraisana 20 izany ary miandry ny zavatra hafa rehetra. Na ny kaodinao aza dia marina.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Mazava ho azy fa nanoratra patch kely ho an'ny Bouncer izahay izay nanampy ity toe-javatra ity, izany hoe mametra ny mpanjifa amin'ny dobo.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Azo atao ny manao izany amin'ny lafiny Postgres, izany hoe mametra ny andraikitra ao amin'ny tahiry amin'ny isan'ny fifandraisana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Saingy avy eo dia very ny fahaizanao mahatakatra ny antony tsy anananao fifandraisana amin'ny mpizara. PgBouncer dia tsy manipy fahadisoana amin'ny fifandraisana, mamerina ny vaovao mitovy foana. Ary tsy azonao: mety niova ny tenimiafinao, mety nidina fotsiny ny angon-drakitra, mety misy zavatra tsy mety. Saingy tsy misy diagnostika. Raha tsy azo apetraka ny session dia tsy ho fantatrao hoe nahoana no tsy azo atao izany.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Amin'ny fotoana iray dia mijery ny sarin'ny fampiharana ianao ary mahita fa tsy mandeha ny fampiharana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Jereo ny ambony ary jereo fa ny Bouncer dia kofehy tokana. Kihon-dalana eo amin’ny fiainan’ny fanompoana izany. Takatrao fa teo am-panomanana ny fandrefesana ny angon-drakitra tao anatin'ny herintaona sy tapany ianao, ary mila manitsy ny pooler ianao.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Tonga tamin'ny fanatsoahan-kevitra izahay fa mila PgBouncers bebe kokoa.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

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

Nopetahana kely ny bouncer.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary nataon'izy ireo izany mba ahafahan'ny Bouncers maromaro atsangana amin'ny fampiasana indray ny seranan-tsambo TCP. Ary efa ny rafitra miasa dia mamindra ho azy ireo fifandraisana TCP miditra eo amin'izy ireo amin'ny alalan'ny round-robin'om.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Mangarahara ho an'ny mpanjifa izany, izany hoe toa manana Bouncer iray ianao, saingy misy fizarazarana fifandraisana tsy misy dikany eo amin'ny Bouncers.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary amin'ny fotoana iray, mety ho tsikaritrareo fa ireo Bouncer 3 ireo dia mihinana ny fotony amin'ny 100%. Mila Bouncer vitsivitsy ianao. Nahoana?

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Satria manana TLS ianao. Manana fifandraisana miafina ianao. Ary raha manamarika ny Postgres miaraka amin'ny TLS sy tsy misy TLS ianao, dia ho hitanao fa ny isan'ny fifandraisana napetraka dia midina amin'ny halehiben'ny halehiben'ny roa miaraka amin'ny encryption, satria mandany ny loharanon'ny CPU ny tànana TLS.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary eo an-tampony dia afaka mahita fiasa kriptografika vitsivitsy izay tanterahina mandritra ny onjam-pifandraisana miditra. Satria afaka mifamadika eo amin'ny faritra misy ny laharam-pahamehanay, ny onjam-pifandraisana miditra dia toe-javatra mahazatra. Izany hoe, noho ny antony iray, tsy nisy ny voalohany taloha, nalefa tany amin'ny foibe data hafa ny entana manontolo. Ho avy hiarahaba ny TLS daholo izy ireo amin'ny fotoana iray.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary mety mbola tsy miarahaba an'i Bouncer ny fifampikasohana tanana TLS marobe, fa manindrona ny tendany. Ny onjan'ny fifandraisana miditra dia mety ho lasa tsy voafehy noho ny fahataperan'ny fotoana. Raha toa ianao ka manana andrana indray amin'ny fototra tsy misy fihemorana, dia tsy hiverina imbetsaka izy ireo amin'ny onjam-peo mirindra.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ity misy ohatra iray amin'ny 16 PgBouncers izay mameno cores 16 amin'ny 100%.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Tonga teo amin'ny PgBouncer mikoriana izahay. Ity no fanitsiana tsara indrindra azontsika atao amin'ny entana Bouncer. Ny Bouncers ivelany dia miasa ho an'ny TCP handshake, ary ny Bouncers anatiny dia miasa amin'ny fanangonana tena izy, mba tsy hanaparitahana ny fifandraisana ivelany.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Amin'ity fanamafisana ity dia azo atao ny mamerina malefaka. Azonao atao ny mamerina tsirairay ireo Bouncers 18 ireo. Sarotra be anefa ny fitazonana config toy izany. Ireo mpitantana ny rafitra, DevOps, ary ireo olona tena tompon'andraikitra amin'ity serivisy ity dia tsy ho faly amin'ity tetika ity.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Toa azo ampandrosoina amin'ny loharano misokatra avokoa ny fanatsarana rehetra ataontsika, saingy tsy manohana tsara ny Bouncer. Ohatra, ny fahafahana mampandeha PgBouncers marobe amin'ny seranana iray ihany dia natao iray volana lasa izay. Taona vitsivitsy lasa izay no nisy fangatahana fisarihana tamin'ity endri-javatra ity.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

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

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

Na ohatra iray hafa. Ao amin'ny Postgres, azonao atao ny manafoana fangatahana mihazakazaka amin'ny alàlan'ny fandefasana ny tsiambaratelo amin'ny fifandraisana hafa raha tsy misy ny fanamarinana fanampiny. Saingy ny mpanjifa sasany dia mandefa TCP-reset fotsiny, izany hoe manapaka ny fifandraisana amin'ny tambajotra. Inona no hataon'i Bouncer amin'izany? Tsy hanao na inona na inona izy. Hitohy ny fanatanterahana ny fangatahana. Raha nahazo fifandraisana be dia be ianao izay nametraka ny fototra tamin'ny fangatahana kely, dia tsy ho ampy ny fanalana fotsiny ny fifandraisana amin'ny Bouncer, mbola mila mameno ireo fangatahana mandeha ao amin'ny angon-drakitra ianao.

Efa voapetaka izany ary mbola tsy mitambatra ao amin'ny andrin'ny Bouncer ny olana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary noho izany dia tonga tamin'ny fanatsoahan-kevitra izahay fa mila ny fifandraisanay manokana pooler, izay hovolavolaina, patched, izay ho azo atao ny hamaha haingana ny olana ary izay, mazava ho azy, dia tsy maintsy multi-threaded.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Nametraka multithreading ho asa lehibe izahay. Mila mahay mitantana tsara ny onjan'ny fifandraisana TLS miditra isika.

Mba hanaovana izany, dia tsy maintsy namolavola tranomboky mitokana antsoina hoe Machinarium, izay natao hamaritana ny toetry ny milina amin'ny fifandraisana amin'ny tambajotra ho toy ny code serial. Raha mijery ny kaody loharano libpq ianao dia hahita antso saro-takarina izay afaka mamerina valiny aminao ary miteny hoe: "Antsoy aho aoriana kely. Amin'izao fotoana izao dia manana IO aho amin'izao fotoana izao, fa rehefa mandalo ny IO dia manana entana amin'ny processeur aho. Ary ity dia rafitra multilevel. Ny fifandraisan'ny tambajotra dia matetika nofaritana amin'ny milina fanjakana. Fitsipika maro toy ny hoe "Raha nahazo lohan'ny fonosana amin'ny habe N aho teo aloha, dia miandry N bytes aho izao", "Raha nandefa fonosana SYNC aho, dia miandry fonosana misy metadata valiny aho." Manjary fehezan-dalàna mifanohitra amin'ny intuitive sarotra, toy ny hoe navadika ho scan tsipika ilay labiera. Nanao izany izahay fa tsy milina fanjakana, ny mpandrindra dia mamaritra ny lalan'ny fifaneraserana lehibe amin'ny endrika code imperative mahazatra. Ao anatin'ity fehezan-dalàna imperative ity fotsiny, dia mila mampiditra toerana izay ilàna fampitsaharana ny filaharan'ny famonoana amin'ny fiandrasana ny angon-drakitra avy amin'ny tambajotra ianao, mandalo ny contexte famonoana ho any amin'ny coroutine hafa (kofehy maitso). Ity fomba fiasa ity dia mitovy amin'ny hoe manoratra ny lalana andrasana indrindra ao amin'ny labiera misesy, ary avy eo ampio sampana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Vokatr'izany dia manana kofehy iray izahay izay manaiky ny TCP ary mampita fifandraisana TPC amin'ny mpiasa maro ny round-robin.

Amin'ity tranga ity, ny fifandraisana mpanjifa tsirairay dia mandeha amin'ny processeur iray foana. Ary izany dia ahafahanao manao azy io ho cache-friendly.

Ary ankoatra izany, nohatsarainay kely ny fanangonana fonosana kely ho fonosana lehibe iray mba hialana amin'ny rafitra TCP stack.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ho fanampin'izay, nanatsara ny fanangonana transactional izahay amin'ny heviny hoe Odyssey, rehefa namboarina, dia afaka mandefa CANCEL sy ROLLBACK raha sendra tsy fahombiazan'ny fifandraisana amin'ny tambajotra, izany hoe raha tsy misy miandry ny fangatahana, Odyssey dia hilaza amin'ny angon-drakitra mba tsy hanandrana hanatanteraka. ny fangatahana mety handany harena sarobidy.

Ary isaky ny azo atao dia mitazona fifandraisana amin'ny mpanjifa iray ihany izahay. Izany dia misoroka ny tsy maintsy mametraka indray ny application_name_add_host. Raha azo atao, dia tsy manana famerenana fanampiny ny masontsivana ilaina amin'ny diagnostika.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Miasa ho tombontsoan'ny Yandex.Cloud izahay. Ary raha mampiasa PostgreSQL voatanisa ianao ary manana fifandraisana pooler napetraka, dia afaka mamorona replication lojika ivelany ianao, izany hoe avelao izahay raha tianao, mampiasa replication lojika. Bouncer ivelan'ny fikorianan'ny lojika replication dia tsy hanome.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ity dia ohatra iray amin'ny fametrahana replication lojika.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ho fanampin'izany, manana fanohanana ny famerenana ara-batana ivelany izahay. Ao amin'ny Cloud, mazava ho azy, tsy azo atao izany, satria ny cluster dia hanome anao fampahalalana be loatra momba ny tenany. Saingy amin'ny fametrahanao, raha mila replication ara-batana amin'ny alàlan'ny pooler fifandraisana ao Odyssey ianao dia azo atao izany.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Odyssey dia manana fanaraha-maso mifanaraka tanteraka amin'ny PgBouncer. Manana console mitovy isika izay manatanteraka saika ny baiko mitovy. Raha misy zavatra tsy ampy, alefaso fangatahana misintona, na farafaharatsiny olana amin'ny GitHub, dia hamita ny baiko ilaina izahay. Saingy efa manana ny fiasa fototra amin'ny console PgBouncer izahay.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary mazava ho azy fa manana hadisoana fandefasana izahay. Haverinay ny fahadisoana notaterin'ny fototra. Hahazo fampahalalana ianao hoe nahoana ianao no tsy ao amin'ny base, fa tsy hoe tsy ao anatiny ianao.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ity fampiasa ity dia kilemaina raha toa ka mila 100% mifanaraka amin'ny PgBouncer ianao. Afaka mitondra tena toa an'i Bouncer isika, raha sanatria.

famolavolana

Teny vitsivitsy momba ny kaody loharano Odyssey.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

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

Ohatra, misy baiko "Pause / Resume". Matetika izy ireo no ampiasaina hanavaozana ny angon-drakitra. Raha mila manavao ny Postgres ianao dia azonao atao ny mampiato azy ao amin'ny pooler fifandraisana, manaova pg_upgrade, ary avereno indray. Ary avy amin'ny lafiny mpanjifa dia ho toy ny nihena fotsiny ny angon-drakitra. Ity fampiasa ity dia nentin'ny olona avy amin'ny fiarahamonina ho antsika. Mbola tsy maty izy, fa tsy ho ela dia ho tanteraka ny zava-drehetra. (efa maty)

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/73 - efa maty

Ankoatra izany, ny iray amin'ireo endri-javatra vaovao ao amin'ny PgBouncer dia ny fanohanan'ny SCRAM Authentication, izay nentin'ny olona tsy miasa ao amin'ny Yandex.Cloud. Samy manana fiasa sarotra sy manan-danja izy ireo.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Noho izany, tiako ny hilaza aminao hoe inona no nanaovana ny Odyssey, raha toa ka te hanoratra code izao koa ianao.

Manana ny fototra Odyssey tany am-boalohany ianao, izay miankina amin'ny tranomboky lehibe roa. Ny tranomboky Kiwi dia fampiharana ny protocole hafatra Postgres. Izany hoe, ny proto 3 teratany Postgres dia hafatra mahazatra izay azon'ny frontends sy backends mifanakalo. Izy ireo dia ampiharina ao amin'ny tranomboky Kiwi.

Ny tranomboky Machinarium dia tranomboky fampiharana kofehy. Sombiny kely amin'ity Machinarium ity dia nosoratana tamin'ny assembler. Aza manahy anefa fa 15 ihany ny andalana.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Architecture Odyssey. Misy milina lehibe mandeha coroutine. Ity milina ity dia mampihatra ny fanekena ny fifandraisana TCP miditra sy ny fizarana amin'ny mpiasa.

Ao anatin'ny mpiasa iray dia afaka miasa ny mpitantana iray ho an'ny mpanjifa maromaro. Ary koa ao amin'ny kofehy lehibe, mihodina ny console sy ny fanodinana ny asan'ny crone hanesorana ireo fifandraisana tsy ilaina ao anaty dobo.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Odyssey dia nosedraina tamin'ny alàlan'ny suite fitsapana Postgres mahazatra. Izahay dia manao install-check amin'ny Bouncer ary amin'ny alàlan'ny Odyssey dia mahazo div null izahay. Misy fitsapana maromaro mifandraika amin'ny fandrafetana daty izay tsy mahomby amin'ny Bouncer sy Odyssey.

Ankoatra izany, maro ireo mpamily manana ny fitiliana azy manokana. Ary mampiasa ny fitsapana azy ireo izahay hitsapana ny Odyssey.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary koa, noho ny fandrindrana cascading ataontsika dia tsy maintsy mizaha fehezam-boninkazo isan-karazany isika: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey mba hahazoana antoka fa raha ao amin'ny ampahany amin'ny cascade i Odyssey, dia mbola miasa araka ny nantenaina ihany koa. .

karohy

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Mampiasa Odyssey izahay amin'ny famokarana. Ary tsy rariny raha hoy aho hoe mandeha fotsiny ny zava-drehetra. Tsia, izany hoe eny, fa tsy foana. Ohatra, tamin'ny famokarana dia nandeha fotsiny ny zava-drehetra, avy eo ny namanay avy amin'ny PostgreSQL Professional dia tonga ary nilaza fa nisy fahatsiarovan-tena. Tena nisy izy ireo, nanamboatra azy ireo izahay. Tsotra anefa izany.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Avy eo dia hitanay fa manana fifandraisana TLS miditra sy fifandraisana TLS mivoaka ny mpanamory fifandraisana. Ary ny fifandraisana dia mila fanamarinana mpanjifa sy mari-pankasitrahana mpizara.

Ny mari-pankasitrahana mpizara Bouncer sy Odyssey dia vakiana indray amin'ny pcache, fa tsy mila averina vakiana avy amin'ny pcache ny mari-pankasitrahana mpanjifa, satria ny Odyssey scalable dia miankina amin'ny fahombiazan'ny rafitra amin'ny famakiana ity taratasy ity. Nahagaga anay izany, satria tsy niala sasatra avy hatrany izy. Tamin'ny voalohany dia nihena tsikelikely izy io, ary taorian'ny fifandraisana 20 tonga dia nipoitra io olana io.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Pluggable Authentication Method dia ny fahafahana manamarina amin'ny fitaovana lunux naorina. Ao amin'ny PgBouncer dia ampiharina amin'ny fomba izay misy kofehy misaraka miandry valiny avy amin'ny PAM ary misy kofehy PgBouncer lehibe izay manompo ny fifandraisana ankehitriny ary afaka mangataka azy ireo hiaina ao amin'ny kofehy PAM.

Tsy nampihatra izany izahay noho ny antony tsotra. Manana renirano maro izahay. Nahoana isika no mila izany?

Vokatr'izany dia mety hiteraka olana izany raha toa ka manana fanamarinana PAM sy fanamarinana tsy PAM ianao, dia mety hanemotra be ny fanamarinana tsy PAM ny onjam-peo lehibe amin'ny fanamarinana PAM. Iray amin'ireo zavatra tsy voafehintsika izany. Fa raha te hanamboatra azy ianao dia azonao atao izany.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ny rake iray hafa dia ny hoe manana kofehy iray izahay izay manaiky ny fifandraisana miditra rehetra. Ary avy eo dia afindra any amin'ny dobo mpiasa izy ireo, izay hanaovana ny fifampikasohana TLS.

Vokatr'izany, raha manana onja mifandray amin'ny tambajotra 20 ianao, dia ho ekena daholo izy ireo. Ary eo amin'ny lafiny mpanjifa, ny libpq dia hanomboka hitatitra ny fotoam-potoana. Amin'ny alàlan'ny default, toy ny 000 segondra eo.

Raha tsy afaka miditra ao amin'ny toby miaraka amin'ny fotoana iray izy ireo, dia tsy afaka miditra ao amin'ny fototra izy ireo, satria izany rehetra izany dia mety ho voarakotry ny retry tsy exponential.

Nadikay teto ny tetika PgBouncer mba hanakanana ny isan'ny fifandraisana TCP ekenay.

Raha hitantsika fa manaiky fifandraisana isika, nefa tsy manam-potoana hifandraisana amin'ny tanana izy ireo amin'ny farany, dia apetrakay amin'ny filaharana izy ireo mba tsy handany ny loharanon-karena CPU. Izany dia mitarika ho amin'ny zava-misy fa ny fifampikasohana tànana dia tsy azo atao ho an'ny fifandraisana rehetra tonga. Fa farafaharatsiny dia hisy olona hiditra ao amin'ny tahiry, na dia matanjaka aza ny entana.

Tondrozotra

Inona no tianao ho hita amin'ny ho avy any Odyssey? Inona no vonona hampandroso ny tenantsika ary inona no antenaintsika amin’ny fiaraha-monina?

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ho an'ny Aogositra 2019.

Toy izao ny endriky ny tondrozotra Odyssey tamin'ny volana Aogositra:

  • Nangataka fanamarinana SCRAM sy PAM izahay.
  • Tianay ny handefa ny fangatahana famakiana ho an'ny standby.
  • Te-hiverina amin'ny Internet aho.
  • Ary ny fahafahana miato eo amin'ny mpizara.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ny antsasak'io sori-dalana io no vita, fa tsy anay. Ary tsara izany. Andeha àry hifanakalo hevitra momba izay tavela ary hanampy bebe kokoa.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Momba ny fanontanina vakiana fotsiny mankany amin'ny standby? Manana kopia izahay izay, raha tsy mahafeno ny fangatahana, dia hanafana fotsiny ny rivotra. Mila azy ireo izahay mba hanome failover sy switchover. Raha misy olana ao amin'ny iray amin'ireo ivotoerana angon-drakitra dia te-hibodo azy ireo amin'ny asa mahasoa aho. Satria tsy afaka manamboatra ireo processeur afovoany mitovy isika, ny fahatsiarovana mitovy amin'ny fomba hafa, satria tsy mandeha ny replication raha tsy izany.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Amin'ny ankapobeny, ao amin'ny Postgres, manomboka amin'ny 10, dia azo atao ny mamaritra session_attrs rehefa mifandray. Azonao atao ny mitanisa ny mpampiantrano data rehetra ao amin'ny fifandraisana ary milaza ny antony handehananao any amin'ny tahiry: manoratra na mamaky fotsiny. Ary ny mpamily mihitsy no hifidy ny mpampiantrano voalohany amin'ny lisitra izay tiany indrindra, izay mahafeno ny fepetra takian'ny session_attrs.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Saingy ny olana amin'ity fomba fiasa ity dia ny tsy fifehezana ny fahatarana amin'ny replication. Mety manana karazana dika mitovy amin'ny fotoana tsy azo ekena ho an'ny serivisy ianao. Mba hanatanterahana feno ny fangatahana famakiana amin'ny kopia iray, raha ny marina, mila manohana ao amin'ny Odyssey ny fahafahana tsy miasa rehefa tsy azo atao ny mamaky.

Odyssey dia tsy maintsy mandeha amin'ny angon-drakitra tsindraindray ary mangataka ny halaviran'ny replication amin'ny voalohany. Ary raha tonga amin'ny fetra izany, aza avela hiditra ao anaty angon-drakitra ny fangatahana vaovao, lazao amin'ny mpanjifa fa mila mamerina ny fifandraisana ianao ary, mety, mifidiana mpampiantrano hafa hanatanteraka fangatahana. Izany dia ahafahan'ny angon-drakitra hamerina haingana ny fahatarana amin'ny famerenana ary hiverina indray hamaly amin'ny fangatahana.

Sarotra ny manonona ny daty fampiharana, satria loharano misokatra. Saingy, manantena aho fa tsy 2,5 taona toy ny mpiara-miasa amin'ny PgBouncer. Ity no endri-javatra tiako ho hita ao amin'ny Odyssey.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Tao amin'ny fiaraha-monina, nanontany momba ny fanohanana fanambarana voaomana ny olona. Ankehitriny ianao dia afaka mamorona fanambarana voaomana amin'ny fomba roa. Voalohany, azonao atao ny manatanteraka baiko SQL, izany hoe "voaomana". Mba hahatakarana io baiko SQL io dia mila mianatra ny fomba fahazoana SQL amin'ny lafiny Bouncer isika. Mety ho tafahoatra izany satria be loatra izany satria ilaintsika ny parser manontolo. Tsy afaka mamaha ny baiko SQL rehetra izahay.

Saingy misy fanambarana voaomana amin'ny ambaratonga protocol amin'ny proto3. Ary amin'ity toerana ity dia tonga amin'ny endrika voarafitra ny fampahalalana momba ny famoronana fanambarana voaomana. Ary afaka manohana ny fahatakarana izahay fa amin'ny fifandraisana amin'ny server sasany dia nangataka ny mpanjifa hamorona fanambarana voaomana. Ary na dia mikatona aza ny fifampiraharahana, dia mbola mila mifandray foana ny mpizara sy ny mpanjifa.

Saingy eto dia misy ny tsy fitovian-kevitra eo amin'ny fifanakalozan-kevitra, satria misy olona milaza fa mila mahatakatra izay fanambarana nomanina noforonin'ny mpanjifa ary mizara ny fifandraisana amin'ny mpizara eo amin'ireo mpanjifa rehetra namorona ity fifandraisana amin'ny server ity, izany hoe, izay namorona fanambarana voaomana toy izany.

Andres Freund dia nilaza fa raha misy mpanjifa tonga any aminao izay efa namorona fanambarana voaomana toy izany amin'ny fifandraisana amin'ny mpizara hafa, dia mamorona izany ho azy. Saingy toa diso kely ny manatanteraka fanontaniana ao amin'ny database fa tsy amin'ny mpanjifa, fa amin'ny fomba fijerin'ny developer iray izay manoratra protocole hifaneraserana amin'ny database dia mety tsara raha omena fifandraisana amin'ny tambajotra izy. izay manana fangatahana voaomana toy izany.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ary lafin-javatra iray hafa tokony hampiharina. Manana fanaraha-maso mifanaraka amin'ny PgBouncer izahay izao. Afaka mamerina ny salan'isan'ny fotoana fanatanterahana ny fangatahana. Fa ny eo ho eo ny mari-pana ao amin'ny hopitaly: misy mangatsiaka, misy mafana - amin'ny antsalany dia salama ny rehetra. Tsy marina izany.

Mila mampihatra fanohanana isan-jato isika, izay midika fa misy ny fangatahana miadana mandany loharanon-karena ary mety hahatonga ny fanaraha-maso ho azo ekena kokoa.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Ny tena zava-dehibe dia tiako ny version 1.0 (efa navoaka ny version 1.1). Ny zava-misy dia izao i Odyssey dia ao amin'ny version 1.0rc, izany hoe ny kandida famotsorana. Ary ny rake rehetra izay notanisaiko dia namboarina tamin'ny dikan-teny mitovy, afa-tsy ny leak fahatsiarovana.

Inona no dikan'ny dikan-teny 1.0 ho antsika? Mamoaka ny Odyssey mankany amin'ny toby izahay. Efa mandeha amin'ny database-tsika izy io, fa rehefa mahatratra 1 ny fangatahana isan-tsegondra, dia azo lazaina fa version release io ary version 000 io.

Olona maromaro ao amin'ny vondrom-piarahamonina no nangataka fiatoana bebe kokoa sy SCRAM amin'ny version 1.0. Saingy midika izany fa mila mamoaka ny kinova manaraka amin'ny famokarana isika, satria na ny SCRAM na ny fiatoana dia mbola tsy natambatra. Saingy, azo inoana fa ho voavaha haingana io olana io.

Tondrozotra Odyssey: inona koa no tadiavintsika amin'ny mpanangom-pifandraisana. Andrey Borodin (2019)

Miandry ny fangatahanao misintona aho. Ary tiako koa ny mandre ny olana mahazo anao amin'ny Bouncer. Andeha isika hiresaka momba azy ireo. Angamba afaka mampihatra asa sasany ilainao izahay.

Izao no mamarana ny anjarako, tiako ny hihaino anao. Misaotra anao!

Ny fanontanianao

Raha mametraka ny anarako_application_ko manokana ve aho dia hatsipy araka ny tokony ho izy, ao anatin'izany ny fifampiraharahana amin'ny Odyssey?

Odyssey sa Bouncer?

Ao amin'ny Odyssey. Natsipy ny Bouncer.

Hanao andiany isika.

Ary raha mitsambikina amin'ny fifandraisana hafa ve ny tena fifandraisako dia ampitaina ve izany?

Hanao andiana ny paramètre rehetra voatanisa isika. Tsy fantatro raha ao anatin'ity lisitra ity ny application_name. Toa hitany teo izy. Hametraka paramètre mitovy daholo isika. Miaraka amin'ny fangatahana iray, ny set dia hanao izay rehetra napetraky ny mpanjifa nandritra ny fanombohana.

Misaotra an'i Andrey tamin'ny tatitra! Tatitra tsara! Faly aho fa mivoatra haingana sy haingana kokoa i Odyssey isa-minitra. Tiako ny hanohy izany. Efa nangataka anao izahay mba hanana fifandraisana loharanon-drakitra marobe mba hahafahan'i Odyssey mifandray amin'ny angon-drakitra samihafa amin'ny fotoana iray, izany hoe ny tompon'ny andevo, ary avy eo mifandray ho azy amin'ny tompony vaovao aorian'ny failover.

Eny, toa tadidiko io resaka io. Ankehitriny dia misy tahiry maromaro. Saingy tsy misy fifandimbiasana eo amin'izy ireo. Amin'ny lafiny iray, tsy maintsy manontany ny mpizara isika fa mbola velona izy ary mahatakatra fa nisy failover, izay hiantso ny pg_recovery. Manana fomba mahazatra aho hahatakatra fa tsy tonga tany amin'ny tompony izahay. Ary tsy maintsy takatsika amin'ny fomba ahoana ny fahadisoana na amin'ny fomba ahoana? Izany hoe, mahaliana ny hevitra, dinihina. Manorata fanehoan-kevitra bebe kokoa. Raha manana tanana miasa mahay C ianao dia mahafinaritra izany amin'ny ankapobeny.

Mahaliana anay ihany koa ny olana momba ny fanamafisam-peo amin'ny kopia, satria tianay atao ho tsotra araka izay azo atao ho an'ny mpamorona ny fampiharana ny fananganana clusters. Fa eto aho dia mila fanehoan-kevitra bebe kokoa, izany hoe ny fomba hanaovana azy, ny fomba hanaovana azy tsara.

Ny fanontaniana dia momba ny kopia ihany koa. Hita fa manana tompony sy kopia maromaro ianao. Ary mazava ho azy fa mandeha any amin'ny kopia matetika kokoa noho ny tompon'ny fifandraisana izy ireo, satria mety hisy fahasamihafana. Nilaza ianao fa ny fahasamihafan'ny angon-drakitra dia mety tsy ho afa-po ny orinasanao ary tsy handeha any ianao raha tsy averina. Amin'izay fotoana izay ihany koa, raha tsy mandeha any ianao mandritra ny fotoana maharitra, ary avy eo dia manomboka mandeha, dia tsy ho tonga avy hatrany ny angon-drakitra ilainao. Izany hoe, raha mankany amin'ny tompony foana isika, dia mafana ny cache ao, ary ny cache dia ao ambadiky ny kopia.

Eny marina izany. Tsy hisy sakana angon-drakitra ao amin'ny pcache tianao, amin'ny tena cache dia tsy hisy fampahalalana momba ny tabilao tianao, tsy hisy fanontaniana parsed ao amin'ny drafitra, tsy misy na inona na inona.

Ary rehefa manana karazana cluster ianao, ary manampy kopia vaovao ao, dia rehefa manomboka izany dia ratsy daholo ny zava-drehetra ao, izany hoe mampitombo ny cache.

azoko ilay hevitra. Ny fomba mety dia ny fametrahana ampahany kely amin'ny fanontaniana amin'ny kopia aloha, izay hanafana ny cache. Raha fintinina dia manana fepetra isika fa tsy tokony hihoatra ny 10 segondra aorian'ny tompony. Ary ity fepetra ity dia tsy tokony ho tafiditra ao anaty onja iray, fa milamina ho an'ny mpanjifa sasany.

Eny, mampitombo lanja.

Hevitra tsara izany. Saingy mila mampihatra an'io fanakatonana io aloha ianao. Voalohany dia mila vonoina isika, ary avy eo dia hieritreritra ny fomba hamonoana. Ity dia endri-javatra lehibe ahafahana mandeha tsara.

nginx dia manana ity safidy ity slowly start ao amin'ny cluster ho an'ny mpizara. Ary amboariny tsikelikely ny entana.

Eny, hevitra tsara, ho andramana isika rehefa tonga amin'izany.

Source: www.habr.com

Add a comment