Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nan rapò li a, Andrey Borodin pral di w ki jan yo te pran an kont eksperyans nan dekale PgBouncer lè yo te desine pooler koneksyon an. Odyssey, menm jan yo woule li soti nan pwodiksyon an. Anplis de sa, nou pral diskite sou ki fonksyon puller a nou ta renmen wè nan nouvo vèsyon: li enpòtan pou nou pa sèlman satisfè bezwen nou yo, men pou devlope kominote itilizatè a. Odyssey.

Videyo:

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Bonjou tout moun! Non mwen se Andre.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nan Yandex, mwen devlope baz done sous louvri. Ak jodi a nou gen yon sijè sou koneksyon pooler koneksyon.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Si w konnen ki jan yo rele koneksyon pooler nan Ris, Lè sa a, di m '. Mwen vrèman vle jwenn yon bon tèm teknik ki ta dwe etabli nan literati teknik la.

Sijè a se byen konplike, paske nan anpil baz done pooler koneksyon an entegre epi ou pa menm bezwen konnen sou li. Natirèlman, gen kèk anviwònman toupatou, men nan Postgres li pa travay nan fason sa a. Ak nan paralèl (nan HighLoad ++ 2019) gen yon rapò pa Nikolai Samokhvalov sou mete kanpe demann nan Postgres. Ak jan mwen konprann li, moun ki te vin isit la ki te deja configuré demann yo parfe, ak sa yo se moun ki fè fas ak pwoblèm sistèm ki pi ra ki gen rapò ak itilizasyon rezo a ak resous yo. Ak nan kèk kote li ta ka byen difisil nan sans ke pwoblèm yo pa evidan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Yandex gen Postgres. Anpil sèvis Yandex ap viv nan Yandex.Cloud. Epi nou gen plizyè petabyte done ki jenere omwen yon milyon demann pou chak segonn nan Postgres.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Epi nou bay yon gwoup san patipri estanda pou tout sèvis - sa a se ne prensipal prensipal la nan ne la, abityèl de kopi (synchrone ak asynchrone), backup, dekale nan demann lekti sou kopi a.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Chak ne grap se Postgres, kote, anplis Postgres ak sistèm siveyans, yo enstale yon pooler koneksyon tou. Pooler koneksyon yo itilize pou kloti ak pou objektif prensipal li yo.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Ki objektif prensipal koneksyon pooler?

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Postgres adopte yon modèl pwosesis lè w ap travay ak yon baz done. Sa vle di ke yon sèl koneksyon se yon pwosesis, yon sèl Postgres backend. Ak nan backend sa a gen yon anpil nan kachèt diferan, ki se byen chè fè diferan pou koneksyon diferan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Anplis de sa, kòd Postgres gen yon etalaj ki rele procArray. Li gen done debaz sou koneksyon rezo a. Ak prèske tout algoritm pwosesis procArray gen konpleksite lineyè; yo kouri sou tout seri koneksyon rezo a. Li se yon sik trè rapid, men ak plis koneksyon rezo fèk ap rantre bagay yo vin yon ti kras pi chè. Men, lè bagay yo vin yon ti kras pi chè, ou ka fini peye yon pri trè wo pou yon anpil nan koneksyon rezo.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Gen 3 apwòch posib:

  • Sou bò aplikasyon an.
  • Sou bò baz done a.
  • Ak ant, se sa ki, tout kalite konbinezon.

Malerezman, pooler entegre a se kounye a sou devlopman. Zanmi nou yo nan PostgreSQL Professional fè sa sitou. Lè li pral parèt difisil pou predi. Ak an reyalite, nou gen de solisyon pou achitèk la yo chwazi nan. Sa yo se pisin bò aplikasyon ak pisin prokurasyon.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Aplikasyon-bò pisin se fason ki pi fasil. Ak prèske tout chofè kliyan bay ou ak yon fason: prezante dè milyon de koneksyon ou nan kòd kòm plizyè douzèn koneksyon nan baz done a.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Pwoblèm nan ki rive se ke nan yon sèten pwen ou vle echèl backend la, ou vle deplwaye li nan anpil machin vityèl.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Lè sa a, ou reyalize ke ou gen plizyè plis zòn disponiblite, plizyè sant done. Ak apwòch la pisin bò kliyan mennen nan pi gwo nimewo. Gwo yo se anviwon 10 koneksyon. Sa a se kwen an ki ka travay nòmalman.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Si nou pale sou proxy poolers, lè sa a gen de poolers ki ka fè anpil bagay. Yo pa sèlman poolers. Yo se poolers + plis fonctionnalités fre. Sa a Pgpool и Croquant-Proxy.

Men, malerezman, se pa tout moun ki bezwen fonksyonalite adisyonèl sa a. Epi li mennen nan lefèt ke poolers sèlman sipòte sesyon pooling, sa vle di yon kliyan fèk ap rantre, yon sèl kliyan sortan nan baz done a.

Sa a pa trè apwopriye pou objektif nou yo, kidonk nou itilize PgBouncer, ki aplike tranzaksyon pisin, sa vle di koneksyon sèvè yo matche ak koneksyon kliyan sèlman pou dire tranzaksyon an.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Ak nan kantite travay nou an, sa a se vre. Men, gen kèk pwoblèm.Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Pwoblèm yo kòmanse lè ou vle fè dyagnostik yon sesyon, paske tout koneksyon ou fèk ap rantre yo lokal yo. Tout moun te vini ak yon loopback ak yon jan kanmenm li vin difisil yo trase sesyon an.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Natirèlman ou ka itilize application_name_add_host. Sa a se yon fason sou bò Bouncer ajoute yon adrès IP nan application_name. Men application_name mete pa yon koneksyon adisyonèl.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Sou graf sa a, kote liy jòn la se demann reyèl, ak kote liy ble a se demann ki vole nan baz done a. Ak diferans sa a se jisteman enstalasyon application_name, ki nesesè sèlman pou trase, men li pa gratis ditou.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Anplis de sa, nan Bouncer ou pa ka limite yon sèl pisin, sa vle di kantite koneksyon baz done pou chak itilizatè espesifik, pou chak baz done espesifik.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Ki sa sa mennen nan? Ou gen yon sèvis chaje ekri nan C++ ak yon kote tou pre yon ti sèvis sou yon ne ki pa fè anyen terib ak baz done a, men chofè li ale fou. Li louvri 20 koneksyon ak tout lòt bagay ap tann. Menm kòd ou a nòmal.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nou, nan kou, te ekri yon ti patch pou Bouncer ki te ajoute anviwònman sa a, sa vle di limite kliyan nan pisin lan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Li ta posib pou fè sa sou bò Postgres, sa vle di, limite wòl yo nan baz done a pa kantite koneksyon.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Men, Lè sa a, ou pèdi kapasite nan konprann poukisa ou pa gen okenn koneksyon ak sèvè a. PgBouncer pa voye yon erè koneksyon, li toujou retounen menm enfòmasyon an. Epi ou pa ka konprann: petèt modpas ou a chanje, petèt baz done a jis te pèdi, petèt yon bagay ki mal. Men, pa gen okenn dyagnostik. Si yon sesyon pa ka etabli, ou p'ap konnen poukisa li pa kapab etabli.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nan yon sèten pwen, ou gade nan graf aplikasyon yo epi wè ke aplikasyon an pa travay.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Gade nan tèt la epi wè ke Bouncer se yon sèl-threaded. Sa a se yon pwen vire nan lavi sèvis la. Ou reyalize ke ou te prepare pou echèl baz done a nan yon ane ak yon mwatye, epi ou bezwen echèl pooler la.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nou rive nan konklizyon ke nou bezwen plis PgBouncers.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

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

Bouncer te patched yon ti jan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Apre sa, yo te fè li pou ke plizyè Bouncers te kapab leve soti vivan nan réutilisation pò a TCP. Ak sistèm operasyon an otomatikman transfere fèk ap rantre TCP koneksyon ant yo lè l sèvi avèk round-robin.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Sa a transparan pou kliyan, sa vle di li sanble ke ou gen yon sèl Bouncer, men ou gen fwagmantasyon nan koneksyon san fè anyen konsa ant kouri Bouncers.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Ak nan yon sèten moman ou ka remake ke 3 Bouncers sa yo chak manje nwayo yo a 100%. Ou bezwen byen kèk Bouncers. Poukisa?

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Paske ou gen TLS. Ou gen yon koneksyon chiffres. Men, si ou referans Postgres ak ak san TLS, w ap jwenn ke kantite koneksyon etabli desann nan prèske de lòd nan grandè ak chifreman pèmèt, paske TLS lanmen an konsome resous CPU.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Ak nan tèt la ou ka wè byen kèk fonksyon kriptografik ke yo egzekite lè gen yon vag koneksyon fèk ap rantre. Depi prensipal nou an ka chanje ant zòn disponiblite, yon vag koneksyon fèk ap rantre se yon sitiyasyon jistis tipik. Sa vle di, pou kèk rezon ansyen prensipal la pa disponib, yo te voye tout chaj la nan yon lòt sant done. Yo tout pral vin di TLS bonjou an menm tan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Ak yon gwo kantite TLS lanmen ka pa di bonjou Bouncer ankò, men li pral peze gòj li. Akòz delè a, vag koneksyon k ap fèk ap rantre yo ka vin dekouraje. Si ou reesye nan baz la san yo pa backoff eksponansyèl, yo pa pral vini ankò e ankò nan yon vag aderan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Isit la se yon egzanp 16 PgBouncers ki chaje 16 nwayo a 100%.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nou rive nan kaskad PgBouncer la. Sa a se pi bon konfigirasyon ki ka reyalize sou chaj nou an ak Bouncer. Bouncers ekstèn nou yo itilize pou TCP lanmen, ak Bouncers entèn yo itilize pou pisin reyèl, pou yo pa fragmente koneksyon ekstèn twòp.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nan konfigirasyon sa a, yon rekòmanse lis posib. Ou ka rekòmanse tout 18 Bouncers sa yo youn pa youn. Men, kenbe yon konfigirasyon konsa se byen difisil. Sysadmins, DevOps, ak moun ki aktyèlman responsab pou sèvè sa a pa pral trè kontan ak aranjman sa a.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Li ta sanble ke tout amelyorasyon nou yo ka monte nan sous louvri, men Bouncer pa trè byen sipòte. Pou egzanp, kapasite nan kouri plizyè PgBouncers sou yon sèl pò te komèt yon mwa de sa. Te gen yon demann rale ak karakteristik sa a plizyè ane de sa.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

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

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

Oswa yon lòt egzanp. Nan Postgres, ou ka anile yon demann nan pwogrè lè w voye sekrè a nan yon koneksyon diferan san otantifikasyon nesesè. Men, gen kèk kliyan tou senpleman voye yon reset TCP, sa vle di yo kraze koneksyon rezo a. Kisa Bouncer pral fè? Li pap fè anyen. Li pral kontinye egzekite demann lan. Si ou te resevwa yon gwo kantite koneksyon ki te kreye yon baz done ak ti demann, Lè sa a, tou senpleman dekonekte koneksyon an soti nan Bouncer pa pral ase; ou bezwen tou ranpli demann sa yo ki ap kouri nan baz done a.

Sa a te patched ak pwoblèm sa a poko fizyone nan en Bouncer a.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Se konsa, nou te rive nan konklizyon an ke nou bezwen pooler pwòp koneksyon nou an, ki pral devlope, patched, nan ki pwoblèm yo ka byen vit korije epi ki, nan kou, yo dwe milti-threaded.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nou mete multithreading kòm travay prensipal la. Nou bezwen kapab jere vag koneksyon TLS k ap fèk ap rantre yo byen.

Pou fè sa, nou te oblije devlope yon bibliyotèk separe ki rele Machinarium, ki fèt pou dekri eta machin yo nan yon koneksyon rezo kòm kòd sekans. Si w gade kòd sous libpq a, w ap wè kèk apèl trè konplèks ki ka retounen w yon rezilta epi di, “Rele m pita. Kounye a mwen gen IO pou kounye a, men lè IO a ale, mwen pral gen yon chaj sou processeur a. Ak sa a se yon konplo milti-nivo. Kominikasyon rezo anjeneral dekri pa yon machin leta. Anpil règ tankou "Si mwen te deja resevwa yon header pake ki gen gwosè N, kounye a mwen ap tann pou N byte," "Si mwen voye yon pake SYNC, kounye a mwen ap tann pou yon pake ak metadata rezilta." Rezilta a se yon kòd olye difisil, counterintuitive, tankou si labirent la te konvèti nan eskanè liy. Nou te fè li pou ke olye pou yo yon machin leta, pwogramè a dekri chemen prensipal la nan entèraksyon nan fòm lan nan kòd enperatif òdinè. Se jis ke nan kòd enperatif sa a ou bezwen mete kote kote sekans ekzekisyon an bezwen entèwonp pa tann done ki soti nan rezo a, pase kontèks ekzekisyon an nan yon lòt coroutine (fil vèt). Apwòch sa a sanble ak lefèt ke nou ekri chemen ki pi espere nan labirent la nan yon ranje, ak Lè sa a, ajoute branch nan li.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Kòm yon rezilta, nou gen yon sèl fil ki TCP aksepte ak round-robin pase koneksyon TPC a bay anpil travayè.

Nan ka sa a, chak koneksyon kliyan toujou kouri sou yon sèl processeur. Lè sa a pèmèt ou fè li kachèt-zanmitay.

Anplis de sa, nou te yon ti kras amelyore koleksyon ti pake nan yon sèl gwo pake yo nan lòd yo soulaje pil TCP sistèm lan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Anplis de sa, nou te amelyore pisin tranzaksyon nan sans ke Odyssey, lè konfigirasyon, ka voye ANILE ak ROLLBACK nan ka yon echèk koneksyon rezo a, sa vle di si pa gen moun ki ap tann pou yon demann, Odyssey pral di baz done a pa eseye. ranpli demann lan ki ka gaspiye resous presye.

Epi chak fwa sa posib, nou kenbe koneksyon ak menm kliyan an. Sa a evite gen pou réinstaller application_name_add_host. Si sa posib, Lè sa a, nou pa bezwen anplis Reyajiste paramèt yo ki nesesè pou dyagnostik.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nou travay nan enterè Yandex.Cloud. Men, si ou itilize PostgreSQL jere epi ou gen yon pooler koneksyon enstale, ou ka kreye replikasyon lojik deyò, sa vle di, kite nou, si ou vle, lè l sèvi avèk replikasyon lojik. Bouncer pa pral lage koule nan replikasyon lojik deyò.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Sa a se yon egzanp mete kanpe replikasyon lojik.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Anplis de sa, nou gen sipò pou replikasyon fizik deyò. Nan nwaj la, nan kou, sa a se enposib, paske Lè sa a, gwoup la ap ba ou twòp enfòmasyon sou tèt li. Men, nan enstalasyon ou yo, si ou bezwen replikasyon fizik atravè pooler koneksyon an nan Odyssey, sa posib.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Odyssey gen siveyans konplètman konpatib ak PgBouncer. Nou gen konsole a menm ki kouri prèske tout kòmandman yo menm. Si yon bagay ki manke, voye yon demann rale, oswa omwen yon pwoblèm sou GitHub, epi nou pral ranpli kòmandman ki nesesè yo. Men, nou deja gen fonksyonalite prensipal konsole PgBouncer la.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Epi, nan kou, nou gen erè voye. Nou pral retounen erè a rapòte pa baz done a. Ou pral resevwa enfòmasyon sou poukisa ou pa enkli nan baz done a, epi yo pa sèlman ke ou pa enkli ladan li.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Karakteristik sa a enfim nan ka ou bezwen 100% konpatibilite ak PgBouncer. Nou ka konpòte menm jan ak Bouncer, jis pou nou an sekirite.

Devlopman

Kèk mo sou kòd sous Odyssey la.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

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

Pou egzanp, gen kòmandman "Poz / Rezime". Yo anjeneral yo itilize yo mete ajou baz done a. Si ou bezwen mete ajou Postgres, Lè sa a, ou ka pran yon poz li nan pooler koneksyon an, fè pg_upgrade, Lè sa a, fè rezime. Ak nan bò kliyan an li pral gade kòm si baz done a te tou senpleman ralanti. Fonksyonalite sa a te pote ban nou pa moun ki soti nan kominote a. Li poko jele, men byento tout bagay pral rive. (Deja jele)

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

https://github.com/yandex/odyssey/pull/73 - deja nan frizè

Anplis de sa, youn nan karakteristik yo ki nouvo nan PgBouncer se sipò pou SCRAM Otantifikasyon, ki te pote tou ba nou pa yon moun ki pa travay nan Yandex.Cloud. Tou de se fonksyonalite konplèks ak enpòtan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Se poutèt sa, mwen ta renmen di ou kisa Odyssey fèt, nan ka ou tou vle ekri yon ti kòd kounye a.

Ou gen baz sous Odyssey, ki depann sou de bibliyotèk prensipal yo. Bibliyotèk Kiwi a se yon aplikasyon pwotokòl mesaj Postgres. Sa vle di, natif natal proto 3 nan Postgres se mesaj estanda ke front-ends ak back-ends ka echanj. Yo aplike nan bibliyotèk Kiwi.

Bibliyotèk Machinarium se yon bibliyotèk aplikasyon fil. Yon ti fragman Machinarium sa a ekri nan lang asanble. Men, pa bezwen pè, gen sèlman 15 liy.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Odyssey achitekti. Gen yon machin prensipal sou ki coroutines ap kouri. Machin sa a aplike aksepte koneksyon TCP fèk ap rantre epi distribye yo nan mitan travayè yo.

Yon moun kap okipe plizyè kliyan ka travay nan yon sèl travayè. Fil prensipal la tou kouri konsole a ak pwosesis la nan travay crone yo efase koneksyon ki pa nesesè ankò nan pisin lan.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Odyssey teste lè l sèvi avèk estanda tès Postgres la. Nou jis kouri enstale-tcheke atravè Bouncer ak atravè Odyssey, nou jwenn yon div nil. Gen plizyè tès ki gen rapò ak fòma dat ki pa pase egzakteman menm bagay la nan Bouncer ak nan Odyssey.

Anplis de sa, gen anpil chofè ki gen pwòp tès yo. Epi nou itilize tès yo pou teste Odyssey la.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Anplis de sa, akòz konfigirasyon kaskad nou an, nou dwe teste divès pakèt: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey pou nou asire ke si Odyssey te fini nan nenpòt nan pati yo nan kaskad la, li tou toujou ap travay. jan nou espere.

Rato

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nou itilize Odyssey nan pwodiksyon an. Epi li pa ta jis si mwen te di ke tout bagay jis ap mache. Non, sa vle di wi, men se pa toujou. Pou egzanp, nan pwodiksyon tout bagay jis te travay, Lè sa a, zanmi nou yo ki soti nan PostgreSQL Professional te vini epi yo te di ke nou te gen yon flit memwa. Yo te reyèlman, nou korije yo. Men, li te senp.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Lè sa a, nou te dekouvri ke pooler koneksyon an gen koneksyon TLS fèk ap rantre ak koneksyon TLS sortan. Ak koneksyon mande pou sètifika kliyan ak sètifika sèvè.

Sètifika sèvè Bouncer ak Odyssey yo reli pa pcache yo, men sètifika kliyan yo pa bezwen reli nan pcache, paske Odyssey évolutive nou an finalman antre nan pèfòmans sistèm nan lekti sètifika sa a. Sa a te vin yon sipriz pou nou, paske li pa t pran tan pou l reziste. Okòmansman li te balanse lineyè, men apre 20 koneksyon similtane ki te fèk ap rantre pwoblèm sa a te montre tèt li.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Metòd Otantifikasyon Pluggable se kapasite pou otantifye lè l sèvi avèk zouti Lunux ki entegre yo. Nan PgBouncer li aplike nan yon fason ke gen yon fil separe pou tann yon repons soti nan PAM epi gen yon fil prensipal PgBouncer ki sèvis koneksyon aktyèl la epi li ka mande yo viv nan fil PAM la.

Nou pa t aplike sa pou yon senp rezon. Nou gen anpil fil. Poukisa nou bezwen sa?

Sa a ka finalman kreye pwoblèm nan ke si ou gen otantifikasyon PAM ak otantifikasyon ki pa PAM, Lè sa a, yon gwo vag nan otantifikasyon PAM ka siyifikativman retade otantifikasyon an ki pa PAM. Sa a se youn nan bagay sa yo ke nou pa te fikse. Men, si ou vle ranje li, ou ka fè sa.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Yon lòt rato te ke nou gen yon sèl fil ki aksepte tout koneksyon fèk ap rantre. Apre sa, yo transfere nan pisin travayè a, kote lanmen TLS pral pran plas.

Anba liy, si ou gen yon vag aderan nan 20 koneksyon rezo, yo tout pral aksepte. Ak sou bò kliyan libpq ap kòmanse rapòte timeouts. Pa default li sanble 000 segonn.

Si yo tout pa ka antre nan baz done a an menm tan, Lè sa a, yo pa ka antre nan baz done a, paske tout bagay sa yo ka kouvri pa retry ki pa eksponansyèl.

Nou te rive nan konklizyon an ke nou kopye konplo a soti nan PgBouncer isit la ak lefèt ke nou gen throttling kantite koneksyon TCP ke nou aksepte.

Si nou wè ke nou ap aksepte koneksyon, men yo finalman pa gen tan bay lanmen, nou mete yo nan yon keu pou yo pa gaspiye resous CPU. Sa a mennen nan lefèt ke yon lanmen similtane ka pa fèt pou tout koneksyon ki te rive. Men, omwen yon moun pral antre nan baz done a, menm si chaj la se byen lou.

Roadmap

Ki sa ou ta renmen wè nan lavni nan Odyssey? Ki sa nou pare pou devlope tèt nou e kisa nou espere nan kominote a?

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Apati mwa Out 2019.

Men ki jan plan Odyssey la te sanble nan mwa Out:

  • Nou te vle otantifikasyon SCRAM ak PAM.
  • Nou te vle voye demann lekti nan sibstiti.
  • Mwen ta renmen yon rekòmanse sou entènèt.
  • Ak kapasite nan pran yon poz sou sèvè a.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Mwatye plan sa a te konplete, epi se pa nou. E sa bon. Se konsa, kite a diskite sou sa ki rete epi ajoute plis.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Konsènan demann pou lekti sèlman nan sibstiti? Nou gen kopi ki pral tou senpleman chofe lè a san yo pa egzekite demann. Nou bezwen yo bay failover ak switchover. Nan ka pwoblèm nan youn nan sant done yo, mwen ta renmen okipe yo ak kèk travay itil. Paske nou pa ka configured menm processeurs santral yo, menm memwa a yon fason diferan, paske otreman replikasyon pa pral travay.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nan prensip, nan Postgres, apati de 10, li posib pou presize session_attrs lè w konekte. Ou ka lis tout lame baz done yo nan koneksyon an epi di poukisa ou prale nan baz done a: ekri oswa li sèlman. Ak chofè a tèt li pral chwazi premye lame a nan lis la ke li renmen pi byen, ki satisfè kondisyon yo nan session_attrs.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Men, pwoblèm nan ak apwòch sa a se ke li pa kontwole lag nan replikasyon. Ou ka gen kèk kopi ki te lagged dèyè pou yon kantite tan ki pa akseptab pou sèvis ou. Pou kapab pèmèt ekzekisyon konplè demann lekti sou yon kopi, nou esansyèlman bezwen sipòte kapasite Odyssey pou pa kouri lè li pa ka li.

Odyssey dwe ale nan baz done a de tan zan tan epi mande pou distans la replikasyon soti nan prensipal la. Men, si li te rive nan valè limit la, pa pèmèt nouvo demann nan baz done a, di kliyan an ke li bezwen re-kòmanse koneksyon epi, pètèt, chwazi yon lòt lame pou egzekite demann. Sa a pral pèmèt baz done a byen vit retabli lag replikasyon an epi retounen ankò pou reponn ak yon demann.

Li difisil pou bay yon delè pou aplikasyon, paske se sous louvri. Men, mwen espere, pa 2,5 ane tankou kòlèg mwen yo soti nan PgBouncer. Sa a se karakteristik mwen ta renmen wè nan Odyssey la.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Nan kominote a, moun te mande sou sipò pou deklarasyon an prepare. Koulye a, ou ka kreye yon deklarasyon prepare nan de fason. Premyèman, ou ka egzekite lòd SQL la, sètadi "prepare". Pou nou konprann kòmandman SQL sa a, nou bezwen aprann konprann SQL sou bò Bouncer. Sa a ta dwe yon twòp, paske li se twòp, depi nou bezwen analizeur a tout antye. Nou pa ka analize chak lòd SQL.

Men, gen yon deklarasyon ki prepare nan nivo pwotokòl mesaj sou proto3. Lè sa a se kote a lè enfòmasyon ki yon deklarasyon prepare yo te kreye vini nan yon fòm estriktire. Epi nou ta ka sipòte konpreyansyon ke sou kèk koneksyon sèvè kliyan an te mande yo kreye deklarasyon prepare. E menm si tranzaksyon an fèmen, nou toujou bezwen kenbe koneksyon ant sèvè a ak kliyan an.

Men, isit la yon diferans nan dyalòg la rive, paske yon moun di ke ou bezwen konprann ki kalite deklarasyon prepare kliyan an te kreye epi pataje koneksyon an sèvè ant tout kliyan ki te kreye koneksyon sèvè sa a, sa vle di, ki moun ki te kreye tankou yon deklarasyon prepare.

Andres Freund te di ke si yon kliyan vin jwenn ou ki te deja kreye tankou yon deklarasyon prepare nan yon lòt koneksyon sèvè, Lè sa a, kreye li pou li. Men, li sanble yon ti kras mal egzekite demann nan baz done a olye pou yo kliyan an, men nan pwen de vi nan pwomotè a ki ekri pwotokòl la pou kominike avèk baz done a, li ta pratik si li te tou senpleman bay yon koneksyon rezo nan ki gen tankou yon rechèch prepare.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Ak yon lòt karakteristik ke nou bezwen aplike. Kounye a nou gen siveyans ki konpatib ak PgBouncer. Nou ka retounen tan an mwayèn egzekisyon demann. Men, tan an mwayèn se tanperati mwayèn nan lopital la: gen kèk ki frèt, kèk ki cho - an mwayèn, tout moun an sante. Se pa vre.

Nou bezwen enplimant sipor pour percentiles, ki pou endike ki i annan demann lenter ki pe gaspiy resours e ki pou rann monitoring pli akseptab.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

Bagay ki pi enpòtan an se ke mwen vle vèsyon 1.0 (Vèsyon 1.1 te deja lage). Reyalite a se ke Odyssey se kounye a nan vèsyon 1.0rc, sa vle di kandida lage. Ak tout pwoblèm yo ke mwen ki nan lis yo te fiks ak egzakteman menm vèsyon an, eksepte pou koule nan memwa.

Kisa vèsyon 1.0 pral vle di pou nou? Nou ap woule Odyssey nan baz nou yo. Li deja ap kouri sou baz done nou yo, men lè li rive nan pwen 1 demann pou chak segonn, Lè sa a, nou ka di ke sa a se vèsyon an lage ak sa a se yon vèsyon ki ka rele 000.

Plizyè moun nan kominote a te mande ke vèsyon 1.0 gen ladan poz ak SCRAM. Men, sa pral vle di ke nou pral bezwen woule pwochen vèsyon an nan pwodiksyon, paske ni SCRAM ni poz poko te touye. Men, gen plis chans, pwoblèm sa a pral rezoud byen vit.

Roadmap Odyssey: ki lòt bagay nou vle soti nan yon pooler koneksyon. Andrey Borodin (2019)

M ap tann demann pull ou a. Mwen ta renmen tande tou ki pwoblèm ou genyen ak Bouncer. Ann diskite sou yo. Petèt nou ka aplike kèk fonksyon ke ou bezwen.

Sa a se fen pati mwen an, mwen ta renmen koute ou. Mèsi!

Kesyon ou yo

Si mwen mete pwòp non aplikasyon mwen an, èske l ap voye l kòrèkteman, enkli nan gwoup tranzaksyon nan Odyssey?

Odyssey oswa Bouncer?

Nan Odyssey. Nan Bouncer li jete.

Nou pral fè yon seri.

Men, si koneksyon reyèl mwen an sote sou lòt koneksyon, li pral transmèt?

Nou pral fè yon seri tout paramèt ki nan lis la. Mwen pa ka di si application_name nan lis sa a. Mwen panse mwen te wè l 'la. Nou pral mete tout paramèt yo menm. Avèk yon sèl demann, seri a pral fè tout sa ki te enstale pa kliyan an pandan demaraj la.

Mèsi, Andrey, pou rapò a! Bon rapò! Mwen byen kontan ke Odyssey ap devlope pi vit ak pi vit chak minit. Mwen vle kontinye konsa. Nou te deja mande w pou w gen yon koneksyon plizyè sous done pou Odyssey ka konekte ak diferan baz done an menm tan, sa vle di yon esklav mèt, epi otomatikman konekte ak yon nouvo mèt apre failover.

Wi, mwen sanble sonje diskisyon sa a. Koulye a, gen plizyè depo. Men, pa gen okenn chanje ant yo. Sou bò nou an, nou dwe sondaj sèvè a ke li toujou vivan epi konprann ke yon failover te fèt, ki moun ki pral rele pg_recovery. Mwen gen yon fason estanda pou konprann ke nou pa t 'vin jwenn mèt la. Epi nou ta dwe konprann yon jan kanmenm nan erè yo oswa ki sa? Sa vle di, lide a enteresan, li ap diskite. Ekri plis kòmantè. Si ou gen travayè ki konnen C, Lè sa a, sa a se gwo.

Pwoblèm nan dekale atravè kopi se yon enterè tou pou nou, paske nou vle fè adopsyon an nan grap replike pi senp ke posib pou devlopè aplikasyon yo. Men, isit la mwen ta renmen plis kòmantè, sa vle di egzakteman ki jan fè li, ki jan fè li byen.

Kesyon an se tou sou kopi. Li sanble ke ou gen yon mèt ak plizyè kopi. Epi li klè ke yo ale nan kopi a mwens souvan pase nan mèt la pou koneksyon, paske yo ka gen diferans. Ou te di ke diferans nan done yo ka konsa ke li pa pral satisfè biznis ou epi ou pa pral ale la jiskaske li se repwodui. An menm tan an, si ou pa t 'ale la pou yon tan long, ak Lè sa a, te kòmanse ale, Lè sa a, done ki nesesè yo pa pral imedyatman disponib. Sa vle di, si nou toujou ap ale nan mèt la, Lè sa a, kachèt la gen chofe, men nan kopi a kachèt la reta yon ti kras.

Wi se vre. Pcache a p ap gen blòk done ou vle yo, kachèt reyèl la p ap gen enfòmasyon sou tab ou vle yo, plan yo p ap gen requêtes analysé, p ap gen anyen ditou.

Epi lè ou gen kèk kalite gwoup, epi ou ajoute yon nouvo kopi la, Lè sa a, pandan li kòmanse, tout bagay se move nan li, sa vle di li ogmante kachèt li yo.

Mwen te gen lide a. Apwòch ki kòrèk la ta dwe kouri yon ti pousantaj demann sou kopi a an premye, ki ta chofe kachèt la. Apeprè pale, nou gen yon kondisyon ke nou dwe retade dèyè mèt la pa plis pase 10 segonn. Ak kondisyon sa a pa enkli nan yon sèl vag, men san pwoblèm pou kèk kliyan.

Wi, ogmante pwa.

Sa a se yon bon lide. Men, anvan nou bezwen aplike fèmen sa a. Premyèman, nou bezwen fèmen, ak Lè sa a, nou pral reflechi sou ki jan yo vire sou. Sa a se yon gwo karakteristik yo ki ap pèmèt san pwoblèm.

Nginx gen opsyon sa a slowly start nan yon gwoup pou sèvè a. Apre sa, li piti piti ogmante chaj la.

Wi, bon lide, nou pral eseye li lè nou jwenn alantou li.

Sous: www.habr.com

Add nouvo kòmantè