{"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 soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6c445191705a4c96939cd094bc457a53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aruandes r\u00e4\u00e4gib Andrei Borodin, kuidas nad arvestasid PgBounceri skaleerimise kogemust \u00fchenduste p\u00fc\u00fcdja projekteerimisel. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Odysseia<\/a><\/noindex>, kuidas seda tootmisse viidi. Samuti arutame, milliseid funktsioone p\u00fc\u00fcdjas tahaksime n\u00e4ha uutestes versioonides: meile on oluline mitte ainult oma vajadusi rahuldada, vaid ka arendada kasutajate kogukonda. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Odysseia<\/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=\"M\u00e4ngi 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 soovime \u00fchenduste \u00fchestusest. 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 soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0a2f1880005bec1f61b72fb23b555adc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Yandexis tegeleme open source andmebaaside arendamisega. Ja t\u00e4na on meil teema \u00fchenduste p\u00fc\u00fcdja kohta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c18e7c937423d2514faa12e820e78e70.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui tead, kuidas nimetada \u00fchenduste p\u00fc\u00fcdjat eesti keeles, siis \u00fctle mulle. Ma t\u00f5eliselt soovin leida head tehnilist m\u00f5istet, mis peaks tehnilises kirjanduses kehtima. <\/p>\n<p><\/p>\n<p>Teema on \u00fcsna keeruline, kuna paljudes andmebaasides on \u00fchenduste p\u00fc\u00fcdja sisseehitatud ja selle kohta pole isegi vaja teada. Muidugi on igal pool m\u00f5ningaid seadeid, kuid Postgreses ei l\u00e4he see nii lihtsalt. Ja samal ajal (HighLoad++ 2019 korral) toimub Nikolai Samohvalovi ettekande ajal, kus r\u00e4\u00e4gitakse p\u00e4ringute seadistamisest Postgreses. Ja ma saan aru, et siia tulid inimesed, kes on juba p\u00e4ringud ideaalselt seadistanud, ning need on inimesed, kes seisavad silmitsi haruldaste s\u00fcsteemsete probleemidega, mis on seotud v\u00f5rguga, ressursside kasutusega. M\u00f5nel juhul v\u00f5is see olla \u00fcsna keeruline, kuna probleemid ei ole ilmsed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 elavad paljud Yandexi teenused. Ja meil on mitu petabaiti andmeid, mis genereerivad Postgreses v\u00e4hemalt miljon p\u00e4ringut sekundis. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/288bfa37b9dcd60acd22ba48f0ef8a39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja pakume piisavalt t\u00fc\u00fcpilist klastrit k\u00f5ikidele teenustele - see on peamine pear\u00fchma nod, tavalised kaks koopiat (s\u00fcnkroonne ja as\u00fcnkroonne), varundamine, lugemise p\u00e4ringute skaleerimine koopias. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c249ca55bb387e25a5560324024cc523.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iga klastrinode on Postgres, milles on lisaks Postgresile ja s\u00fcsteemsete seires\u00fcsteemide \u00fchenduste p\u00fc\u00fcdja. \u00dchenduste p\u00fc\u00fcdjat kasutatakse fencinguks ja oma p\u00f5hieesm\u00e4rgi jaoks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 \u00fchenduste p\u00fc\u00fcdja p\u00f5hieesm\u00e4rk? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e2fbbd440c2781573cb35deeef358f20.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Postgreses on andmebaasi t\u00f6\u00f6tlemisel kasutusele v\u00f5etud protsesside mudel. See t\u00e4hendab, et iga \u00fchendus on \u00fcks protsess, \u00fcks Postgresi taust. Ja selles taustas on erinevaid vahem\u00e4lu variante, mille loomine erinevatele \u00fchendustele on \u00fcsna kulukas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 Postgres'i koodis massiiv, mis nimetatakse procArray'iks. See sisaldab p\u00f5hiandmeid v\u00f5rgu\u00fchenduste kohta. Peaaegu k\u00f5ik procArray'i t\u00f6\u00f6tlemise algoritmid on liniarset keerukust, need l\u00e4bivad kogu v\u00f5rgu\u00fchenduste massiivi. See on \u00fcsna kiire ts\u00fckkel, kuid suure arvu sissetulevate v\u00f5rgu\u00fchenduste korral muutub see veidi kallimaks. Ja kui k\u00f5ik muutub veidi kallimaks, v\u00f5ite l\u00f5puks maksta v\u00e4ga suure hinna suurte v\u00f5rgu\u00fchenduste eest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b534a38d0bfae7a65fc4258155a50280.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On 3 v\u00f5imalikku l\u00e4henemist:<\/p>\n<p><\/p>\n<ul>\n<li>Rakenduse poolel. <\/li>\n<li>Andmebaasi poolel. <\/li>\n<li>Ja nende vahel, st k\u00f5ikv\u00f5imalikud kombinatsioonid. <\/li>\n<\/ul>\n<p><\/p>\n<p>Kahjuks on sisseehitatud pooler praegu arendamisel. S\u00f5brad PostgreSQL Professional firmas tegelevad peamiselt sellega. Kui see ilmub, on raske ennustada. Tegelikult on arhitektivalikul meil kaks lahendust. See on rakendusepoolne pool ja proxy pool. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/702527a09e9fc86dd39b7fd69dcf1fc9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rakendusepoolne pool on k\u00f5ige lihtsam viis. Ja peaaegu k\u00f5ik kliendijuhid pakuvad teile v\u00f5imalust: miljoneid teie \u00fchendusi koodis esitada m\u00f5ne tosinana andmebaasi \u00fchendusest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7b66b9e20d22f472ca5ac39f6b9e0ba4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tekib probleem, et teatud hetkel soovite skaleerida tagapinda, soovite seda paigutada mitmesse virtuaalsesse masinasse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f216fd7a8c01c2b07891e2242c48b06a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siis m\u00f5istate ka, et teil on veel mitu k\u00e4ttesaadavuse tsooni, mitu andmekeskust. Ja kliendipoolimise l\u00e4henemine toob kaasa suured numbrid. Suured on umbes 10 000 \u00fchendust. See on piir, milles see v\u00f5ib normaalselt t\u00f6\u00f6tada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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\u00e4kida proxy pooler'itest, siis on kaks pooler'it, mis oskavad palju asju. Nad ei ole mitte ainult pooler'id. Need on pooler'id + veel suurep\u00e4rane funktsionaalsus. Need 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>Aga kahjuks ei ole see lisafunktsionaalsus k\u00f5igile vajalik. Ja see toob kaasa selle, et pooler'id toetavad ainult sessioonide poolimist, st \u00fcks sissetulev klient, \u00fcks v\u00e4ljaminev klient andmebaasi. <\/p>\n<p><\/p>\n<p>Meie vajaduste jaoks see ei sobi eriti h\u00e4sti, seet\u00f5ttu kasutame PgBouncer'it, mis rakendab tehingute poolimist, st serveri \u00fchendused vastanduvad kliendi \u00fchendustele ainult tehingu ajaks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 korral \u2013 see on t\u00f5si. <strong>Aga paar probleemi on olemas.<\/strong>.<img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 siis, kui soovite diagnoosida seanssi, kuna k\u00f5ik sissetulevad \u00fchendused on kohalikud. K\u00f5ik tulid loopback'ilt ja seanssi j\u00e4lgida muutub keeruliseks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/36108c4956c410a1b1f286a88bc393d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Muidugi saate kasutada application_name_add_host. See on viis, kuidas Bounceris IP-aadress lisada application_name'ile. Kuid application_name seotakse t\u00e4iendava \u00fchenduse kaudu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 t\u00e4histab reaalseid p\u00e4ringuid ja sinine joon p\u00e4ringuid, mis sisenevad andmebaasi. Ja see erinevus ongi application_name'i seadistus, mis on vajalik ainult j\u00e4lgimiseks, kuid see pole absoluutselt tasuta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 pooli piirata, st andmebaasiga kindla kasutaja jaoks \u00fchenduste arvu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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? Teil on koormatud teenus, mis on kirjutatud C++-s ja kuskil l\u00e4heduses v\u00e4ike teenus Node.js-is, mis ei tee andmebaasil midagi hullu, kuid tema draiver l\u00e4heb hulluks. Ta avab 20 000 \u00fchendust ja k\u00f5ik muu peab ootama. Teie kood on isegi normaalne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d7fa321714dc017b017945dffcf79bc6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me kirjutame kindlasti v\u00e4ikese plaastri Bouncerile, mis lisab selle seadistuse, st klientide piiramise poolile. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 Postgresis, st andmebaasi rollide piiramine \u00fchenduste arvuga.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 m\u00f5ista, miks teil ei ole \u00fchendusi serveriga. PgBouncer ei edasta \u00fchenduse viga, ta tagastab alati sama teabe. Ja te ei saa aru: v\u00f5ib-olla on teie parool muutunud, v\u00f5ib-olla on andmebaas lihtsalt kukkunud, v\u00f5ib-olla on midagi valesti. Kuid diagnostika puudub. Kui seanssi ei saa luua, ei saa te teada, miks seda ei saa teha. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cb3048344a94f2953bf403485d28e69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dchel 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 soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e67c6680bb9a7f41242af9f9e4920916.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vaadake \u00fclemist ja n\u00e4ete, et Bouncer on \u00fchesuunaline. See on murranguline hetk teenuse elus. Te m\u00f5istate, et olete valmistunud andmebaasi skaleerimiseks aasta ja poole p\u00e4rast, aga peate skaleerima poolerit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c140c4ba6db19cb9939c1148638fb73.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Olemegi j\u00f5udnud j\u00e4reldusele, et vajame rohkem PgBouncer'eid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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>Paar korda plaastrit Bouncernile. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 olla t\u00f5stetud TCP-porti taaskasutamisega. Ja operatsioonis\u00fcsteem suunab sissetulevaid TCP-\u00fchendusi nende vahel automaatselt round-robin'iga.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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\u00e4bipaistev, st k\u00f5ik n\u00e4ib nagu teil oleks \u00fcks Bouncer, kuid teil on idle-\u00fchenduste fragmentatsioon k\u00e4ivitatud Bouncerite vahel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/53825f075db00b026c12013a610be456.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja teatud hetkel v\u00f5ite m\u00e4rgata, et need kolm Bouncera kasutavad oma protsessorituuma 100%. Teil on vaja palju Bouncereid. Miks? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 benchmarkite Postgresit TLS-i abil ja ilma, siis avastate, et loodud \u00fchenduste arv v\u00e4heneb peaaegu kahe j\u00e4rgu v\u00f5rra kr\u00fcpteerimise sissel\u00fclitamisega, kuna TLS-i k\u00e4epigistus tarbib keskprotsessorist ressursse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6101121ebe136af16e5eb1a484c65d66.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja tipptasemel v\u00f5ite n\u00e4ha \u00fcsna palju kr\u00fcptograafilisi funktsioone, mis t\u00f6\u00f6tavad sissetulevate \u00fchenduste laine ajal. Kuna meie p\u00f5hiserver v\u00f5ib vahetuda k\u00e4ttesaadavuse tsoonide vahel, on sissetulevate \u00fchenduste laine \u00fcsna t\u00fc\u00fcpiline olukord. See t\u00e4hendab, et mingil p\u00f5hjusel oli vana p\u00f5hiserver kergesti k\u00e4ttesaamatuks, ja kogu koormus suunati teise andmekeskusesse. K\u00f5ik need tulevad korraga TLesse tervitama. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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-i k\u00e4epigistusi ei pruugi enam Bounceriga tervitada, vaid pigem pigistab seda. Aegumise t\u00f5ttu v\u00f5ib sissetulevate \u00fchenduste laine muutuda j\u00e4rkj\u00e4rguliseks. Kui teil on taaskatsetus andmebaasi ilma eksponentsiaalse tagasiastumiseta, siis need ei tule j\u00e4rjestikku tagasi, vaid pidevas laine. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 koormab 16 tuuma 100%.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8d048d3774c09e5b6a3fb3c7bff62084.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oleme j\u00f5udnud kaskaadse PgBounceri juurde. See on parim konfiguratsioon, mida saame saavutada meie koormuse ja Bounceriga. V\u00e4limised Bouncerid teenivad TCP k\u00e4epigistuse jaoks ja sisemised Bouncerid teenivad tegeliku koondamise eesm\u00e4rki, et mitte liiga palju l\u00f5hestada v\u00e4limisi \u00fchendusi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3a4ee4ea46d5fe8479a5a7222ee134da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sellises konfiguratsioonis on sujuv taask\u00e4ivitamine v\u00f5imalik. Saate k\u00f5ik need 18 Bouncerit taask\u00e4ivitada \u00fckshaaval. Kuid sellise konfiguratsiooni toetamine on \u00fcsna keeruline. S\u00fcsteemihaldurid, DevOps ja inimesed, kes t\u00f5eliselt vastutavad selle serveri eest, ei ole selle skeemiga v\u00e4ga rahul. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 saame k\u00f5ik meie t\u00e4iustused edastada avatud l\u00e4htekoodiga, kuid Bouncer ei saa eriti head tuge. N\u00e4iteks v\u00f5imalus k\u00e4ivitada mitu PgBouncerit \u00fchel pordil pandi toime kuu aega tagasi. Aga pull-request selle funktsiooni kohta tehti mitu aastat tagasi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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. Postgresis saate jooksva p\u00e4ringu t\u00fchistada, saatdes salaja teise \u00fchenduse kaudu ilma t\u00e4iendava autentimiseta. Kuid m\u00f5ned kliendid saadavad lihtsalt TCP-resetti, st l\u00f5huvad v\u00f5rgu\u00fchenduse. Mida teeb sel juhul Bouncer? Ta ei tee midagi. Ta j\u00e4tkab p\u00e4ringu t\u00e4itmist. Kui teil on tulnud tohutult \u00fchendusi, mis v\u00e4ikeste p\u00e4ringutega andmebaasi koormavad, siis on lihtsalt Bounceriga \u00fchenduse katkestamine ebapiisav; tuleb l\u00f5petada ka need p\u00e4ringud, mis andmebaasis t\u00f6\u00f6tavad. <\/p>\n<p><\/p>\n<p>See oli vigade parandatud ja see probleem pole veel upstream Bouncerisse lisatud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a9695b6d9e640a5543dc73429eb0050b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja nii j\u00f5udsime j\u00e4reldusele, et vajame oma \u00fchenduse puhverserverit, mis arendaks, parandaks ja kus saaks probleeme kiiresti lahendada ning mis peab olema loomulikult mitme k\u00e4ideldav. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e755cd9b06a004f0eced1dc12fd3a6fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mitmek\u00e4ideldus seab meile peamise \u00fclesande. Me peame h\u00e4sti taluma sisenenud TLS-\u00fchenduste laine. <\/p>\n<p><\/p>\n<p>Selleks oli meil vaja arendada eraldi teek nimega Machinarium, mis on m\u00f5eldud v\u00f5rgu\u00fchenduse masinaseisundite kirjeldamiseks j\u00e4rjestikuse koodina. Kui vaadata libpq l\u00e4htekoodi, n\u00e4eb seal \u00fcsna keerulisi kutsungeid, mis v\u00f5ivad tagasi anda tulemuse ja \u00f6elda: \u201eKutsu mind veidi hiljem. Praegu on mul IO, kuid kui IO on m\u00f6\u00f6das, on mul protsessori koormus.\u201d See on mitmeastmeline skeem. V\u00f5rgusuhtlust kirjeldatakse tavaliselt olekumasinana. Rohke reeglitega nagu \"Kui ma sain varem paketi pealkirja suurusega N, siis n\u00fc\u00fcd ootan N baiti\" ja \"Kui ma saatsin SYNC paketi, siis n\u00fc\u00fcd ootan tulemuste metadataset.\" See teeb koodi \u00fcsna keerukaks ja vastupidiseks, nagu lab\u00fcrint muudetaks jooksu avamiseks. Me tegime nii, et olestatusmasina asemel kirjeldab programmeerija suhtlemise peamist teed tavap\u00e4rase imperatiivse koodina. Lihtsalt, et selles imperatiivs olevas koodis tuleb lisada kohad, kus t\u00e4itmise j\u00e4rjekord tuleb katkena oodata andmeid v\u00f5rgust, edastades t\u00e4itmise konteksti teisele korutiinile (rohelisele l\u00f5imele). See l\u00e4henemine on sarnane sellele, kuidas me k\u00f5ige oodatud tee lab\u00fcrindist j\u00e4rjestikku salvestame, ja seej\u00e4rel lisame sellele harud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a6bfb4b11961c7db3a7c7184674e3bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kokkuv\u00f5ttes on meil \u00fcks l\u00f5im, mis teeb TCP aksepteerimise ja \u00fcmmargusega edastab mitmele t\u00f6\u00f6tajale TCP-\u00fchenduse. <\/p>\n<p><\/p>\n<p>Samuti t\u00f6\u00f6tab iga kliendi\u00fchendus alati \u00fchel protsessoril. See muudab selle vahem\u00e4lu s\u00f5bralikumaks. <\/p>\n<p><\/p>\n<p>Lisaks oleme natuke t\u00e4iendanud v\u00e4ikeste pakettide kokku kogumist \u00fcheks suureks paketiks, et v\u00e4hendada s\u00fcsteemi TCP-staki koormust.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7d740c23baecdd2f993c83cd54a0a8e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oleme parandanud tehingute puhverdamist sel m\u00e4\u00e4ral, et Odyssey, kui s\u00e4te on rakendatud, saab saata CANCEL ja ROLLBACK juhul, kui v\u00f5rgu\u00fchendus katkevad, st kui pole \u00fchtegi oodatavat p\u00e4ringut, \u00fctleb Odyssey andmebaasile, et pole m\u00f5tet proovida t\u00f6\u00f6tada selle p\u00e4ringuga, mis v\u00f5ib kulutada v\u00e4\u00e4rtuslikke ressursse.<\/p>\n<p><\/p>\n<p>V\u00f5imalusel s\u00e4ilitame \u00fchendused sama kliendiga. See v\u00e4ldib application_name_add_host uuesti seadistamist. Kui see on v\u00f5imalik, siis ei pea me seadistama diagnostikaks vajalikke parameetreid uuesti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb2fb7fb16d65c9ea73a8978d1eb83c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u00f6\u00f6tame Yandex.Cloudi huvides. Ja kui kasutate hallatud PostgreSQLi ja teil on seadistatud \u00fchenduse puhver, saate luua loogilise replikatsiooni v\u00e4ljapoole, st saate meilt lahkuda loogilise replikatsiooni kaudu. Bouncer ei edasta v\u00e4ljapoole loogilise replikatsiooni voogu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 soovime \u00fchenduste \u00fchestusest. 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 annaks teie klastrile liiga palju teavet enda kohta. Kuid teie installatsioonides, kui vajate f\u00fc\u00fcsilist replikatsiooni \u00fchenduse puhvri kaudu Odyssey's, on see v\u00f5imalik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 puudu on, saatke pull-request v\u00f5i v\u00e4hemalt probleem GitHubis, teeme vajalikud k\u00e4sud valmis. Kuid PgBounceri p\u00f5hifunktsionaalsus on meil juba olemas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/451dd798fb3523a7a174ebfe00a14bc5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja loomulikult on meil viga edasi edastamine. Tagastame vea, mille andmebaas teatas. Saate teavet, miks te andmebaasi ei p\u00e4\u00e4se, mitte lihtsalt mitte, et te ei p\u00e4\u00e4se sinna. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/14b4cb0efa33a2658dfc528349a5382f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seda funktsiooni saab v\u00e4lja l\u00fclitada, kui vajate 100% \u00fchilduvust PgBounceriga. Saame k\u00e4ituda nagu Bouncer, lihtsalt igaks juhuks. <\/p>\n<p><\/p>\n<p><strong>Arendus<\/strong><\/p>\n<p><\/p>\n<p>M\u00f5ned s\u00f5nad Odyssey l\u00e4htekoodi kohta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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. Need on tavaliselt m\u00f5eldud andmebaasi v\u00e4rskendamiseks. Kui teil on vaja v\u00e4rskendada Postgres'i, saate selle connection pooler'is peatada, teha pg_upgrade ja seej\u00e4rel j\u00e4tkata. Klientide jaoks n\u00e4eb see v\u00e4lja nagu andmebaas lihtsalt tarduks. Selle funktsionaalsuse t\u00f5id meile kogukonna liikmed. See pole veel kokku pandud, aga varsti k\u00f5ik on. (Juba on kokku pandud)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 kokku pandud<\/p>\n<p><\/p>\n<p>Lisaks on \u00fcks uutest funktsioonidest PgBounceris SCRAM Authentication'i tugi, mille t\u00f5i meile inimene, kes ei t\u00f6\u00f6ta Yandex.Cloud'is. M\u00f5lemad \u2013 see on keeruline funktsionaalsus ja oluline. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f39346a543c88d17728233d05c2dff19.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seega on soov r\u00e4\u00e4kida, millest Odyssey koosneb, \u00e4kki soovite ka natuke koodi kirjutada. <\/p>\n<p><\/p>\n<p>Teil on Odyssey allikas, mis toetub kahele p\u00f5hiteegile. Kiwi teek on Postgres'e s\u00f5numite protokolli rakendus. See t\u00e4hendab, et Postgres'e natiivne proto 3 on standardsed s\u00f5numid, millega fronteerid ja tagak\u00fcljed saavad vahetada. Need on rakendatud Kiwi teegis.<\/p>\n<p><\/p>\n<p>Machinarium teek on voogude rakendus. Selle Machinarium'i v\u00e4ike fragment on kirjutatud assembleris. Kuid \u00e4rge muretsege, seal on vaid 15 rida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cd18f250af50eabd53536b2c0d7f12b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odyssey'i arhitektuur. On peamine masin, kus t\u00f6\u00f6tavad korutatsioonid. Selles masinas toimub sissetulevate TCP-\u00fchenduste vastuv\u00f5tmine ja jagamine t\u00f6\u00f6tajate vahel. <\/p>\n<p><\/p>\n<p>\u00dches t\u00f6\u00f6tajas v\u00f5ib t\u00f6\u00f6tada mitme kliendi t\u00f6\u00f6tleja. Samuti p\u00f5hivoolus t\u00f6\u00f6tavad konsool ja crone-\u00fclesannete t\u00f6\u00f6tlemine, et eemaldada \u00fchendused, mis pole enam alas vajalikud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7072fb20f406f2ee5788542860ccdf50.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odyssey'i testimiseks kasutatakse Postgres'i standardset testide komplekti. K\u00e4ivitame simply install-check'i Bouncer'i ja Odyssey'i kaudu, saame nulldivi. Seal on mitmeid teste, mis on seotud kuup\u00e4evade vormindamisega, mis ei l\u00e4bi t\u00e4pselt samamoodi Bouncer'is ja Odyssey'is.<\/p>\n<p><\/p>\n<p>Lisaks on olemas palju draivereid, mis omavad oma testimist. Ja nende teste kasutame Odyssey'i testimiseks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fb01cc9a0e9724ddcd3cc3d088afb182.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lisaks, meie kaskadikonfiguratsiooni t\u00f5ttu peame testima erinevaid kombinatsioone: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey, et olla kindlad, et kui Odyssey on m\u00f5nes kaskaadi osas, t\u00f6\u00f6tab see ikka nii, nagu me ootame. <\/p>\n<p><\/p>\n<p><strong>K\u00fchveldused<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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. Ja oleks ebaaus, kui ma \u00fctleksin, et k\u00f5ik lihtsalt t\u00f6\u00f6tab. Ei, jah, aga mitte alati. N\u00e4iteks tootmises t\u00f6\u00f6tas k\u00f5ik lihtsalt, siis tulid meie s\u00f5brad PostgreSQL Professional'ist ja \u00fctlesid, et meil on m\u00e4lu leke. Nad olid t\u00f5eliselt \u00f5iged, me parandasime selle. Aga see oli lihtsalt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 sertifikaadid ja serveri sertifikaadid.<\/p>\n<p><\/p>\n<p>Bouncer'i ja Odyssey serveri sertifikaadid loevad oma pcache'i, kuid kliendi sertifikaate ei pea pcache'ist uuesti lugema, kuna meie skaleeritav Odyssey puutub l\u00f5puks kokku t\u00f5ukes\u00fcsteemi sertifikaadi lugemise j\u00f5udlusega. See oli meie jaoks \u00fcllatus, kuna see probleem ei ilmnenud kohe. Alguses skaleerus see lineaarselt, aga 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 soovime \u00fchenduste \u00fchestusest. 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 sisseehitatud Linuxi vahenditega. PgBouncer\u2019is on see rakendatud nii, et on eraldi l\u00f5ng, mis ootab vastust PAM-ilt, ja on peamine PgBouncer'i l\u00f5ng, mis teenindab praegust \u00fchendust ja v\u00f5ib paluda neid PAM-i l\u00f5ngas oodata. <\/p>\n<p><\/p>\n<p>Me ei hakanud seda rakendama \u00fchel lihtsal p\u00f5hjusel. Meil on ju palju l\u00f5ngu. Miks me seda vajame?<\/p>\n<p><\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes v\u00f5ivad see tekitada probleeme, kuna kui teil on PAM-i autentimine ja mitte PAM-i autentimine, siis suur PAM-i autentimise laine v\u00f5ib oluliselt viivitada mitte PAM-i autentimise. See on \u00fcks neist asjadest, mida me ei parandanud. Kuid kui soovite selle parandada, v\u00f5ite sellega tegeleda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c7bd9e9980ff7298b30a59c130f03dbb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine takistus oli see, et meil on \u00fcks l\u00f5ng, mis vastutab k\u00f5igi sissetulevate \u00fchenduste aktsepteerimise eest. Ja seej\u00e4rel edastab need t\u00f6\u00f6tajate basseinile, kus toimub TLS k\u00e4tlemine.<\/p>\n<p><\/p>\n<p>Kui teil on koherentne laine 20 000 v\u00f5rgu\u00fchendust, siis need k\u00f5ik aktsepteeritakse. Ja kliendi poolel hakkab libpq siis aegumise arvet pidama. Tundub, et vaikimisi on seal 3 sekundi t\u00e4htaeg. <\/p>\n<p><\/p>\n<p>Kui nad k\u00f5ik ei saa samal ajal andmebaasi sisse, siis nad ei saa andmebaasi sisse, kuna seda ei saa katta mitteeksponentsiaalse proovimisega. <\/p>\n<p><\/p>\n<p>Oleme otsustanud, et kopeerime siia PgBouncer'i skeemi selle kohta, et meil on TCP-\u00fchenduste arvu v\u00e4hendamine, millele me aktsepteerime. <\/p>\n<p><\/p>\n<p>Kui me n\u00e4eme, et aktsepteerime \u00fchendusi, kuid nad ei saa viimaks k\u00e4t\u0161mani j\u00f5uda, paneme nad j\u00e4rjekorda, et nad ei raiskaks keskse protsessorite ressursse. See p\u00f5hjustab seda, et samaaegne k\u00e4t\u0161man ei pruugi toimuda k\u00f5ikide \u00fchenduste jaoks, mis on saabunud. Aga v\u00e4hemalt keegi p\u00e4\u00e4seb andmebaasi, isegi kui koormus on piisavalt suur.<\/p>\n<p><\/p>\n<p><strong>Teekond<\/strong><\/p>\n<p><\/p>\n<p>Mida sooviksime tulevikus Odyssey's n\u00e4ha? Mida oleme valmis ise arendama ja mida ootame kogukonnalt?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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. aasta seisuga.<\/strong><\/p>\n<p><\/p>\n<p>Nii n\u00e4gi Augustis v\u00e4lja Odyssey teekond:<\/p>\n<p><\/p>\n<ul>\n<li>Soovisime SCRAM ja PAM autentimist.<\/li>\n<li>Soovisime edasi lugeda faile koopia serveris. <\/li>\n<li>Sooviksime online-restarti. <\/li>\n<li>Ja v\u00f5imalust serveris paus v\u00f5tta. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 teekonnast on t\u00e4idetud, ja seda mitte meie poolt. Ja see on hea. Seet\u00f5ttu arutame seda, mis on j\u00e4\u00e4nud, ja lisame veel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 edasi lugemise p\u00e4ringutesse koopia serverisse<\/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 soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0873cffd4f1ae15d9ffa6d080671051b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Postgres'is, alustades 10-st, on v\u00f5imalik seansi atribuutide m\u00e4\u00e4ramine \u00fchenduse loomisel. Saate \u00fchenduses loetleda k\u00f5ik andmebaasi hostid ja \u00f6elda, miks te andmebaasi l\u00e4hete: kirjutamiseks v\u00f5i ainult lugemiseks. Ja draiver valib ise loendi esimesena, mis talle rohkem meeldib, mis vastab seansi atribuutide n\u00f5udmistele. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. Andrei Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0693d1327fe5826502a01c21d05d5b4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuid selle l\u00e4henemise probleem on see, et see ei kontrolli replikatsiooni viivitust. Teil v\u00f5ib olla m\u00f5ni replik, mis on ebaolulises ajavahemikus teie teenusele mahaj\u00e4\u00e4nud. Selleks, et lukustamisloetavates p\u00e4ringutes k\u00f5igis replikates korralikult t\u00f6\u00f6tada, vajame Odyssey'st v\u00f5imalust mitte t\u00f6\u00f6tada, kui lugemine ei ole v\u00f5imalik. <\/p>\n<p><\/p>\n<p>Odyssey peaks perioodiliselt andmebaasi minema ja k\u00fcsima replikatsiooni kaugust primaarsest. Ja kui see saavutab piirv\u00e4\u00e4rtuse, ei tohi uusi p\u00e4ringuid andmebaasi lubada, vaid \u00f6elda kliendile, et tuleb \u00fchendused uuesti algatada ja v\u00f5ib-olla valida teine host p\u00e4ringute t\u00e4itmiseks. See v\u00f5imaldab andmebaasil kiiremini taastada replikatsiooni viivituse ja naasta p\u00e4ringutele vastamiseks. <\/p>\n<p><\/p>\n<p>Rakendamise t\u00e4htaegu on raske nimetada, kuna see on avatud l\u00e4htekoodiga. Kuid loodan, et mitte 2,5 aastat nagu kolleegid PgBouncerist. Seda funktsiooni oleks soovinud Odyssey's n\u00e4ha. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 valmistatud lause toe kohta.<\/a><\/noindex>N\u00fc\u00fcd saate luua prepared statement'i kahte pidi. Esiteks v\u00f5ite t\u00e4ita SQL-k\u00e4sku, nimelt \u201eprepared\u201d. Selle SQL-k\u00e4sku m\u00f5istmiseks peame \u00f5ppima m\u00f5istma SQL-i Bouncer'i poolel. See oleks \u00fcleliigne, kuna meil on vaja terviklikku parsijat. Me ei saa anal\u00fc\u00fcsida iga SQL-k\u00e4sku. <\/p>\n<p><\/p>\n<p>Kuid proto3-l on olemas prepared statement'i tugi s\u00f5numite protokolli tasemel. Ja see on koht, kus teave vaikeprepared statement'i loomisest j\u00f5uab struktureeritud kujul. Ja me v\u00f5iksime toetada arusaama, et mingisugusel serveri \u00fchendusel palus klient luua prepared statements. Ja isegi kui tehing on suletud, peame ikkagi s\u00e4ilitama serveri ja kliendi seotuse. <\/p>\n<p><\/p>\n<p>Kuid siin tekib dialooge erinevus, sest keegi r\u00e4\u00e4gib sellest, et on oluline m\u00f5ista, millised t\u00e4psed prepared statements klient on loonud ja jagada serveri \u00fchendus k\u00f5ikide klientide vahel, kes on loonud selle serveri \u00fchenduse, st need, kes on loonud sellise prepared statement'i. <\/p>\n<p><\/p>\n<p>Andres Freund \u00fctles, et kui klient on juba loonud teises serveri \u00fchenduses sellise prepared statement'i, siis looge see tema eest. Kuid tundub, et klientide asemel andmebaasis p\u00e4ringute t\u00e4itmine on pisut vale, kuid arendaja vaatevinklist, kes kirjutab andmebaasi suhtlemise protokolli, oleks mugav, kui talle antakse lihtsalt v\u00f5rgu\u00fchendus, kus on selline ettevalmistatud p\u00e4ring. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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, mille peame ellu viima. Meil on praegu PgBouncer'iga \u00fchilduv j\u00e4lgimine. Saame tagasi 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>Peame rakendama toimetuse toetust, mis t\u00e4hendaks, et on aeglased p\u00e4ringud, mis tarbivad ressursse, ja teevad j\u00e4lgimise vastuv\u00f5etavamaks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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 saada versioon 1.0 (versioon 1.1 on juba v\u00e4lja antud). Asi on selles, et Odyssey on hetkel versioonis 1.0rc, st release candidate. Ja k\u00f5ik takistused, mida ma loetlesin, on lahendatud just sel versioonil, v\u00e4lja arvatud m\u00e4lu leke. <\/p>\n<p><\/p>\n<p>Mida t\u00e4hendaks meie jaoks versioon 1.0? Me toome Odyssey oma andmebaasidele. See t\u00f6\u00f6tab juba praegu meie andmebaasides, kuid kui see saavutab 1 000 000 p\u00e4ringut sekundis, siis saame \u00f6elda, et see on versioon, mida v\u00f5ib nimetada 1.0-st release'iks. <\/p>\n<p><\/p>\n<p>Kogukonnas on mitmed inimesed palunud, et versioonis 1.0 oleks ka paus ja SCRAM. Kuid see t\u00e4hendaks, et peaksime juurutama j\u00e4rgmise versiooni, kuna SCRAM ja paus ei ole veel \u00fchendatud. Kuid t\u00f5en\u00e4oliselt lahendame selle k\u00fcsimuse piisavalt kiiresti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey tegevuskava: mida veel soovime \u00fchenduste \u00fchestusest. 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. Ja mul oleks tore kuulda, millised probleemid teil Bounceriga on. R\u00e4\u00e4gime neist. V\u00f5ib-olla suudame rakendada mingeid funktsioone, mis on teile vajalikud. <\/p>\n<p><\/p>\n<p>Sellekohane osa ongi mul l\u00e4bi, tahaksin teid kuulata. Ait\u00e4h!<\/p>\n<p><\/p>\n<p>K\u00fcsimused<\/p>\n<p><\/p>\n<p><em>Kui ma seatan oma application_name, kas see edastatakse \u00f5igesti, sealhulgas transaction poolingus 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 edastatakse.<\/em> <\/p>\n<p><\/p>\n<p>Me teeme set'i. <\/p>\n<p><\/p>\n<p><em>Ja kui mu tegelik \u00fchendus hopib teiste \u00fchenduste vahel, kas see edastatakse?<\/em><\/p>\n<p><\/p>\n<p>Teeme set'i k\u00f5igi parameetritega, mis on loetletud nimekirjas. Ma ei saa \u00f6elda, kas sellel nimekirjal on application_name. Tundub, et olen seda seal n\u00e4inud. Seame k\u00f5ik samad parameetrid. \u00dche p\u00e4ringuga teeb see set k\u00f5ik, mis klient on seadistanud k\u00e4ivitamisel. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h, Andrei, et tegid ettekande! Hea ettekande! R\u00f5\u00f5m on n\u00e4ha, et Odyssey areneb iga hetkaga \u00fcha kiiremini. Soovin, et j\u00e4tkaksite samas vaimus. Oleme juba p\u00f6\u00f6rdunud teie poole palvega, et oleks olemas multi data-source \u00fchendus, et Odyssey saaks samal ajal \u00fchendada erinevate andmebaasidega, st master-slave, ja p\u00e4rast automaatset failover'it \u00fchendada uue meistriga.<\/em> <\/p>\n<p><\/p>\n<p>Jah, ma tundub, et meenutan seda arutelu. Praegu on mitu salvestusruumi. Kuid vahetuste tegemine nende vahel puudub. Peame enda poolt k\u00fcsima serverilt, et see on veel elus ja m\u00f5istma, et on toimunud failover, kes kutsub esile pg_recovery. Mul on olemas standardne viis m\u00f5ista, et me ei ole meesterikkes. Ja me peame kuidagi aru saama vigadest v\u00f5i kuidas? T. e. idee on huvitav, seda arutatakse. Kirjutage rohkem kommentaare. Kui teil on t\u00f6\u00f6tavad k\u00e4ed, kes tunnevad C, siis on see t\u00f5eliselt suurep\u00e4rane. <\/p>\n<p><\/p>\n<p>Meie jaoks on oluline k\u00fcsimus replikatsioonide skaleerimise osas, sest soovime muuta replikatiivsete klastrite vastuv\u00f5tmise arendajatele v\u00f5imalikult lihtsaks. Kuid siin tahaks rohkem kommentaare, st kuidas t\u00e4pselt seda teha, kuidas h\u00e4sti teha. <\/p>\n<p><\/p>\n<p><em>K\u00fcsimus on samuti replikate kohta. Selgub, et teil on master ja mitu replit. Ja on selge, et replitesse tehakse \u00fchendusi harvemini kui masterisse, kuna neil v\u00f5ivad olla erinevused. Te \u00fctlesite, et andmete erinevus v\u00f5ib olla selline, et see ei rahulda teie \u00e4ri ja te ei k\u00fclastaks neid, kuni need ei replikeerita. Samuti, kui te pikka aega ei k\u00fclastanud, ja siis hakkate j\u00e4lle k\u00fclastama, siis need andmed, mis on vajalikud, ei ole kohe kergesti k\u00e4ttesaadavad. St kui me pidevalt k\u00e4ime masteris, siis seal on vahem\u00e4lu soojendatud, aga replikas vahem\u00e4lu veidi mahaj\u00e4\u00e4nud.<\/em> <\/p>\n<p><\/p>\n<p>Jah, see on t\u00f5si. Pcache'is ei ole andmepunkte, mida soovite, reaalses vahem\u00e4lus ei ole teavet tabelite kohta, mida soovite, plaanides ei ole parsetud p\u00e4ringud, \u00fcldse mitte midagi. <\/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 halvasti, st see soojendab oma vahem\u00e4lu.<\/em> <\/p>\n<p><\/p>\n<p>Sain idee aru. \u00d5ige l\u00e4henemine oleks k\u00e4ivitada alguses v\u00e4ike protsent p\u00e4ringutest repliikal, mis soojendaks vahem\u00e4lu. \u00dcksikasjalikult, meil on tingimus, et ei tohi j\u00e4\u00e4da masterist kauemaks kui 10 sekundit. Ja seda tingimust rakendada mitte \u00fches voolus, vaid j\u00e4rk-j\u00e4rgult m\u00f5nedele klientidele. <\/p>\n<p><\/p>\n<p><em>Jah, suurendada kaalu.<\/em><\/p>\n<p><\/p>\n<p>See on hea idee. Aga k\u00f5igepealt tuleb see v\u00e4lja l\u00fclitada. Esiteks tuleb v\u00e4lja l\u00fclituda ja siis m\u00f5tleme, kuidas sisse l\u00fclitada. See on suurep\u00e4rane funktsioon, et sujuvalt sisse l\u00fclituda.<\/p>\n<p><\/p>\n<p><em>Nginx'is on selline valik <code>aeglaselt alustada<\/code> serveri klastris. Ja see suurendab koormust j\u00e4rk-j\u00e4rgult.<\/em> <\/p>\n<p><\/p>\n<p>Jah, hea idee, proovime, kui sinna 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 5.0.1.1 - aioseo.com -->\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) 5.0.1.1\" \/>\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: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 veel soovime \u00fchenduse kogumises. Andrei Borodin (2019) | ProHoster","description":"","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: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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}