{"id":96515,"date":"2020-10-12T19:43:02","date_gmt":"2020-10-12T17:43:02","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019"},"modified":"2020-10-12T19:43:02","modified_gmt":"2020-10-12T17:43:02","slug":"odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019","title":{"rendered":"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6c445191705a4c96939cd094bc457a53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aastatel r\u00e4\u00e4gib Andrei Borodin, kuidas nad arvestasid PgBounceri skaleerimise kogemust \u00fchenduste puhvertelligeerimise kavandamisel. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Odyssey<\/a><\/noindex>, kuidas nad seda tootmisse t\u00f5id. Lisaks arutame, milliseid funktsioone puhvertelligeerimisel sooviksime n\u00e4ha uutes versioonides: meile on oluline mitte ainult katta oma vajadusi, vaid ka arendada kasutajate kogukonda. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Ooda<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Video:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"OUx40ABHFZY\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/OUx40ABHFZY\/hqdefault.jpg\" alt=\"Vaata videot\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/dd2ea50b72e3d9c4e795aecbf9afdd25.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tere k\u00f5igile! Minu nimi on Andrei. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0a2f1880005bec1f61b72fb23b555adc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Yandexis t\u00f6\u00f6tan avatud l\u00e4htekoodiga andmebaaside arendamisega. Ja t\u00e4na on meil teema \u00fchenduste puhvertelligeerimise kohta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c18e7c937423d2514faa12e820e78e70.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui teate, kuidas nimetada \u00fchenduste puhvertelligeerijat eesti keeles, palun \u00f6elge mulle. Ma tahaksin v\u00e4ga leida head tehnilist terminit, mis peaks saama p\u00fcsivaks tehnilises kirjanduses. <\/p>\n<p><\/p>\n<p>Teema on \u00fcsna keeruline, sest paljuski on andmebaasides \u00fchendus-ettev\u00f5tja sisseehitatud ja sellest ei pea isegi teadma. Muidugi on igas kohas teatud seadeid, kuid Postgreses see nii ei toimi. Ja samal ajal (HighLoad++ 2019) toimub Nikolai Samokhvalovi ettekande esitamine Postgresse p\u00e4ringute seadistamisest. Ja ma saan aru, et siia tulid inimesed, kes on juba p\u00e4ringud ideaalselt seadistanud, ja need on inimesed, kes seisavad silmitsi haruldasemate s\u00fcsteemsete probleemidega, mis on seotud v\u00f5rguga, ressursside kasutamisega. Ja kohati v\u00f5is see olla \u00fcsna keeruline, kuna probleemid ei olnud ilmne.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/89c660dd530575e2938e6bf312b83e95.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Yandexis on Postgres. Yandexi pilves asuvad paljude Yandexi teenused. Ja meil on mitu petabaiti andmeid, mis genereerivad Postgreses mitte v\u00e4hem kui miljon p\u00e4ringut sekundis. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/288bfa37b9dcd60acd22ba48f0ef8a39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja me pakume k\u00f5igile teenustele piisavalt tavalist klastrit \u2013 see on peamine primaarne s\u00f5lme, tavalised kaks koopiat (s\u00fcnkroonne ja as\u00fcnkroonne), varundamine, lugemisp\u00e4ringute skaleerimine koopial. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c249ca55bb387e25a5560324024cc523.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iga klastris\u00f5lm on Postgres, millel on lisaks Postgresale ja s\u00fcsteemimonitorimisele veel \u00fchendus-ettev\u00f5tja. \u00dchendus-ettev\u00f5tjat kasutatakse fence'imiseks ja oma p\u00f5hiotstarbel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0e29be55cc048007db21c80bbb08a9d4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mis on connection pooleri p\u00f5hifunktsioon? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e2fbbd440c2781573cb35deeef358f20.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Postgresis kasutatakse andmebaasi t\u00f6\u00f6ks protsessimudelit. See t\u00e4hendab, et iga \u00fchendus on \u00fcks protsess, \u00fcks Postgresi tagumine pool. Sellest tagumisest poolest on v\u00e4ga palju erinevaid vahem\u00e4lusid, mille loomine erinevatele \u00fchendustele on suhteliselt kulukas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/587498063b1af8fac4a845961c654bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lisaks on Postgresi koodis massiiv, mida nimetatakse procArray. See sisaldab olulisi andmeid v\u00f5rgu\u00fchenduste kohta. Peaaegu k\u00f5ik procArray t\u00f6\u00f6tlemise algoritmid on lineaarsed, nad skaneerivad kogu v\u00f5rgu\u00fchenduste massiivi. See on \u00fcsna kiire ts\u00fckkel, kuid suure arvu sissetulevate v\u00f5rgu\u00fchenduste korral muutub see natuke kallimaks. Ja kui k\u00f5ik muutub pisut kallimaks, v\u00f5ib l\u00f5puks v\u00e4ga paljude v\u00f5rgu\u00fchenduste t\u00f5ttu hind olla \u00e4\u00e4rmiselt k\u00f5rge. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b534a38d0bfae7a65fc4258155a50280.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eksisteerib 3 v\u00f5imalikku l\u00e4henemisviisi:<\/p>\n<p><\/p>\n<ul>\n<li>Rakenduse k\u00fcljelt. <\/li>\n<li>Andmebaasi k\u00fcljelt. <\/li>\n<li>Ja nende vahel, st igasuguste kombinatsioonide n\u00e4ol. <\/li>\n<\/ul>\n<p><\/p>\n<p>Kahjuks on sisseehitatud pooler praegu arenduses. Meie s\u00f5brad PostgreSQL Professional firmas tegelevad selle peamiselt. Kuidas ja millal see valmis saab, on raske ennustada. Tegelikult on arhitektil kaks valikut: see on rakenduse pooler ja proxy pooler. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/702527a09e9fc86dd39b7fd69dcf1fc9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rakenduse pooler on k\u00f5ige lihtsam lahendus. Peaaegu k\u00f5ik kliendijuhid pakuvad teile v\u00f5imalust: tuhanded teie \u00fchendused koodis esitada m\u00f5ne k\u00fcmne \u00fchendusena andmebaasi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7b66b9e20d22f472ca5ac39f6b9e0ba4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00fcsimus on selles, et mingil hetkel soovite oma tagapinda skaala, soovite selle k\u00e4ivitada paljude virtuaalmasinate peal. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f216fd7a8c01c2b07891e2242c48b06a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siis saate aru, et teil on mitmeid saadavusalasid, mitu andmekeskust. Klientide poolel juhtimine toob kaasa suuri numbreid. Suured \u2013 need on umbes 10 000 \u00fchendust. See on piir, kus see v\u00f5ib normaalselt t\u00f6\u00f6tada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e5bc5f284fd8ff568bbe16c3895b7ac6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui r\u00e4\u00e4gime proxy pooleritest, siis on kaks poolerit, mis oskavad palju asju. Nad ei ole ainult poolerid. Nad on poolerid + veel suurep\u00e4rane funktsionaalsus. See on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.pgpool.net\/\">Pgpool<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/crunchy-proxy\">Crunchy-Proxy<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p>Kahjuks ei ole see lisafunktsionaalsus k\u00f5igile vajalik. See viib selleni, et poolerid toetavad ainult seansi kogumist, st \u00fche sisenemise klient, \u00fcks v\u00e4ljumise klient andmebaasi. <\/p>\n<p><\/p>\n<p>Meie vajaduste jaoks sobib see aga halvasti, seega kasutame PgBouncerit, mis rakendab tehingute kogumist, st serveri \u00fchendused vastavad kliendi \u00fchendustele ainult tehingu ajaks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e5fedbe14656d2ac2cde8d1878a950e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja meie koormuse puhul - see on t\u00f5si. <strong>Kuid on mitmeid probleeme<\/strong>.<img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/61fd36cadcd9948d624dafa711777307.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Probleemid algavad, kui soovite seanssi t\u00f5rkeotsinguks, kuna k\u00f5ik sisenemised on kohalikud. K\u00f5ik tulid loopback'ilt ja seansi j\u00e4lgimine muutub keeruliseks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/36108c4956c410a1b1f286a88bc393d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Loomulikult saate kasutada application_name_add_host. See on Bounceri k\u00fclgpoolsest viisist, kuidas lisada IP-aadress application_name'i. Kuid application_name'i seadmine n\u00f5uab lisah\u00fc\u00fcd. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b4cec483aa776f48db7ad3966c3b78e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sellel graafikul, kus kollane joon n\u00e4itab tegelikke p\u00e4ringuid ja sinine n\u00e4itab p\u00e4ringuid, mis andmebaasi sisenevad. See erinevus ongi application_name'i seadmine, mis on vajalik ainult j\u00e4lgimiseks, kuid see ei ole tasuta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c02ea73a6f1a2a4cd6af6c621f321ab4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lisaks ei saa Bounceris \u00fchtegi basseinilimiiti seada, st \u00fchenduste arvu andmebaasiga teatud kasutaja, teatud andmebaasi jaoks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3431a463e04106066e2799aead66f571.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Millele see viib? Teie k\u00e4es on koormatud teenus, mis on kirjutatud C++-s ja kusagil l\u00e4heduses v\u00e4ike teenus Node'is, mis ei tee andmebaasi osas midagi hullu, kuid selle draiver l\u00e4heb hulluks. Ta avab 20 000 \u00fchendust ja k\u00f5ik muu ootab. Teie kood on isegi normaalne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d7fa321714dc017b017945dffcf79bc6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Muidugi, me kirjutasime v\u00e4ikese plaastri Bouncerile, mis lisas selle seadistuse, st piirduse klientide jaoks basseinis. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d58884fc5ac0f90ff8442f126972157a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seda oleks saanud teha ka Postgresi poolel, st piirata andmebaasi rollide \u00fchenduste arvu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8d6ff70db72964ed4eae5eaa47309931.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga siis kaotate v\u00f5imaluse aru saada, miks teil pole serveriga \u00fchendusi. PgBouncer ei edasta \u00fchenduse viga, ta tagastab alati sama teabe. Ja te ei saa aru: \u00e4kki on teie parool muutunud, \u00e4kki lihtsalt andmebaas on maas, ehk on midagi valesti. Kuid diagnostika puudub. Kui seanssi ei saa luua, ei saa te teada, miks see ei \u00f5nnestu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cb3048344a94f2953bf403485d28e69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teatud hetkel vaatate rakenduse graafikuid ja n\u00e4ete, et rakendus ei t\u00f6\u00f6ta.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e67c6680bb9a7f41242af9f9e4920916.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vaadake tippu ja n\u00e4ete, et Bouncer on \u00fchesuunaline. See on p\u00f6\u00f6rdepunkt teenuse elus. Te m\u00f5istate, et olete valmistunud andmebaasi skaleerimiseks poolteise aasta p\u00e4rast, kuid n\u00fc\u00fcd peate skaleerima poolerit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c140c4ba6db19cb9939c1148638fb73.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oleme j\u00f5udnud j\u00e4reldusele, et meil on vaja rohkem PgBouncer'eid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d369f572a66c16a8917e13393324a644.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/542629\/\">https:\/\/lwn.net\/Articles\/542629\/<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Veidi parandasime Bouncerit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/97755489a25ebfe38efd56ff897bd8fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja tegime nii, et mitu Bouncerit saavad t\u00f5usta, kasutades TCP-porti taaskasutamist. Ja operatsioonis\u00fcsteem suunab sisenevad TCP-\u00fchendused nende vahel automaatselt round-robin meetodil.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ac30d3f067de2a8cd66ad2325c3a3b58.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See on klientidele l\u00e4bipainev, st k\u00f5ik n\u00e4eb v\u00e4lja nagu teil oleks \u00fcks Bouncer, kuid teil on idle-\u00fchenduste fragmenteerimine nende k\u00e4itatavate Bouncerite vahel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/53825f075db00b026c12013a610be456.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja mingil hetkel v\u00f5ite m\u00e4rgata, et need 3 Bouncerit kasutavad iga\u00fcks oma protsessorituuma 100% ulatuses. Teil on vaja \u00fcsna palju Bouncerite. Miks? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/66c17883a043e157cd7ceab2c2a4e326.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sest teil on TLS. Teil on kr\u00fcpteeritud \u00fchendus. Ja kui proovida Postgres'i TLS-i ja TLSita, leiate, et loodud \u00fchenduste arv langeb peaaegu kahe j\u00e4rjestusega kui kr\u00fcpteering on sisse l\u00fclitatud, sest TLS handshake tarbib protsessori ressursse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6101121ebe136af16e5eb1a484c65d66.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja v\u00f5ite tipust n\u00e4ha \u00fcsna palju kr\u00fcptograafilisi funktsioone, mis toimivad sissetulevate \u00fchenduste laine ajal. Kuna meie primaarne server v\u00f5ib vahetuda k\u00e4ttesaadavuse tsoonide vahel, siis sissetulevate \u00fchenduste laine on \u00fcsna tavaline olukord. See t\u00e4hendab, et mingil p\u00f5hjusel oli vana primaarne server k\u00e4tte saamatu ja kogu koormus saadeti teise andmekeskusesse. K\u00f5ik nad tulevad \u00fcheaegselt TSL-iga tervitama. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c238ac2f511568590dc275e01c192c00.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja suur hulk TLS k\u00e4epigistust v\u00f5ib mitte enam Bounceriga tervitada, vaid pigem selle kaudu takistada. Aja\u00fclekatkestuse t\u00f5ttu v\u00f5ib sissetulevate \u00fchenduste laine muutuda katkematuks. Kui teil on andmebaasi uuendamine ilma eksponentsiaalse tagasilanguseta, siis nad ei tule j\u00e4rjestikku \u00fchte ja sama koormaga. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f42d0b210174d4d172254603ae6b834a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin on n\u00e4ide 16 PgBouncerist, mis koormavad 16 tuuma 100% ulatuses.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8d048d3774c09e5b6a3fb3c7bff62084.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me oleme j\u00f5udnud kaskaadi PgBouncerisse. See on parim konfiguratsioon, mille me saame saavutada meie koormuse puhul Bounceriga. V\u00e4limised Bouncerid teenivad TCP k\u00e4sitlemiseks, samas kui sisemised Bouncerid teenivad tegeliku \u00fchenduse haldamiseks, et mitte liiga palju fragmenteerida v\u00e4limisi \u00fchendusi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3a4ee4ea46d5fe8479a5a7222ee134da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sellise konfiguratsiooniga on v\u00f5imalik sujuv restart. Saate restardida k\u00f5ik need 18 Bouncerit \u00fckshaaval. Kuid sellise konfiguratsiooni s\u00e4ilitamine on \u00fcsna keeruline. S\u00fcsteemiadministraatorid, DevOps ja inimesed, kes vastutavad selle serveri eest, ei ole sellise skeemi \u00fcle v\u00e4ga r\u00f5\u00f5msad. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5291fe67dbe02036f3ff8e98bdd84d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tundub, et v\u00f5iksime k\u00f5ik meie t\u00e4iustused edastada avatud allikatesse, kuid Bouncer ei saa kuigi head tuge. N\u00e4iteks v\u00f5imalus k\u00e4ivitada mitu PgBouncerit \u00fchel pordil commititi kuu aega tagasi. Ja pull request selle funktsiooni osas oli tehtud juba mitu aastat tagasi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2059d7f49649d136249103db4aa3ec19.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/libpq-cancel.html\">https:\/\/www.postgresql.org\/docs\/current\/libpq-cancel.html<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgbouncer\/pgbouncer\/pull\/79\">https:\/\/github.com\/pgbouncer\/pgbouncer\/pull\/79<\/a><\/noindex><\/p>\n<p><\/p>\n<p>V\u00f5i veel \u00fcks n\u00e4ide. Postgreses saate t\u00fchistada k\u00e4imasoleva p\u00e4ringu, saates salaja teise \u00fchenduse kaudu ilma t\u00e4iendava autentimiseta. Kuid m\u00f5ned kliendid saadavad lihtsalt TCP-reset, st katkestavad v\u00f5rgu\u00fchenduse. Mida siis Bouncer teeb? Ta ei tee midagi. Ta j\u00e4tkab p\u00e4ringu t\u00e4itmist. Kui teil on tulnud tohutul hulgal \u00fchendusi, mis v\u00e4ikeste p\u00e4ringutega andmebaasi \u00fcle koormavad, siis lihtsalt \u00fchenduse katkestamine Bounceriga ei piisa, on vaja l\u00f5petada ka need p\u00e4ringud, mis andmebaasis t\u00f6\u00f6tavad. <\/p>\n<p><\/p>\n<p>See probleem on parandatud, kuid seda ei ole endiselt upstream Bouncerisse mergeeritud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a9695b6d9e640a5543dc73429eb0050b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nii oleme j\u00f5udnud selle j\u00e4relduseni, et meil on vaja oma connection poolerit, mis arendab, patch\u2018ib ja mille kaudu saame kiiresti probleeme lahendada ning mis peab olema loomulikult ka mitme l\u00f5imega. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e755cd9b06a004f0eced1dc12fd3a6fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mitme l\u00f5imega t\u00f6\u00f6 on meie peamine \u00fclesanne. Peame h\u00e4sti toime tulema suurte sissetulevate TLS-\u00fchenduste vooluga. <\/p>\n<p><\/p>\n<p>Selleks pidime arendama eraldi raamatukogu nimega Machinarium, mis on m\u00f5eldud masinaseisundite kirjeldamiseks v\u00f5rgu\u00fchenduse raames j\u00e4rjestikuse koodina. Kui vaatate libpq l\u00e4htekoodi, n\u00e4ete \u00fcsna keerulisi kutsungeid, mis v\u00f5ivad teile tagastada tulemuse ja \u00f6elda: \u201eKutsu mind natuke hiljem. Praegu on mul IO, aga kui IO \u00fcle l\u00e4heb, on mul protsessorile koormus.\u201d Ja see on mitmeastmeline skeem. V\u00f5rgus suhtlemist kirjeldatakse tavaliselt olekumasinaga. Paljude reeglitega, nagu \u201eKui olen varem saanud paketi pealkirja suurusega N, siis n\u00fc\u00fcd ootan N baiti\u201d ja \u201eKui ma saatsin paketi SYNC, ootan n\u00fc\u00fcd tulemuste metaandmete paketti.\u201d See kujuneb \u00fcsna keeruliseks ja intuitiivselt raskeks koodiks, kui lab\u00fcrindist tehakse lineaarne lahtimuutmine. Me tegime nii, et arendaja kirjeldab peamist suhtlemisteed tavalise imperatiivse koodina, mitte olekumasina kaudu. Lihtsalt selle imperatiivse koodi sees tuleb sisestada kohad, kus t\u00e4itmise j\u00e4rjekord tuleks katkestada ootamise t\u00f5ttu v\u00f5rku andmete saamiseks, edastades t\u00e4itmise konteksti teisele korutuunile (rohelisele l\u00f5imele). See l\u00e4henemine sarnaneb sellele, et me kirjutame lab\u00fcrindis k\u00f5ige oodatuma tee j\u00e4rjestikku \u00fcles ja seej\u00e4rel lisame sellele harud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a6bfb4b11961c7db3a7c7184674e3bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kokkuv\u00f5tteks on meil \u00fcks voog, mis teeb TCP accept'i ja ringk\u00e4iguga edastab mitu t\u00f6\u00f6tajat TPC-\u00fchendusele. <\/p>\n<p><\/p>\n<p>Samuti t\u00f6\u00f6tab iga kliendi \u00fchendus alati \u00fchel protsessoril. See muudab selle cache-friendly. <\/p>\n<p><\/p>\n<p>Lisaks oleme natuke t\u00e4iendanud v\u00e4ikeste pakettide kogumist suureks paketiks, et leevendada s\u00fcsteemi TCP-stack\u2019i koormust.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7d740c23baecdd2f993c83cd54a0a8e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oleme ka parandanud tehingute puulimist, nii et Odyssey, kui seade on aktiveeritud, v\u00f5ib saata CANCEL ja ROLLBACK, kui v\u00f5rgu\u00fchendus katkeb, st kui keegi ei oota p\u00e4ringut, \u00fctleb Odyssey andmebaasile, et see ei pingutaks selle p\u00e4ringu t\u00e4itmisega, mis v\u00f5ib kasutada v\u00e4\u00e4rtuslikke ressursse.<\/p>\n<p><\/p>\n<p>Ja v\u00f5imalusel s\u00e4ilitame \u00fchendused sama kliendiga. See v\u00f5imaldab mitte uuesti seadistada application_name_add_host'i. Kui see on v\u00f5imalik, siis ei ole meil lisaseadistuste vajadust, mis on vajalikud diagnostikaks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb2fb7fb16d65c9ea73a8978d1eb83c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me t\u00f6\u00f6tame Yandex.Cloudi huvides. Kui te kasutate managed PostgreSQL ja teil on seadistatud connection pooler, saate luua loogilise replikatsiooni v\u00e4ljapoole, ehk siis lahkuda meist, kui soovite, loogilise replikatsiooni abil. Bouncer ei v\u00e4ljastada loogilise replikatsiooni voogu v\u00e4ljapoole. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c53defc92ebd8f3bec57ce64d97b9f72.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See on n\u00e4ide loogilise replikatsiooni seadistamisest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a37d9d1abf288d17fa646b642e8b62ab.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lisaks on meil f\u00fc\u00fcsilise replikatsiooni tugi v\u00e4ljapoole. Pilves on see loomulikult v\u00f5imatu, kuna see t\u00e4hendaks, et teie klaster annaks endast liiga palju teavet. Kuid teie installatsioonides, kui vajate f\u00fc\u00fcsilist replikatsiooni l\u00e4bi connection pooleri Odyssey's, on see v\u00f5imalik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/572934ce5b08115e57ab4b55d2153c6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odyssey's on t\u00e4ielikult \u00fchilduv j\u00e4lgimine PgBounceriga. Meil on sama konsool, mis t\u00e4idab peaaegu k\u00f5iki samu k\u00e4ske. Kui midagi j\u00e4\u00e4b puudu, saatke pull request v\u00f5i v\u00e4hemalt issue GitHubis, et saaksime vajalikke k\u00e4ske t\u00e4iendada. Kuid PgBounceri konsooli p\u00f5hifunktsioonid on meil juba olemas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/451dd798fb3523a7a174ebfe00a14bc5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja muidugi on meil ka vigade edastamine. Tagastame selle vea, mille andis andmebaas. Saate teavet, miks te ei p\u00e4\u00e4se andmebaasi, mitte lihtsalt, et te sinna ei p\u00e4\u00e4se. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/14b4cb0efa33a2658dfc528349a5382f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See v\u00f5imalus l\u00fclitatakse v\u00e4lja, kui teil on vaja 100%-list \u00fchilduvust PgBounceriga. Me saame k\u00e4ituda nagu Bouncer, lihtsalt ettevaatusabin\u00f5uks. <\/p>\n<p><\/p>\n<p><strong>Arendus<\/strong><\/p>\n<p><\/p>\n<p>M\u00f5ned s\u00f5nad Odyssey allika kohta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6055d5ec9676c331a83592916a6a292f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\/pull\/66\">https:\/\/github.com\/yandex\/odyssey\/pull\/66<\/a><\/noindex><\/p>\n<p><\/p>\n<p>N\u00e4iteks on olemas k\u00e4sud \u201ePause \/ Resume\u201c. Neid kasutatakse tavaliselt andmebaasi v\u00e4rskendamiseks. Kui soovite Postgresit uuendada, saate selle connection pooleris pausile panna, teostada pg_upgrade, seej\u00e4rel j\u00e4tkata. Klientide poolelt n\u00e4eb see v\u00e4lja nagu andmebaas lihtsalt peatuks. Selle funktsionaalsuse t\u00f5id meieni kogukonna liikmed. See ei ole veel liidetud, kuid varsti on k\u00f5ik korras. (Juba on liidetud)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d2f7c57e0ae3e466ec2a701bbdb8eb3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\/pull\/73\">https:\/\/github.com\/yandex\/odyssey\/pull\/73<\/a><\/noindex> \u2014 juba on liidetud<\/p>\n<p><\/p>\n<p>Lisaks, \u00fcks uus funktsioon PgBounceris on SCRAM autentimise tugi, mille t\u00f5i meieni inimene, kes ei t\u00f6\u00f6ta Yandex.Cloudis. M\u00f5lemad on keerulised funktsionaalsused ja olulised. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f39346a543c88d17728233d05c2dff19.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seet\u00f5ttu tahan r\u00e4\u00e4kida, millest Odyssey koosneb, \u00e4kki soovite ka natuke koodi kirjutada. <\/p>\n<p><\/p>\n<p>Teie k\u00e4sutuses on algne Odyssey baaskood, mis toetub kahe p\u00f5hiraamatukogu. Kiwi raamatukogu on Postgresi s\u00f5numiprotokolli rakendus. See t\u00e4hendab, et Postgresi natiivne proto 3 on standardsed s\u00f5numid, millega front-end ja back-end saavad vahetada. Need on rakendatud Kiwi raamatukogus.<\/p>\n<p><\/p>\n<p>Machinarium raamatukogu on voogude rakendamise raamatukogu. V\u00e4ike fragment sellest Machinariumist on kirjutatud assembleris. Kuid \u00e4rge kartke, seal on vaid 15 rida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cd18f250af50eabd53536b2c0d7f12b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odyssey arhitektuur. On olemas peamine masin, kus t\u00f6\u00f6tavad coroutines. Selles masinas teostatakse sissetulevate TCP-\u00fchenduste vastuv\u00f5tmine ja jaotamine t\u00f6\u00f6tajatele. <\/p>\n<p><\/p>\n<p>\u00dches t\u00f6\u00f6tajas v\u00f5ib t\u00f6\u00f6tada mitme kliendi t\u00f6\u00f6tlija. Samuti peamisest l\u00f5ngast t\u00f6\u00f6tavad konsool ja crone-\u00fclesannete t\u00e4itmine, mis eemaldavad \u00fchendused, mida enam ei vajata poolis.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7072fb20f406f2ee5788542860ccdf50.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odyssey testimiseks kasutatakse Postgresi standardset testikomplekti. Lihtsalt k\u00e4ivitame install-check'i Bounceri ja Odyssey kaudu, saame nulldiv'i. Seal on m\u00f5ned testid, mis on seotud kuup\u00e4evade vormindamisega, ei arvestata absoluutselt samamoodi Bounceris ja Odyssey's.<\/p>\n<p><\/p>\n<p>Lisaks on palju draivereid, millel on oma testimine. Kasutame nende teste Odyssey testimiseks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fb01cc9a0e9724ddcd3cc3d088afb182.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samuti peame meie kaskaadsete konfiguratsioonide t\u00f5ttu katsetama erinevaid kombinatsioone: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey, et olla kindel, et kui Odyssey on m\u00f5nes kaskaadi osas, t\u00f6\u00f6tab see endiselt nagu me ootame. <\/p>\n<p><\/p>\n<p><strong>Raud<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/25855b691180bca083025b9e8b611c09.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kasutame Odyssey't tootmises. Ei oleks \u00f5iglane \u00f6elda, et k\u00f5ik lihtsalt t\u00f6\u00f6tab. Jah, kuid mitte alati. N\u00e4iteks tootmises t\u00f6\u00f6tas k\u00f5ik lihtsalt, kuni meie s\u00f5brad PostgreSQL Professional'ist \u00fctlesid, et meil on m\u00e4luleke. Need olid t\u00f5epoolest olemas, me parandasime need. Kuid see oli lihtsalt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e638d88397b32b1ca0b74c9c1b905f81.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siis avastasime, et connection pooleris on sissetulevad TLS-\u00fchendused ja v\u00e4ljaminevad TLS-\u00fchendused. Ja \u00fchendustes on vajalikud kliendi ja serveri sertifikaadid.<\/p>\n<p><\/p>\n<p>Bouncer ja Odyssey serveri sertifikaadid loevad neid pcache'ist, kuid kliendi sertifikaate pcache'ist lugema ei pea, kuna meie skaleeritav Odyssey p\u00f5rkab l\u00f5puks vastu selle sertifikaadi s\u00fcsteemset lugemisv\u00f5imet. See oli meile \u00fcllatus, kuna ta ei p\u00f5rganud kohe. Alguses kasvas see lineaarselt, kuid p\u00e4rast 20 000 sissetulevat samal ajal \u00fchendust ilmus see probleem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6cff094cd59a990e448b82fa0b1572b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pluggable Authentication Method on v\u00f5imalus autentida end sisseehituslike Linuxi vahenditega. PgBounceris on see niimoodi teostatud, et on eraldi teema PAM'i vastuse ootamiseks ja on peamine PgBounceri teema, mis teenindab praegust \u00fchendust ja saab paluda neil PAM'i teemas elada. <\/p>\n<p><\/p>\n<p>Me ei hakkanud seda teostama \u00fche lihtsa p\u00f5hjuse t\u00f5ttu. Meil on ju palju teemasid. Miks me seda vajame?<\/p>\n<p><\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes v\u00f5ib see tekitada probleeme, kuna kui teil on PAM-autentimine ja mitte-PAM-autentimine, v\u00f5ib suur PAM-autentimise voog oluliselt viivitada mitte-PAM-autentimist. See on \u00fcks neist asjadest, mida me ei parandanud. Kuid kui soovite seda parandada, v\u00f5ite sellega tegeleda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c7bd9e9980ff7298b30a59c130f03dbb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Veel on olnud probleeme seoses \u00fche vooga, mis aktsepteerib k\u00f5iki sisenemis\u00fchendusi. Seej\u00e4rel edastatakse need t\u00f6\u00f6tlejate r\u00fchmale, kus toimub TLS k\u00e4epigistus.<\/p>\n<p><\/p>\n<p>Seet\u00f5ttu, kui teil on koherentne laine 20 000 v\u00f5rgu\u00fchendust, siis need k\u00f5ik aktsepteeritakse. Klientide poolel hakkab libpq loendama aegumisi. Oletan, et vaikimisi on seal 3 sekundit. <\/p>\n<p><\/p>\n<p>Kui nad ei saa k\u00f5ik korraga andmebaasi siseneda, siis nad ei p\u00e4\u00e4se andmebaasi, kuna seda k\u00f5ike ei saa katmata j\u00e4tta mitteeksponentsiaalse katsetamise t\u00f5ttu. <\/p>\n<p><\/p>\n<p>Oleme j\u00f5udnud j\u00e4reldusele, et oleme siin \u00f5ppinud PgBounceri skeemi, rakendades TCP-\u00fchenduste aktsepteerimise arvule piiramist. <\/p>\n<p><\/p>\n<p>Kui me m\u00e4rkame, et aktsepteerime \u00fchendusi, aga nad ei suuda l\u00f5puks \u00fchenduda, siis paneme nad j\u00e4rjekorda, et nad ei raiskaks keskprotsessori ressursse. See t\u00e4hendab, et samal ajal ei pruugi k\u00f5ik \u00fchendused k\u00e4epigistust saada. Kuid v\u00e4hemalt keegi p\u00e4\u00e4seb andmebaasi, isegi kui koormus on piisavalt suur.<\/p>\n<p><\/p>\n<p><strong>Roadmap<\/strong><\/p>\n<p><\/p>\n<p>Mida sooviksime tulevikus Odyssey's n\u00e4ha? Mida me oleme valmis ise arendama ja mida ootame kogukonnalt?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4719437d80b33efc3da6572af9a4dedb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>August 2019.<\/strong><\/p>\n<p><\/p>\n<p>Nii n\u00e4gid v\u00e4lja Odyssey teekaardid augustis:<\/p>\n<p><\/p>\n<ul>\n<li>Soovisime SCRAM ja PAM autentimist.<\/li>\n<li>Soovisime suunata lugemis \u0437\u0430\u043f\u0440\u043e\u0441id standby peale. <\/li>\n<li>Sooviksime online-taask\u00e4ivitust. <\/li>\n<li>Ja v\u00f5imalust teha serveris paus. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/455c92f92df826257c2c57dc2b034e22.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pool sellest teekaardist on t\u00e4idetud, millest ei vastuta meie. Ja see on hea. Niisiis, arutame, mis on j\u00e4\u00e4nud ja lisame veel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4a1daafbfe8d65ba0dd3e1ebdae8dd94.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\/issues\/12\">Mis puutub lugemis \u0437\u0430\u043f\u0440\u043e\u0441ide suunamisse standby peale<\/a><\/noindex>? \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u0440\u0435\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445. \u041e\u043d\u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f failover \u0438 switchover. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0445 \u0437\u0430\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b, \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043d\u0430\u0447\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0873cffd4f1ae15d9ffa6d080671051b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00f5him\u00f5tteliselt on Postgresis alates k\u00fcmnendast versioonist v\u00f5imalik \u00fchenduse loomisel m\u00e4\u00e4rata ka session_attrs. V\u00f5ite \u00fchenduses loetleda k\u00f5ik andmebaasi hostid ja \u00f6elda, miks te andmebaasi l\u00e4henete: kirjutamiseks v\u00f5i ainult lugemiseks. Ja draiver valib ise esimesena loetletud hosti, mis talle rohkem meeldib ja mis t\u00e4idab session_attrs n\u00f5udeid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0693d1327fe5826502a01c21d05d5b4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga selle l\u00e4henemise probleem on see, et see ei kontrolli replikatsiooni viivitust. Teil v\u00f5ib olla mingi replikatsioon, mis on viibinud teie teenuse jaoks vastuv\u00f5etamatult kaua. Selleks, et t\u00e4ita t\u00e4ielikult lugemis \u0437\u0430\u043f\u0440\u043e\u0441ide t\u00f6\u00f6tlemist replikas, peame p\u00f5him\u00f5tteliselt Odyssey's v\u00f5imaldama mitte t\u00f6\u00f6tada, kui lugemine ei ole v\u00f5imalik. <\/p>\n<p><\/p>\n<p>Odyssey peab aeg-ajalt andmebaasi minema ja k\u00fcsima replikatsiooni kaugust primaarse andmebaasist. Ja kui see on saavutanud kriitilise taseme, ei tohi uusi p\u00e4ringuid andmebaasi lubada, vaid tuleb \u00f6elda kliendile, et \u00fchendused tuleb uuesti algatada ja v\u00f5ib-olla valida teine host p\u00e4ringute t\u00e4itmiseks. See v\u00f5imaldab andmebaasil kiiremini taastada replikatsiooni viivituse ja taas vastata p\u00e4ringutele. <\/p>\n<p><\/p>\n<p>Raskusi ajakavade m\u00e4\u00e4ramisel, kuna see on avatud l\u00e4htekoodiga. Kuid loodan, et mitte 2,5 aastat nagu kolleegidel PgBounceris. Selle funktsiooni sooviksin n\u00e4ha Odyssey's. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ec3cd2ff7b2298927cccfe8e0ba890a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\/issues\/16\">Kogukonnas on inimesed k\u00fcsinud prepared statement'i toe kohta.<\/a><\/noindex>Praegu saate luua prepared statement'e kahe meetodi kaudu. Esiteks, saate t\u00e4ita SQL-k\u00e4sku, nimelt \"prepared\". Selle SQL-k\u00e4sku m\u00f5istmiseks peame \u00f5ppima SQL-i m\u00f5istma Bounceri poolelt. See oleks liialdus, kuna me vajame t\u00e4is parserit. Me ei saa p\u00e4rida iga SQL-k\u00e4sku. <\/p>\n<p><\/p>\n<p>Kuid protokolli s\u00f5numite tasandil on olemas ettevalmistatud p\u00e4ring. See on koht, kus teave selle kohta, et luuakse ettevalmistatud p\u00e4ring, tuleb struktureeritud vormis. Me v\u00f5iksime toetada arusaamist, et mingis serveri\u00fchenduses palus klient luua ettevalmistatud p\u00e4ringud. Ja isegi juhul, kui tehing on suletud, peame endiselt hoidma serveri ja kliendi vahelist sidusust. <\/p>\n<p><\/p>\n<p>Kuid siin tekib dialoogis lahknevus, sest keegi r\u00e4\u00e4gib sellest, et on vaja m\u00f5ista, milliseid ettevalmistatud p\u00e4ringuid klient on loonud ja jagada serveri\u00fchendust k\u00f5igi klientide vahel, kes on selle serveri\u00fchenduse loonud, st kes on loonud sellise ettevalmistatud p\u00e4ringu. <\/p>\n<p><\/p>\n<p>Andres Freund \u00fctles, et kui teie juurde tuleb klient, kes on juba loonud teises serveri\u00fchenduses sellise ettevalmistatud p\u00e4ringu, siis looge see tema jaoks. Kuid tundub, et see on veidi vale sooritada p\u00e4ringud andmebaasis kliendi eest, kuid arendaja, kes kirjutab andmebaasiga suhtlemise protokolli, jaoks oleks mugav, kui talle lihtsalt antakse v\u00f5rgu\u00fchendus, kus see ettevalmistatud p\u00e4ring on olemas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cd56b3ad015195d86a64e52be365b16a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja veel \u00fcks funktsioon, mida peame ellu viima. Meil on praegu PgBounceriga \u00fchilduv j\u00e4lgimise s\u00fcsteem. Saame tagastada keskmise p\u00e4ringu t\u00e4itmise aja. Kuid keskmine aeg on nagu keskmine temperatuur haiglas: keegi on k\u00fclm, keegi soe \u2013 keskmiselt on k\u00f5ik terved. See on vale. <\/p>\n<p><\/p>\n<p>Me peame rakendama toetust protsentidele, mis n\u00e4itavad, et on olemas aeglased p\u00e4ringud, mis tarbivad ressursse, ning teevad j\u00e4lgimise vastuv\u00f5etavamaks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6f285f3eb0d79e7f25d42f0e792b85b1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00f5ige t\u00e4htsam on, et soovime versiooni 1.0 (versioon 1.1 on juba v\u00e4lja antud). Probleem on selles, et Odyssey on hetkel versioonis 1.0rc, see t\u00e4hendab v\u00e4ljaandmise kandidaat. K\u00f5ik probleemid, mida ma loetlesin, on parandatud just selle versiooniga, v\u00e4lja arvatud m\u00e4luleke. <\/p>\n<p><\/p>\n<p>Mida t\u00e4hendab meile versioon 1.0? Me viime Odyssey oma andmebaasidesse. See t\u00f6\u00f6tab juba praegu meie andmebaasides, kuid kui see saavutab 1 000 000 p\u00e4ringut sekundis, siis v\u00f5ime \u00f6elda, et see on v\u00e4ljaandmise versioon ning seda saab nimetada 1.0-ks. <\/p>\n<p><\/p>\n<p>Kogukonnas on mitmed inimesed palunud, et versioonis 1.0 oleksid ka paus ja SCRAM. Kuid see t\u00e4hendaks, et peame j\u00e4rgmise versiooni tootmisse viima, sest ei SCRAM ega paus pole siiani \u00fchendatud. T\u00f5en\u00e4oliselt lahendatakse see k\u00fcsimus piisavalt kiiresti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel tahame \u00fchenduste p\u00e4\u00e4stikust. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2f50de9f51f653a7396965239bd545e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ootan teie pull request'e. Samuti tahaksin kuulda, millised probleemid teil Bounceriga on. Arutame neid. V\u00f5ib-olla suudame rakendada m\u00f5ningaid funktsioone, mis teile vajalikud on. <\/p>\n<p><\/p>\n<p>Sellega minu osa l\u00f5ppeb, tahan teid kuulata. Ait\u00e4h!<\/p>\n<p><\/p>\n<p>K\u00fcsimused<\/p>\n<p><\/p>\n<p><em>Kui ma oma application_name'i panen, kas see liikub \u00f5igesti edasi, sealhulgas transaction pooling'is Odyssey's?<\/em><\/p>\n<p><\/p>\n<p>Odyssey's v\u00f5i Bouncer'is?<\/p>\n<p><\/p>\n<p><em>Odyssey's. Bouncer'is liigub see edasi.<\/em> <\/p>\n<p><\/p>\n<p>Me teeme set'i. <\/p>\n<p><\/p>\n<p><em>Ja kui mu tegelik \u00fchendus h\u00fcppab teiste \u00fchenduste vahel, kas see liigub edasi?<\/em><\/p>\n<p><\/p>\n<p>Teeme set'i k\u00f5ikide parameetritega, mis on loendis. Ma ei saa \u00f6elda, kas selles loendis on application_name. Tundub, et olen seda seal n\u00e4inud. SeSetting k\u00f5ik need samad parameetrid. \u00dche p\u00e4ringuga teeb see k\u00f5ik, mis klient oli seadistanud k\u00e4ivitamisel. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h, Andrei, et esitlus oli! Hea esitlus! Mul on hea meel, et Odyssey areneb iga minutiga \u00fcha kiiremini. Soovin teile j\u00e4tkuvat edu. Oleme juba teie poole p\u00f6\u00f6rdunud palvega, et meil oleks multi data-source \u00fchendus, et Odyssey saaks korraga \u00fchendada erinevate andmebaasidega, st master-slave ja siis automaatselt p\u00e4rast failoverit \u00fchendada uue meistriga.<\/em> <\/p>\n<p><\/p>\n<p>Jah, ma arvan, et m\u00e4letan seda arutelu. Praegu on mitmeid salvestusruume. Kuid nende vahel ei ole vahetamist. Me peame oma poolel k\u00fcsima serverilt, kas see on ikka elus ja m\u00f5istma, et failover on juhtunud, kes kutsub esile pg_recovery. Mul on standardne viis, et m\u00f5ista, et me ei ole meistris. Ja me peame kuidagi vigadest aru saama, eks? St idee on huvitav, seda arutatakse. Kirjutage rohkem kommentaare. Kui teil on \u00f5igerahvast, kes tunnevad C-d, siis on see t\u00f5eliselt suurep\u00e4rane. <\/p>\n<p><\/p>\n<p>Meid huvitab ka replikatsiooniga seotud skaleerimine, sest me tahame teha replikatsiooniklastrite adopteerimise arendajatele v\u00f5imalikult lihtsaks. Aga siinkohal sooviksime rohkem kommentaare, st kuidas t\u00e4pselt teha ja kuidas h\u00e4sti teha. <\/p>\n<p><\/p>\n<p><em>K\u00fcsimus puudutab ka replikaate. Tundub, et teil on \u00fcks p\u00f5hi ja mitu replikat. On selge, et replikad saavad v\u00e4hem \u00fchendusi kui p\u00f5hi, kuna andmed v\u00f5ivad erineda. Te mainisite, et andmete erinevused v\u00f5ivad olla sellised, et need ei rahulda teie \u00e4ri vajadusi ja te ei kasuta neid enne, kui need on t\u00e4ielikult replikeeritud. Kui teil on olnud pikem periood, mil te ei kasutanud replikat, ja siis hakkate taas kasutama, siis ei pruugi vajalikud andmed kohe kergesti k\u00e4tte saada. Ehk siis, kui me pidevalt kasutame p\u00f5hi, on seal vahem\u00e4lu soojendatud, samas kui replikas on vahem\u00e4lu veidi aeglasem.<\/em> <\/p>\n<p><\/p>\n<p>Jah, see on t\u00f5si. pcache'is ei ole andmeplokke, mida te soovite, real cache'is ei ole teavet tabelite kohta, mida te soovite, plaanides ei ole anal\u00fc\u00fcsitud p\u00e4ringuid, \u00fcldse mitte midagi ei ole. <\/p>\n<p><\/p>\n<p><em>Ja kui teil on m\u00f5ni klaster ja lisate sinna uue repliika, siis kuni see k\u00e4ivitub, on seal k\u00f5ik halb, st see suurendab oma vahem\u00e4lu.<\/em> <\/p>\n<p><\/p>\n<p>Ma sain m\u00f5tte k\u00e4tte. \u00d5ige l\u00e4henemine oleks k\u00e4ivitada alguses v\u00e4ike protsent p\u00e4ringutest replikale, et soojendada vahem\u00e4lu. T\u00f5eliselt \u00f6eldes, meil on tingimus, et me ei tohi mahaj\u00e4\u00e4da rohkem kui 10 sekundi v\u00f5rra masterist. Ja seda tingimust tuleks rakendada mitte \u00fche laines, vaid sujuvalt m\u00f5ne kliendi jaoks. <\/p>\n<p><\/p>\n<p><em>Jah, suurendada kaalu.<\/em><\/p>\n<p><\/p>\n<p>See on hea idee. Kuid k\u00f5igepealt tuleb see v\u00e4ljal\u00fclitamine ellu viia. Alguses tuleb v\u00e4lja l\u00fclituda ja siis m\u00f5tleme, kuidas sisse l\u00fclituda. See on suurep\u00e4rane funktsioon, et sujuvalt sisse l\u00fclituda.<\/p>\n<p><\/p>\n<p><em>Nginx'is on selline valik. <code>sujuvalt alustada<\/code> serveri klastris. Ja see suurendab j\u00e4rk-j\u00e4rgult koormust.<\/em> <\/p>\n<p><\/p>\n<p>Jah, suurep\u00e4rane idee, proovime, kui me selleni j\u00f5uame.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/522734\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0447\u043b\u0438 \u043e\u043f\u044b\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PgBouncer \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 Odyssey, \u043a\u0430\u043a \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 production. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u041e\u0434\u0438\u0441\u0441\u0435\u044f. \u0412\u0438\u0434\u0435\u043e: \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96516,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0447\u043b\u0438 \u043e\u043f\u044b\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PgBouncer \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 Odyssey, \u043a\u0430\u043a \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 production. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u041e\u0434\u0438\u0441\u0441\u0435\u044f. \u0412\u0438\u0434\u0435\u043e: \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Odyssey roadmap: \u0447\u0442\u043e \u0435\u0449\u0451 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d (2019) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0447\u043b\u0438 \u043e\u043f\u044b\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PgBouncer \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 Odyssey, \u043a\u0430\u043a \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 production. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u041e\u0434\u0438\u0441\u0441\u0435\u044f. \u0412\u0438\u0434\u0435\u043e: \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-12T17:43:02+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-12T17:43:02+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Odyssey tegevuskava: mida me veel \u00fchenduste vahetajalt soovime. Andrei Borodin (2019) | ProHoster","description":"Ettekanne Andrei Borodin r\u00e4\u00e4gib, kuidas nad arvestasid PgBouncer'i skaleerimise kogemust \u00fchenduste vahetaja Odyssey projekteerimisel, kuidas nad selle production'isse viisid. Lisaks arutame, milliseid funktsioone vahetajal v\u00f5iks tulevikus n\u00e4ha: meile on oluline mitte ainult oma vajadusi rahuldada, vaid ka arendada Odyssey kasutajate kogukonda. Video: Tere k\u00f5igile! Minu nimi on Andrei. Yandex'is tegelen ma","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Odyssey roadmap: \u0447\u0442\u043e \u0435\u0449\u0451 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d (2019) | ProHoster","og:description":"\u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0447\u043b\u0438 \u043e\u043f\u044b\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PgBouncer \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 Odyssey, \u043a\u0430\u043a \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 production. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u041e\u0434\u0438\u0441\u0441\u0435\u044f. \u0412\u0438\u0434\u0435\u043e: \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-12T17:43:02+00:00","article:modified_time":"2020-10-12T17:43:02+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96515","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:41:30","updated":"2022-10-01 00:02:14"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/96515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=96515"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/96515\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/96516"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=96515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=96515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=96515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}