{"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\/hu\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019","title":{"rendered":"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6c445191705a4c96939cd094bc457a53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A jelent\u00e9sben Andrej Borodin besz\u00e1mol arr\u00f3l, hogyan vett\u00e9k figyelembe a PgBouncer m\u00e9retez\u00e9s\u00e9nek tapasztalatait a csatlakoz\u00e1si pooler tervez\u00e9sekor <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Odyssey<\/a><\/noindex>, hogyan vezett\u00e9k be a termel\u00e9sbe. Emellett megvitatjuk, hogy milyen funkci\u00f3kat szeretn\u00e9nk l\u00e1tni az \u00faj verzi\u00f3kban: sz\u00e1munkra fontos, hogy ne csak a saj\u00e1t ig\u00e9nyeinket el\u00e9g\u00edts\u00fck ki, hanem fejlessz\u00fck a felhaszn\u00e1l\u00f3i k\u00f6z\u00f6ss\u00e9get <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Od\u00fcsszeia<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Vide\u00f3:<\/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=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" 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 roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/dd2ea50b72e3d9c4e795aecbf9afdd25.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mindenkinek \u00fcdv\u00f6zlet! Andr\u00e1snak h\u00edvnak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0a2f1880005bec1f61b72fb23b555adc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A Yandexn\u00e9l ny\u00edlt forr\u00e1sk\u00f3d\u00fa adatb\u00e1zisok fejleszt\u00e9s\u00e9vel foglalkozom. Ma a csatlakoz\u00e1si pooler t\u00e9m\u00e1j\u00e1r\u00f3l fogunk besz\u00e9lni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c18e7c937423d2514faa12e820e78e70.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha tudod, hogyan kell oroszul nevezni a csatlakoz\u00e1si poolert, mondd el nekem. Nagyon szeretn\u00e9k tal\u00e1lni egy j\u00f3 technikai kifejez\u00e9st, amelynek meg kellene \u00e1llapodnia a technikai irodalomban. <\/p>\n<p><\/p>\n<p>A t\u00e9ma meglehet\u0151sen bonyolult, mert sok adatb\u00e1zisban a csatlakoz\u00e1si pooler be\u00e9p\u00edtett, \u00e9s err\u0151l nem is kell tudni. Vannak bizonyos be\u00e1ll\u00edt\u00e1sok, persze mindenhol, de a Postgres eset\u00e9ben ez nem m\u0171k\u00f6dik. Csak k\u00f6zben (a HighLoad++ 2019-en) Nikolaj Szamohvalov el\u0151ad\u00e1sa folyik a Postgres lek\u00e9rdez\u00e9sek be\u00e1ll\u00edt\u00e1s\u00e1r\u00f3l. \u00dagy \u00e9rtem, ide azok az emberek j\u00f6ttek, akik m\u00e1r t\u00f6k\u00e9letesen be\u00e1ll\u00edtott\u00e1k a lek\u00e9rdez\u00e9seket, \u00e9s ezek olyan emberek, akik ritk\u00e1bb rendszerprobl\u00e9m\u00e1kkal szembes\u00fclnek, amelyek a h\u00e1l\u00f3zattal \u00e9s az er\u0151forr\u00e1sok kihaszn\u00e1l\u00e1s\u00e1val kapcsolatosak. Helyenk\u00e9nt ez meglehet\u0151sen bonyolult lehetett, mert a probl\u00e9m\u00e1k nem nyilv\u00e1nval\u00f3ak.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/89c660dd530575e2938e6bf312b83e95.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A Yandexben van Postgres. A Yandex.Cloud-ban sok Yandex szolg\u00e1ltat\u00e1s \u00e9l. Van n\u00e9h\u00e1ny petab\u00e1jt adatunk, amelyek m\u00e1sodpercenk\u00e9nt legal\u00e1bb egymilli\u00f3 lek\u00e9rdez\u00e9st gener\u00e1lnak a Postgresben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/288bfa37b9dcd60acd22ba48f0ef8a39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>El\u00e9g tipikus klasztert biztos\u00edtunk minden szolg\u00e1ltat\u00e1s sz\u00e1m\u00e1ra - ez az alap primer csom\u00f3pont, szok\u00e1sos k\u00e9t replik\u00e1val (szinkron \u00e9s aszinkron), biztons\u00e1gi ment\u00e9ssel, a lek\u00e9rdez\u00e9sek sk\u00e1l\u00e1z\u00e1s\u00e1val a replik\u00e1n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c249ca55bb387e25a5560324024cc523.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minden klasztercsom\u00f3pont egy Postgres, amelyen k\u00edv\u00fcl, azon k\u00edv\u00fcl, hogy Postgres \u00e9s a rendszerfigyel\u00e9s fut, m\u00e9g egy csatlakoz\u00e1si pooler is telep\u00edtve van. A csatlakoz\u00e1si poolert fencing c\u00e9lokra \u00e9s alapvet\u0151 c\u00e9lj\u00e1nak megfelel\u0151en haszn\u00e1lj\u00e1k. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0e29be55cc048007db21c80bbb08a9d4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi a csatlakoz\u00e1si pooler alapvet\u0151 c\u00e9lja? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e2fbbd440c2781573cb35deeef358f20.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A Postgresn\u00e9l a folyamatmodelt alkalmazz\u00e1k az adatb\u00e1zis kezel\u00e9s\u00e9n\u00e9l. Ez azt jelenti, hogy egy csatlakoz\u00e1s egy folyamat, egy Postgres backend. \u00c9s ebben a backendben nagyon sok k\u00fcl\u00f6nb\u00f6z\u0151 cache tal\u00e1lhat\u00f3, amelyeket meglehet\u0151sen k\u00f6lts\u00e9ges k\u00fcl\u00f6n csatlakoz\u00e1sokra elv\u00e9gezni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/587498063b1af8fac4a845961c654bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tov\u00e1bb\u00e1 a Postgres k\u00f3dj\u00e1ban van egy t\u00f6mb, amelyet procArray-nak h\u00edvnak. Ez tartalmazza a h\u00e1l\u00f3zati kapcsolatok alapvet\u0151 adatait. Szinte minden procArray feldolgoz\u00f3 algoritmus line\u00e1ris id\u0151beli \u00f6sszetetts\u00e9ggel b\u00edr, v\u00e9gigfut az eg\u00e9sz h\u00e1l\u00f3zati kapcsolatok t\u00f6mbj\u00e9n. Ez egy viszonylag gyors ciklus, de nagy sz\u00e1m\u00fa bej\u00f6v\u0151 h\u00e1l\u00f3zati kapcsolattal minden kicsit dr\u00e1g\u00e1bb\u00e1 v\u00e1lik. \u00c9s amikor minden egy kicsit dr\u00e1g\u00e1bb\u00e1 v\u00e1lik, v\u00e9g\u00fcl egy nagyon magas \u00e1rat fizethet egy nagy sz\u00e1m\u00fa h\u00e1l\u00f3zati kapcsolat\u00e9rt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b534a38d0bfae7a65fc4258155a50280.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e1rom lehets\u00e9ges megk\u00f6zel\u00edt\u00e9s l\u00e9tezik:<\/p>\n<p><\/p>\n<ul>\n<li>Alkalmaz\u00e1soldalon. <\/li>\n<li>Adatb\u00e1zis oldalon. <\/li>\n<li>\u00c9s k\u00f6z\u00f6tt\u00fck, azaz k\u00fcl\u00f6nb\u00f6z\u0151 kombin\u00e1ci\u00f3k. <\/li>\n<\/ul>\n<p><\/p>\n<p>Sajnos az integr\u00e1lt pooler jelenleg fejleszt\u00e9s alatt \u00e1ll. A PostgreSQL Professional c\u00e9gn\u00e9l a bar\u00e1tok f\u0151k\u00e9nt ezzel foglalkoznak. Amikor megjelenik, neh\u00e9z megmondani. Val\u00f3j\u00e1ban az architekt\u00e1nak k\u00e9t megold\u00e1sa van: az alkalmaz\u00e1soldali pool \u00e9s a proxy pool. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/702527a09e9fc86dd39b7fd69dcf1fc9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az alkalmaz\u00e1soldali pool a legegyszer\u0171bb megold\u00e1s. Szinte minden kliens driver m\u00f3dot k\u00edn\u00e1l arra, hogy a milli\u00f3nyi kapcsol\u00f3d\u00e1st a k\u00f3dban n\u00e9h\u00e1ny tucat adatb\u00e1zis kapcsolatk\u00e9nt mutassa be. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7b66b9e20d22f472ca5ac39f6b9e0ba4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Felmer\u00fcl a probl\u00e9ma, hogy bizonyos ponton skal\u00e1zni szeretn\u00e9 a backendet, t\u00f6bb virtu\u00e1lis g\u00e9pre szeretn\u00e9 telep\u00edteni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f216fd7a8c01c2b07891e2242c48b06a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Akkor m\u00e9g azt is \u00e9szleli, hogy t\u00f6bb el\u00e9rhet\u0151s\u00e9gi z\u00f3n\u00e1ja van, t\u00f6bb adatk\u00f6zpontja. Az \u00fcgyf\u00e9loldali pooling megk\u00f6zel\u00edt\u00e9s nagy sz\u00e1mokhoz vezet. Nagy sz\u00e1mok alatt k\u00f6r\u00fclbel\u00fcl 10 000 kapcsolatot \u00e9rt\u00fcnk. Ez a hat\u00e1r, ami norm\u00e1lisan m\u0171k\u00f6dik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e5bc5f284fd8ff568bbe16c3895b7ac6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha proxy poolerekr\u0151l besz\u00e9l\u00fcnk, k\u00e9t olyan pooler l\u00e9tezik, amelyek sok mindent tudnak. Ezek nem csak poolerek. Ezek poolerek + egy kis extra funkci\u00f3k. Ezek a k\u00f6vetkez\u0151k: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.pgpool.net\/\">Pgpool<\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/crunchy-proxy\">Crunchy-Proxy<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p>De sajnos ez az extra funkci\u00f3 nem mindenkinek sz\u00fcks\u00e9ges. Ez\u00e9rt az poolerek csak a sesszi\u00f3s poolingot t\u00e1mogatj\u00e1k, azaz egy bej\u00f6v\u0151 kliens \u00e9s egy kimen\u0151 kliens a adatb\u00e1zishoz. <\/p>\n<p><\/p>\n<p>A mi feladatainkhoz ez nem igaz\u00e1n alkalmas, ez\u00e9rt a PgBouncerrt haszn\u00e1ljuk, amely tranzakci\u00f3s poolingot val\u00f3s\u00edt meg, azaz a szerver kapcsolatok a kliens kapcsolatokhoz csak a tranzakci\u00f3 idej\u00e9re \u00e1llnak p\u00e1rhuzamosan. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e5fedbe14656d2ac2cde8d1878a950e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s a mi terhel\u00e9s\u00fcnkn\u00e9l - ez igaz. <strong>De van n\u00e9h\u00e1ny probl\u00e9ma.<\/strong>.<img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/61fd36cadcd9948d624dafa711777307.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A probl\u00e9m\u00e1k akkor kezd\u0151dnek, amikor diagnosztiz\u00e1lni szeretn\u00e9 a sesszi\u00f3t, mert minden bej\u00f6v\u0151 kapcsolat helyi. Minden egy loopback-r\u0151l \u00e9rkezett, \u00e9s \u00edgy a sesszi\u00f3 nyomoz\u00e1sa neh\u00e9zz\u00e9 v\u00e1lik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/36108c4956c410a1b1f286a88bc393d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Term\u00e9szetesen haszn\u00e1lhatja az application_name_add_host-t. Ez egy m\u00f3dszer a Bouncer oldal\u00e1n, hogy IP-c\u00edmet adjon hozz\u00e1 az application_name-hez. Az application_name azonban egy tov\u00e1bbi kapcsolaton \u00e1ll\u00edt\u00f3dik be. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b4cec483aa776f48db7ad3966c3b78e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez a grafikon azt mutatja, hogy a s\u00e1rga vonal a val\u00f3s k\u00e9r\u00e9seket, m\u00edg a k\u00e9k vonal a dolgok adatb\u00e1zis\u00e1ba \u00e9rkez\u0151 k\u00e9r\u00e9seket jelzi. Ez a k\u00fcl\u00f6nbs\u00e9g az application_name be\u00e1ll\u00edt\u00e1s\u00e1b\u00f3l sz\u00e1rmazik, amely csak a nyomk\u00f6vet\u00e9shez sz\u00fcks\u00e9ges, de egy\u00e1ltal\u00e1n nem ingyenes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c02ea73a6f1a2a4cd6af6c621f321ab4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl a Bouncer nem korl\u00e1tozhat egy pool-t, azaz a kapcsolatokat az adatb\u00e1zishoz egy meghat\u00e1rozott felhaszn\u00e1l\u00f3hoz, egy meghat\u00e1rozott adatb\u00e1zishoz. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3431a463e04106066e2799aead66f571.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hova vezet ez? Van egy t\u00falterhelt szolg\u00e1ltat\u00e1s C++-ban, \u00e9s valahol mellette egy apr\u00f3 szolg\u00e1ltat\u00e1s Node-ban, ami nem csin\u00e1l semmi cs\u00fany\u00e1t az adatb\u00e1zissal, de a drivere \u0151r\u00fcletbe kergeti. Megnyit 20 000 kapcsolatot, m\u00edg minden m\u00e1s v\u00e1rakozik. A k\u00f3dja rendben van. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d7fa321714dc017b017945dffcf79bc6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Term\u00e9szetesen \u00edrtunk egy kis jav\u00edt\u00e1st a Bouncer-hez, ami hozz\u00e1adta ezt a be\u00e1ll\u00edt\u00e1st, azaz a kliensek korl\u00e1toz\u00e1s\u00e1t a pool-ra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d58884fc5ac0f90ff8442f126972157a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezt meg lehetett volna csin\u00e1lni a Postgres oldal\u00e1n is, azaz az adatb\u00e1zis szerepeit a kapcsolatok sz\u00e1m\u00e1val korl\u00e1tozni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8d6ff70db72964ed4eae5eaa47309931.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De akkor elvesz\u00edti a lehet\u0151s\u00e9get, hogy meg\u00e9rtse, mi\u00e9rt nincsenek kapcsolatai a szerverhez. A PgBouncer nem tov\u00e1bb\u00edtja a kapcsolat hib\u00e1j\u00e1t, mindig ugyanazt az inform\u00e1ci\u00f3t adja vissza. \u00c9s nem tudhatja, lehet, hogy megv\u00e1ltozott a jelsz\u00f3, lehet, hogy egyszer\u0171en az adatb\u00e1zis megrogyott, lehet, hogy valami probl\u00e9ma van. De diagnosztika egy\u00e1ltal\u00e1n nincs. Ha egy session nem \u00e1ll\u00edthat\u00f3 be, sosem fogja megtudni, mi\u00e9rt nem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cb3048344a94f2953bf403485d28e69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy adott pillanatban r\u00e1n\u00e9z az alkalmaz\u00e1s grafikonjaira, \u00e9s l\u00e1tja, hogy az alkalmaz\u00e1s nem m\u0171k\u00f6dik.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e67c6680bb9a7f41242af9f9e4920916.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Megh\u00fazza a tetejet, \u00e9s l\u00e1tja, hogy a Bouncer egy sz\u00e1l\u00fa. Ez a szolg\u00e1ltat\u00e1s \u00e9let\u00e9nek fordul\u00f3pontja. R\u00e1j\u00f6n, hogy m\u00e1sf\u00e9l \u00e9vre k\u00e9sz\u00fcltek az adatb\u00e1zis sk\u00e1l\u00e1z\u00e1s\u00e1ra, de most a pooler sk\u00e1l\u00e1z\u00e1s\u00e1t kell elv\u00e9gezni\u00fck. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c140c4ba6db19cb9939c1148638fb73.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Arra a k\u00f6vetkeztet\u00e9sre jutottunk, hogy sz\u00fcks\u00e9g\u00fcnk van t\u00f6bb PgBouncer-ra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej 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>Egy kicsit jav\u00edtgattuk a Bouncert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/97755489a25ebfe38efd56ff897bd8fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dagy m\u00f3dos\u00edtottuk, hogy t\u00f6bb Bouncer ind\u00edthat\u00f3 legyen \u00fajrafelhaszn\u00e1lva a TCP-portot. Az oper\u00e1ci\u00f3s rendszer automatikusan round-robin m\u00f3don \u00e1thelyezi az \u00f6sszes bej\u00f6v\u0151 TCP-kapcsolatot k\u00f6z\u00f6tt\u00fck.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ac30d3f067de2a8cd66ad2325c3a3b58.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez \u00e1tl\u00e1that\u00f3 a kliensek sz\u00e1m\u00e1ra, azaz minden \u00fagy n\u00e9z ki, mintha csak egy Bouncer lenne, de a fut\u00f3 Bouncerek k\u00f6z\u00f6tt az inakt\u00edv kapcsolatok fragment\u00e1l\u00f3dnak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/53825f075db00b026c12013a610be456.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s bizonyos pillanatokban \u00e9szreveheti, hogy ezek a 3 Bouncer mind a saj\u00e1t magj\u00e1nak 100%-\u00e1t felhaszn\u00e1lja. Sz\u00e1mos Bouncerre van sz\u00fcks\u00e9ge. Mi\u00e9rt? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/66c17883a043e157cd7ceab2c2a4e326.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mert \u00d6nnek TLS-e van. Van titkos\u00edtott kapcsolata. Ha tesztel egy Postgres-t TLS-sel \u00e9s TLS n\u00e9lk\u00fcl, \u00e9szre fogja venni, hogy a l\u00e9tes\u00edtett kapcsolatok sz\u00e1ma csaknem k\u00e9t nagys\u00e1grenddel cs\u00f6kken a titkos\u00edt\u00e1s bekapcsol\u00e1s\u00e1val, mivel a TLS k\u00e9zfog\u00e1s CPU-er\u0151forr\u00e1st fogyaszt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6101121ebe136af16e5eb1a484c65d66.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fent sok kriptogr\u00e1fiai f\u00fcggv\u00e9ny l\u00e1that\u00f3, amelyek v\u00e9grehajt\u00e1sra ker\u00fclnek, amikor bej\u00f6v\u0151 kapcsolatok hull\u00e1ma \u00e9rkezik. Mivel a primary-nk v\u00e1ltogathat a rendelkez\u00e9sre \u00e1ll\u00e1si z\u00f3n\u00e1k k\u00f6z\u00f6tt, a bej\u00f6v\u0151 kapcsolatok hull\u00e1ma egy meglehet\u0151sen tipikus helyzet. Teh\u00e1t valamilyen okb\u00f3l a r\u00e9gi primary nem volt el\u00e9rhet\u0151, az \u00f6sszes terhel\u00e9st egy m\u00e1sik adatk\u00f6zpontra k\u00fcldt\u00e9k. Mindannyian egyszerre \u00e9rkeznek, hogy \u00fcdv\u00f6z\u00f6lj\u00e9k a TLS-t. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c238ac2f511568590dc275e01c192c00.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s a nagy sz\u00e1m\u00fa TLS k\u00e9zfog\u00e1s m\u00e1r nem \u00fcdv\u00f6z\u00f6lheti a Bouncert, hanem szor\u00edtja a tork\u00e1t. A timeout miatt a bej\u00f6v\u0151 kapcsolatok hull\u00e1ma megszak\u00edthatatlann\u00e1 v\u00e1lhat. Ha \u00d6n \u00fajrapr\u00f3b\u00e1lkoz\u00e1st alkalmaz az adatb\u00e1zisban exponenci\u00e1lis visszaford\u00edt\u00e1s n\u00e9lk\u00fcl, ezek \u00fajra \u00e9s \u00fajra, koherens hull\u00e1mban fognak \u00e9rkezni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f42d0b210174d4d172254603ae6b834a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cdme egy p\u00e9lda 16 PgBouncerre, amelyek 16 magot 100%-ra terhelnek.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8d048d3774c09e5b6a3fb3c7bff62084.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eljutottunk a kaszk\u00e1dos PgBouncerhez. Ez a legjobb konfigur\u00e1ci\u00f3, amelyet el\u00e9rhet\u00fcnk a Bouncerrel v\u00e9gzett terhel\u00e9s\u00fcnk alatt. A k\u00fcls\u0151 Bouncerek TCP k\u00e9zfog\u00e1sra szolg\u00e1lnak, m\u00edg a bels\u0151 Bouncerek t\u00e9nyleges poolingra, hogy ne fragment\u00e1lj\u00e1k t\u00falzottan a k\u00fcls\u0151 kapcsolatokat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3a4ee4ea46d5fe8479a5a7222ee134da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ilyen konfigur\u00e1ci\u00f3val sima \u00fajraind\u00edt\u00e1s lehets\u00e9ges. Ezeket a 18 Bouncert egyenk\u00e9nt \u00fajra lehet ind\u00edtani. De az ilyen konfigur\u00e1ci\u00f3 fenntart\u00e1sa meglehet\u0151sen neh\u00e9z. A rendszergazd\u00e1k, a DevOps \u00e9s azok, akik val\u00f3j\u00e1ban felel\u0151sek ez\u00e9rt a szerver\u00e9rt, nem fognak \u00f6r\u00fclni ennek a s\u00e9m\u00e1nak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5291fe67dbe02036f3ff8e98bdd84d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dagy t\u0171nhet, hogy az \u00f6sszes fejleszt\u00e9s\u00fcnket open source-ba lehetne helyezni, de a Bouncer nem kap j\u00f3 t\u00e1mogat\u00e1st. P\u00e9ld\u00e1ul azt a lehet\u0151s\u00e9get, hogy t\u00f6bb PgBouncert ind\u00edtsunk egy porton, egy h\u00f3nappal ezel\u0151tt commit\u00e1lt\u00e1k. A pull request e funkci\u00f3val kapcsolatban pedig m\u00e1r \u00e9vek \u00f3ta akt\u00edv. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej 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>Vagy egy m\u00e1sik p\u00e9lda. A Postgresben megszak\u00edthatja a fut\u00f3 lek\u00e9rdez\u00e9st, ha egy titkos\u00edt\u00e1st k\u00fcld egy m\u00e1sik kapcsolaton, felesleges hiteles\u00edt\u00e9s n\u00e9lk\u00fcl. De n\u00e9h\u00e1ny kliens egyszer\u0171en TCP-resetet k\u00fcld, azaz megszak\u00edtja a h\u00e1l\u00f3zati kapcsolatot. Mit fog tenni a Bouncer ebben az esetben? Semmit. Folytatni fogja a lek\u00e9rdez\u00e9s v\u00e9grehajt\u00e1s\u00e1t. Ha rengeteg kapcsolat \u00e9rkezett, amelyek kis lek\u00e9rdez\u00e9sekkel megterhelt\u00e9k az adatb\u00e1zist, akkor csak a kapcsolat Bouncerrel val\u00f3 megszak\u00edt\u00e1sa nem elegend\u0151, be kell fejezni azokat a lek\u00e9rdez\u00e9seket is, amelyek az adatb\u00e1zisban futnak. <\/p>\n<p><\/p>\n<p>Ezt jav\u00edtott\u00e1k, de ezt a probl\u00e9m\u00e1t m\u00e9g nem illesztett\u00e9k be a Bouncer upstream-be. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a9695b6d9e640a5543dc73429eb0050b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cdgy eljutottunk oda, hogy sz\u00fcks\u00e9g\u00fcnk van egy saj\u00e1t connection poolerre, amely fejl\u0151dni fog, jav\u00edtani lehet a probl\u00e9m\u00e1kat, \u00e9s term\u00e9szetesen t\u00f6bb sz\u00e1lon futhat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e755cd9b06a004f0eced1dc12fd3a6fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A t\u00f6bb sz\u00e1las m\u0171k\u00f6d\u00e9st alapvet\u0151 feladatt\u00e1 tett\u00fck. J\u00f3l kell kezelni az incoming TLS kapcsolatok \u00e1raml\u00e1s\u00e1t. <\/p>\n<p><\/p>\n<p>Ehhez ki kellett dolgoznunk egy k\u00fcl\u00f6n k\u00f6nyvt\u00e1rat, amelynek neve Machinarium, \u00e9s amely a h\u00e1l\u00f3zati kapcsolat g\u00e9pi \u00e1llapotainak le\u00edr\u00e1s\u00e1ra szolg\u00e1l sorozatos k\u00f3d form\u00e1j\u00e1ban. Ha megn\u00e9zed a libpq forr\u00e1sk\u00f3dj\u00e1t, akkor el\u00e9g bonyolult h\u00edv\u00e1sokat l\u00e1thatsz, amelyek visszaadhatj\u00e1k az eredm\u00e9nyt, \u00e9s mondhatj\u00e1k: \u201eH\u00edvj vissza k\u00e9s\u0151bb. Most IO-m van, de amikor az IO befejez\u0151dik, akkor terhel\u00e9s lesz a CPU-n.\u201d Ez egy t\u00f6bbr\u00e9teg\u0171 s\u00e9ma. A h\u00e1l\u00f3zati interakci\u00f3t \u00e1ltal\u00e1ban \u00e1llapotg\u00e9pk\u00e9nt \u00edrj\u00e1k le. Sz\u00e1mos szab\u00e1lyt\u00edpust haszn\u00e1lnak, mint p\u00e9ld\u00e1ul \u201eHa kor\u00e1bban kaptam egy N m\u00e9ret\u0171 csomag fejl\u00e9cet, akkor most N b\u00e1jtot v\u00e1rok\u201d, \u201eHa SYNC csomagot k\u00fcldtem, akkor most az eredm\u00e9ny metadatot v\u00e1rom.\u201d \u00cdgy el\u00e9g nehezen \u00e9rtelmezhet\u0151, ellentmond\u00e1sos k\u00f3d j\u00f6n l\u00e9tre, mintha egy labirintust egy vonalban bontan\u00e1nk. \u00dagy alak\u00edtottuk \u00e1t, hogy az \u00e1llapotg\u00e9p helyett a programoz\u00f3 a f\u0151 interakci\u00f3s utat norm\u00e1l imperat\u00edv k\u00f3dk\u00e9nt \u00edrja le. Csak ebben az imperat\u00edv k\u00f3dban helyeket kell besz\u00farni, ahol a v\u00e9grehajt\u00e1si sorrendet meg kell szak\u00edtani az adat\u00e1ram v\u00e1rakoz\u00e1s\u00e1val a h\u00e1l\u00f3zatr\u00f3l, \u00e1tadva a v\u00e9grehajt\u00e1si kontextust egy m\u00e1sik korutin\u00e1nak (z\u00f6ld sz\u00e1lnak). Ez a megk\u00f6zel\u00edt\u00e9s hasonl\u00f3 ahhoz, ahogyan a legjobban v\u00e1rt utat a labirintusban sorrendben r\u00f6gz\u00edtj\u00fck, majd elt\u00e9r\u0151 \u00e1gakat adunk hozz\u00e1. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a6bfb4b11961c7db3a7c7184674e3bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00e9g\u00fcl van egy sz\u00e1lunk, amely TCP accept-et v\u00e9gez, \u00e9s round-robin m\u00f3dszerrel t\u00f6bbrekm a TCP kapcsolatot a worker-ekhez. <\/p>\n<p><\/p>\n<p>Ez\u00e9rt minden klienskapcsolat mindig egy processzoron m\u0171k\u00f6dik. Ez lehet\u0151v\u00e9 teszi, hogy cache-bar\u00e1t legyen. <\/p>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl egy kicsit finom\u00edtottuk a kis csomagok egy nagy csomagba val\u00f3 \u00f6sszegy\u0171jt\u00e9s\u00e9t, hogy tehermentes\u00edts\u00fck a rendszer TCP-stack-j\u00e9t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7d740c23baecdd2f993c83cd54a0a8e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tov\u00e1bb\u00e1 jav\u00edtottuk a tranzakci\u00f3s poolingot abban az \u00e9rtelemben, hogy az Odyssey a be\u00e1ll\u00edtott konfigur\u00e1ci\u00f3val k\u00e9pes CANCEL \u00e9s ROLLBACK k\u00fcld\u00e9s\u00e9re, ha a h\u00e1l\u00f3zati kapcsolat megszakad, vagyis ha senki nem v\u00e1rja a k\u00e9r\u00e9s eredm\u00e9ny\u00e9t, az Odyssey k\u00f6zli az adatb\u00e1zissal, hogy ne pazarolja az \u00e9rt\u00e9kes er\u0151forr\u00e1sokat.<\/p>\n<p><\/p>\n<p>Ha lehets\u00e9ges, pr\u00f3b\u00e1ljuk meg meg\u0151rizni a kapcsolatokat ugyanazzal a klienssel. Ez lehet\u0151v\u00e9 teszi az application_name_add_host \u00fajratelep\u00edt\u00e9s\u00e9nek elker\u00fcl\u00e9s\u00e9t. Ha ez lehets\u00e9ges, nincsenek tov\u00e1bbi be\u00e1ll\u00edt\u00e1si param\u00e9terek, amelyek sz\u00fcks\u00e9gesek a diagn\u00f3zishoz. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb2fb7fb16d65c9ea73a8978d1eb83c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A Yandex.Cloud \u00e9rdekeit k\u00e9pviselj\u00fck. Ha managed PostgreSQL-t haszn\u00e1lsz \u00e9s van connection pooler be\u00e1ll\u00edtva, l\u00e9trehozhatsz logikai replik\u00e1ci\u00f3t kifel\u00e9, vagyis eljuthatsz t\u0151l\u00fcnk, ha \u00fagy d\u00f6ntesz, logikai replik\u00e1ci\u00f3val. A Bouncer nem k\u00fcldi tov\u00e1bb a logikai replik\u00e1ci\u00f3s folyamot kifel\u00e9. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c53defc92ebd8f3bec57ce64d97b9f72.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez egy p\u00e9lda a logikai replik\u00e1ci\u00f3 be\u00e1ll\u00edt\u00e1s\u00e1ra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a37d9d1abf288d17fa646b642e8b62ab.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl van lehet\u0151s\u00e9g\u00fcnk fizikai replik\u00e1ci\u00f3 t\u00e1mogat\u00e1s\u00e1ra kifel\u00e9. A felh\u0151ben ez term\u00e9szetesen lehetetlen, mert akkor a klaszter t\u00fal sok inform\u00e1ci\u00f3t adna mag\u00e1r\u00f3l. De a te telep\u00edt\u00e9seidben, ha fizikai replik\u00e1ci\u00f3ra van sz\u00fcks\u00e9ged a connection pooler seg\u00edts\u00e9g\u00e9vel az Odyssey-ban, ez lehets\u00e9ges. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/572934ce5b08115e57ab4b55d2153c6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az Odyssey teljesen kompatibilis monitoroz\u00e1st k\u00edn\u00e1l a PgBouncer-rel. Ugyanazt a konzolt haszn\u00e1ljuk, amely majdnem minden ugyanazt a parancsot v\u00e9grehajtja. Ha valami hi\u00e1nyzik, k\u00fcldj egy pull request-et vagy legal\u00e1bb egy issue-t a GitHub-ra, dolgozunk a sz\u00fcks\u00e9ges parancsokon. De a PgBouncer konzol f\u0151 funkci\u00f3i m\u00e1r megvannak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/451dd798fb3523a7a174ebfe00a14bc5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Term\u00e9szetesen van error forwarding is. Visszaadjuk a hib\u00e1t, amelyet az adatb\u00e1zis k\u00f6z\u00f6lt. Inform\u00e1ci\u00f3t kapsz arr\u00f3l, hogy mi\u00e9rt nem jutsz be az adatb\u00e1zisba, nem csak azt, hogy nem jutsz be. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/14b4cb0efa33a2658dfc528349a5382f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez a lehet\u0151s\u00e9g kikapcsolhat\u00f3, ha 100%-os kompatibilit\u00e1sra van sz\u00fcks\u00e9ged a PgBouncer-rel. \u00dagy is viselkedhet\u00fcnk, mint a Bouncer, csak a biztons\u00e1g kedv\u00e9\u00e9rt. <\/p>\n<p><\/p>\n<p><strong>Fejleszt\u00e9s<\/strong><\/p>\n<p><\/p>\n<p>N\u00e9h\u00e1ny sz\u00f3 az Odyssey forr\u00e1sk\u00f3dj\u00e1r\u00f3l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej 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>P\u00e9ld\u00e1ul vannak a \u201eSz\u00fcnet \/ Folytat\u00e1s\u201d parancsok. Ezeket \u00e1ltal\u00e1ban az adatb\u00e1zis friss\u00edt\u00e9s\u00e9re haszn\u00e1lj\u00e1k. Ha friss\u00edteni szeretn\u00e9 a Postgres-t, akkor meg\u00e1ll\u00edthatja a connection pooler-ben, v\u00e9grehajthatja a pg_upgrade-t, majd folytathatja. Az \u00fcgyf\u00e9l oldala sz\u00e1m\u00e1ra ez \u00fagy fog kin\u00e9zni, mintha az adatb\u00e1zis csak lelassult volna. Ezt a funkci\u00f3t a k\u00f6z\u00f6ss\u00e9g tagjai hozt\u00e1k nek\u00fcnk. M\u00e9g nem ker\u00fclt beolvaszt\u00e1sra, de hamarosan minden rendben lesz. (M\u00e1r beolvasztva)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej 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 m\u00e1r beolvasztva<\/p>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl az egyik \u00faj funkci\u00f3 a PgBouncer-ben a SCRAM Authentication t\u00e1mogat\u00e1sa, amelyet szint\u00e9n egy olyan ember hozott, aki nem dolgozik a Yandex.Cloud-n\u00e1l. Mindkett\u0151 - ez egy bonyolult funkci\u00f3 \u00e9s fontos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f39346a543c88d17728233d05c2dff19.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez\u00e9rt szeretn\u00e9nk besz\u00e9lni az Odyssey fel\u00e9p\u00edt\u00e9s\u00e9r\u0151l, h\u00e1tha \u00d6n is szeretne egy kicsit k\u00f3dot \u00edrni. <\/p>\n<p><\/p>\n<p>Van egy alap Odyssey adatb\u00e1zisunk, amely k\u00e9t f\u0151 k\u00f6nyvt\u00e1rra t\u00e1maszkodik. A Kiwi k\u00f6nyvt\u00e1r a Postgres \u00fczenetprotokoll megval\u00f3s\u00edt\u00e1sa. Azaz a nat\u00edv proto 3 a Postgres sz\u00e1m\u00e1ra - ezek a standard \u00fczenetek, amelyeket a frontendek \u00e9s backendek cser\u00e9lhetnek. Ezek a Kiwi k\u00f6nyvt\u00e1rban ker\u00fcltek megval\u00f3s\u00edt\u00e1sra.<\/p>\n<p><\/p>\n<p>A Machinarium k\u00f6nyvt\u00e1r a sz\u00e1lak megval\u00f3s\u00edt\u00e1s\u00e1t szolg\u00e1lja. Ennek a Machinarium-nak egy kis r\u00e9sze assembly nyelven \u00edr\u00f3dott. De ne agg\u00f3djon, csup\u00e1n 15 sor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cd18f250af50eabd53536b2c0d7f12b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az Odyssey architekt\u00far\u00e1ja. Van egy f\u0151 g\u00e9p, amelyben coroutines futnak. Ebben a g\u00e9pben t\u00f6rt\u00e9nik a bej\u00f6v\u0151 TCP kapcsolat elfogad\u00e1sa \u00e9s a munk\u00e1sokra val\u00f3 eloszt\u00e1s. <\/p>\n<p><\/p>\n<p>Egy munk\u00e1sen bel\u00fcl t\u00f6bb \u00fcgyf\u00e9l kezel\u0151je is m\u0171k\u00f6dhet. Ezen k\u00edv\u00fcl a f\u0151 sz\u00e1lban konzol \u00e9s crone-feladatok kezel\u00e9se zajlik, hogy elt\u00e1vol\u00edtsa a poolb\u00f3l a m\u00e1r nem sz\u00fcks\u00e9ges kapcsolatokat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7072fb20f406f2ee5788542860ccdf50.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az Odyssey tesztel\u00e9s\u00e9hez a Postgres standard tesztk\u00e9szlet\u00e9t haszn\u00e1ljuk. Egyszer\u0171en futtatjuk az install-check-et a Bouncer-en \u00e9s az Odyssey-n, \u00e9s null\u00e1s div-et kapunk. Vannak olyan tesztek, amelyek a d\u00e1tumform\u00e1tumokkal kapcsolatosak, \u00e9s teljesen elt\u00e9r\u0151en futnak a Bouncer-en \u00e9s az Odyssey-n.<\/p>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl sz\u00e1mos olyan drivert is tesztel\u00fcnk, amelyekhez saj\u00e1t tesztel\u00e9si elj\u00e1r\u00e1saik vannak. Ezeket a teszteket az Odyssey tesztel\u00e9s\u00e9re haszn\u00e1ljuk.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fb01cc9a0e9724ddcd3cc3d088afb182.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tov\u00e1bb\u00e1, a kaszk\u00e1d konfigur\u00e1ci\u00f3nk miatt k\u00fcl\u00f6nb\u00f6z\u0151 p\u00e1ros\u00edt\u00e1sokat kell teszteln\u00fcnk: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey, hogy megbizonyosodjunk arr\u00f3l, hogy ha az Odyssey valamelyik r\u00e9sz\u00e9ben tal\u00e1lhat\u00f3 a kaszk\u00e1dban, az biztosan \u00fagy m\u0171k\u00f6dik, ahogy v\u00e1rjuk. <\/p>\n<p><\/p>\n<p><strong>R\u00e1cs<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/25855b691180bca083025b9e8b611c09.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az Odyssey-t haszn\u00e1ljuk a production-ben. Nem lenne fair, ha azt mondan\u00e1m, hogy minden egyszer\u0171en m\u0171k\u00f6dik. Igen, de nem mindig. P\u00e9ld\u00e1ul a production-ben minden egyszer\u0171en m\u0171k\u00f6d\u00f6tt, azt\u00e1n j\u00f6ttek a bar\u00e1taink a PostgreSQL Professional-t\u00f3l \u00e9s mondt\u00e1k, hogy van egy memory leak-\u00fcnk. Val\u00f3ban igazuk volt, azt kijav\u00edtottuk. De ez egyszer\u0171 volt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e638d88397b32b1ca0b74c9c1b905f81.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Azt\u00e1n felfedezt\u00fck, hogy a connection pooler-ben vannak bej\u00f6v\u0151 TLS kapcsolatok \u00e9s kimen\u0151 TLS kapcsolatok. A kapcsolatokhoz sz\u00fcks\u00e9g van kliens- \u00e9s szerver tan\u00fas\u00edtv\u00e1nyokra.<\/p>\n<p><\/p>\n<p>A Bouncer \u00e9s az Odyssey szerver tan\u00fas\u00edtv\u00e1nyai \u00fajraolvass\u00e1k a pcache-t, de a kliens tan\u00fas\u00edtv\u00e1nyokat nem kell \u00fajraolvasni a pcache-b\u0151l, mert a m\u00e9retezhet\u0151 Odyssey v\u00e9g\u00fcl a tan\u00fas\u00edtv\u00e1ny olvas\u00e1si teljes\u00edtm\u00e9ny\u00e9be \u00fctk\u00f6zik. Ez meglepet\u00e9sk\u00e9nt \u00e9rt minket, mert nem azonnal t\u00f6rt\u00e9nt. Eleinte line\u00e1risan m\u00e9retez\u0151d\u00f6tt, de 20 000 bej\u00f6v\u0151 egyidej\u0171 kapcsol\u00f3d\u00e1s ut\u00e1n ez a probl\u00e9ma jelentkezett.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6cff094cd59a990e448b82fa0b1572b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A Pluggable Authentication Method egy lehet\u0151s\u00e9g, hogy a be\u00e9p\u00edtett linuxos eszk\u00f6z\u00f6kkel autentik\u00e1ljunk. A PgBouncer-ben \u00fagy val\u00f3sul meg, hogy k\u00fcl\u00f6n sz\u00e1l van a PAM-t\u00f3l \u00e9rkez\u0151 v\u00e1lasz v\u00e1rakoz\u00e1s\u00e1ra, \u00e9s van a PgBouncer f\u0151 sz\u00e1la, amely kezeli a jelenlegi kapcsolatot \u00e9s k\u00e9rheti, hogy \u00e9ljenek a PAM sz\u00e1lban. <\/p>\n<p><\/p>\n<p>Ezt nem val\u00f3s\u00edtottuk meg egy egyszer\u0171 ok miatt. Sok sz\u00e1lunk van. Minek nek\u00fcnk ez?<\/p>\n<p><\/p>\n<p>V\u00e9g\u00fcl ez probl\u00e9m\u00e1kat okozhat, mert ha van PAM autentik\u00e1ci\u00f3 \u00e9s nincs PAM autentik\u00e1ci\u00f3, akkor egy nagy PAM autentik\u00e1ci\u00f3s hull\u00e1m jelent\u0151sen k\u00e9sleltetheti a nem PAM autentik\u00e1ci\u00f3t. Ez az egyik olyan dolog, amit nem jav\u00edtottunk. De ha szeretn\u00e9, jav\u00edthat ezen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c7bd9e9980ff7298b30a59c130f03dbb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy m\u00e1sik probl\u00e9ma az volt, hogy van egy sz\u00e1lunk, ami fogad minden bej\u00f6v\u0151 kapcsolatot. Azt\u00e1n \u00e1tadja \u0151ket a worker pool-nak, ahol t\u00f6rt\u00e9nik a TLS handshake.<\/p>\n<p><\/p>\n<p>V\u00e9g\u00fcl, ha van egy koherens hull\u00e1m 20 000 h\u00e1l\u00f3zati kapcsolattal, mindet befogj\u00e1k. Az \u00fcgyf\u00e9loldalon a libpq elkezdi a timeout-ok sz\u00e1m\u00edt\u00e1s\u00e1t. Alap\u00e9rtelmezetten 3 m\u00e1sodperc \u00e1ll\u00edt\u00f3lag be van \u00e1ll\u00edtva. <\/p>\n<p><\/p>\n<p>Ha mindannyian nem tudnak egyszerre bel\u00e9pni az adatb\u00e1zisba, akkor nem tudnak bel\u00e9pni az adatb\u00e1zisba, mert mindez a nem exponenci\u00e1lis \u00fajrapr\u00f3b\u00e1lkoz\u00e1ssal lefedhet\u0151. <\/p>\n<p><\/p>\n<p>Arra jutottunk, hogy itt a PgBouncer-b\u0151l \u00e1tvett\u00fck a TCP kapcsolatok sz\u00e1m\u00e1nak korl\u00e1toz\u00e1s\u00e1nak s\u00e9m\u00e1j\u00e1t, amelyeket elfogadunk. <\/p>\n<p><\/p>\n<p>Ha azt l\u00e1tjuk, hogy a kapcsolatok elfogad\u00e1sa megt\u00f6rt\u00e9nik, de v\u00e9g\u00fcl nem tudnak k\u00e9zfogni, akkor sorba \u00e1ll\u00edtjuk \u0151ket, hogy ne fogyasszanak k\u00f6zponti processzort. Ez azt eredm\u00e9nyezi, hogy nem minden kapcsolathoz lehet p\u00e1rhuzamos k\u00e9zfog\u00e1st v\u00e9grehajtani. De legal\u00e1bb valaki be tud l\u00e9pni az adatb\u00e1zisba, m\u00e9g akkor is, ha a terhel\u00e9s el\u00e9g magas.<\/p>\n<p><\/p>\n<p><strong>Roadmap<\/strong><\/p>\n<p><\/p>\n<p>Mire szeretn\u00e9nk l\u00e1tni az Odyssey-ben a j\u00f6v\u0151ben? Mit vagyunk hajland\u00f3ak magunk fejleszteni, \u00e9s mit v\u00e1runk a k\u00f6z\u00f6ss\u00e9gt\u0151l?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4719437d80b33efc3da6572af9a4dedb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>2019 augusztus\u00e1ban.<\/strong><\/p>\n<p><\/p>\n<p>Ilyen volt az Odyssey \u00fatiterv augusztusban:<\/p>\n<p><\/p>\n<ul>\n<li>SCRAM \u00e9s PAM hiteles\u00edt\u00e9st szerett\u00fcnk volna.<\/li>\n<li>A kiv\u00e1l\u00f3 olvas\u00e1si k\u00e9r\u00e9seket a standby-ra szerett\u00fck volna ir\u00e1ny\u00edtani. <\/li>\n<li>J\u00f3 lenne online \u00fajraind\u00edt\u00e1s. <\/li>\n<li>\u00c9s lehet\u0151s\u00e9g a szerver sz\u00fcneteltet\u00e9s\u00e9re. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/455c92f92df826257c2c57dc2b034e22.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezeknek az \u00fatitervnek a fele megval\u00f3sult, \u00e9s nem mi \u00e1ltal. Ez j\u00f3. Ez\u00e9rt besz\u00e9lj\u00fck meg, mi maradt, \u00e9s adjunk hozz\u00e1 t\u00f6bbet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej 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\">Amit a forward readonly queries to standby-ba<\/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 roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0873cffd4f1ae15d9ffa6d080671051b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Alapvet\u0151en a Postgres 10-t\u0151l kezd\u0151d\u0151en lehet\u0151s\u00e9g van a csatlakoz\u00e1sok sor\u00e1n a session_attrs megad\u00e1s\u00e1ra is. A kapcsolat sor\u00e1n megnevezheted az \u00f6sszes adatb\u00e1zis hosztot \u00e9s megmondhatod, mi\u00e9rt m\u00e9sz az adatb\u00e1zisba: \u00edrni vagy csak olvasni. \u00c9s a meghajt\u00f3 automatikusan kiv\u00e1lasztja az els\u0151 lista szerinti hosztot, amely a legjobban megfelel a session_attrs k\u00f6vetelm\u00e9nyeinek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0693d1327fe5826502a01c21d05d5b4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De ennek a megk\u00f6zel\u00edt\u00e9snek a probl\u00e9m\u00e1ja az, hogy nem ellen\u0151rzi a replik\u00e1ci\u00f3s k\u00e9sleltet\u00e9st. Lehet, hogy van egy replik\u00e1d, amely elfogadhatatlan id\u0151n bel\u00fcl elmaradt a szolg\u00e1ltat\u00e1sod sz\u00e1m\u00e1ra. Ahhoz, hogy a replik\u00e1n v\u00e9grehajthat\u00f3 olvas\u00e1si k\u00e9r\u00e9sek teljes funkcionalit\u00e1s\u00e1t t\u00e1mogassuk, l\u00e9nyeg\u00e9ben meg kell t\u00e1mogatnunk az Odyssey-ben azt a lehet\u0151s\u00e9get, hogy ne m\u0171k\u00f6dj\u00f6n, amikor nem lehet olvasni. <\/p>\n<p><\/p>\n<p>Az Odyssey-nek id\u0151nk\u00e9nt be kell l\u00e9pnie az adatb\u00e1zisba, \u00e9s meg kell k\u00e9rdeznie a replik\u00e1ci\u00f3s t\u00e1vols\u00e1got a primary-t\u00f3l. \u00c9s ha ez el\u00e9rte a hat\u00e1r\u00e9rt\u00e9ket, \u00faj k\u00e9r\u00e9seket nem fogad el, \u00e9s k\u00f6z\u00f6lnie kell az \u00fcgyf\u00e9llel, hogy \u00fajra be kell ind\u00edtaniuk a kapcsolatokat, \u00e9s esetleg m\u00e1sik hosztot kell v\u00e1lasztaniuk a k\u00e9r\u00e9sek v\u00e9grehajt\u00e1s\u00e1hoz. Ez lehet\u0151v\u00e9 teszi az adatb\u00e1zis sz\u00e1m\u00e1ra, hogy gyorsabban helyre\u00e1ll\u00edtsa a replik\u00e1ci\u00f3s k\u00e9sleltet\u00e9st, \u00e9s visszat\u00e9rjen a v\u00e1laszhoz. <\/p>\n<p><\/p>\n<p>A megval\u00f3s\u00edt\u00e1s id\u0151pontj\u00e1t neh\u00e9z megmondani, mert ez ny\u00edlt forr\u00e1sk\u00f3d\u00fa. De rem\u00e9lem, nem 2,5 \u00e9v, mint a PgBouncer koll\u00e9g\u00e1ik\u00e9nt. Ezt a funkci\u00f3t szeretn\u00e9nk l\u00e1tni az Odyssey-ben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej 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\">A k\u00f6z\u00f6ss\u00e9gben az emberek k\u00e9rdezt\u00e9k a prepared statement t\u00e1mogat\u00e1s\u00e1t.<\/a><\/noindex>Jelenleg k\u00e9t m\u00f3don hozhat l\u00e9tre el\u0151k\u00e9sz\u00edtett utas\u00edt\u00e1st. El\u0151sz\u00f6r is, v\u00e9grehajthat egy SQL parancsot, nevezetesen az \u201eel\u0151kezelt\u201d utas\u00edt\u00e1st. Ahhoz, hogy meg\u00e9rts\u00fck ezt az SQL parancsot, meg kell tanulnunk meg\u00e9rteni az SQL-t a Bouncer oldal\u00e1r\u00f3l. Ez feleslegesnek t\u0171nik, mert teljes m\u00e9rt\u00e9kben egy parszert ig\u00e9nyel. Nem tudjuk minden SQL parancsot \u00e9rtelmezni. <\/p>\n<p><\/p>\n<p>De van \u00fczenetprotokoll szint\u0171 el\u0151k\u00e9sz\u00edtett utas\u00edt\u00e1s a proto3-on. \u00c9s ez az a hely, ahol inform\u00e1ci\u00f3 \u00e9rkezik arr\u00f3l, hogy mik\u00e9nt j\u00f6n l\u00e9tre az el\u0151k\u00e9sz\u00edtett utas\u00edt\u00e1s struktur\u00e1lt form\u00e1ban. T\u00e1mogathatn\u00e1nk annak meg\u00e9rt\u00e9s\u00e9t, hogy egy bizonyos szerverkapcsolaton a kliens k\u00e9rte egy el\u0151k\u00e9sz\u00edtett utas\u00edt\u00e1s l\u00e9trehoz\u00e1s\u00e1t. \u00c9s m\u00e9g ha a tranzakci\u00f3 lez\u00e1rul is, tov\u00e1bbra is meg kell tartanunk a szerver \u00e9s a kliens \u00f6sszekapcsolts\u00e1g\u00e1t. <\/p>\n<p><\/p>\n<p>De itt ellentmond\u00e1s mer\u00fcl fel a p\u00e1rbesz\u00e9dben, mert valaki arr\u00f3l besz\u00e9l, hogy meg kell \u00e9rten\u00fcnk, hogy a kliens pontosan milyen el\u0151k\u00e9sz\u00edtett utas\u00edt\u00e1st hozott l\u00e9tre, \u00e9s el kell v\u00e1lasztanunk a szerverkapcsolatot minden kliens k\u00f6z\u00f6tt, aki ezt a szerverkapcsolatot l\u00e9trehozta, azaz aki \u00edgy hozta l\u00e9tre az el\u0151k\u00e9sz\u00edtett utas\u00edt\u00e1st. <\/p>\n<p><\/p>\n<p>Andres Freund azt mondta, hogy ha egy kliens, aki m\u00e1r l\u00e9trehozott egy ilyen el\u0151k\u00e9sz\u00edtett utas\u00edt\u00e1st egy m\u00e1sik szerverkapcsolaton, hozz\u00e1d \u00e9rkezik, akkor hozd l\u00e9tre helyette. De \u00fagy t\u0171nik, hogy ez nem teljesen helyes a kliens helyett adatb\u00e1zisban v\u00e9grehajtani a lek\u00e9rdez\u00e9seket, de a fejleszt\u0151 szempontj\u00e1b\u00f3l, aki az adatb\u00e1zissal val\u00f3 interakci\u00f3s protokollt \u00edrja, hasznos lenne, ha csak kapna egy h\u00e1l\u00f3zati kapcsolatot, amely tartalmaz egy ilyen el\u0151k\u00e9sz\u00edtett lek\u00e9rdez\u00e9st. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cd56b3ad015195d86a64e52be365b16a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s van m\u00e9g egy funkci\u00f3, amit meg kell val\u00f3s\u00edtanunk. Jelenleg van egy PgBouncer kompatibilis monitorunk. Vissza tudjuk adni a lek\u00e9rdez\u00e9s v\u00e9grehajt\u00e1s\u00e1nak \u00e1tlagos idej\u00e9t. De az \u00e1tlagos id\u0151 olyan, mint a k\u00f3rh\u00e1z \u00e1tlagh\u0151m\u00e9rs\u00e9klete: valaki hideg, valaki meleg \u2013 \u00e1tlagosan mindenki eg\u00e9szs\u00e9ges. Ez nem igaz. <\/p>\n<p><\/p>\n<p>T\u00e1mogat\u00e1st kell megval\u00f3s\u00edtanunk a percentilisekhez, amelyek jelezni fogj\u00e1k, hogy vannak lass\u00fa lek\u00e9rdez\u00e9sek, amelyek er\u0151forr\u00e1sokat fogyasztanak, \u00e9s elfogadhat\u00f3bb\u00e1 tenn\u00e9k a monitoroz\u00e1st. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6f285f3eb0d79e7f25d42f0e792b85b1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A legfontosabb, hogy szeretn\u00e9m a 1.0-s verzi\u00f3t (A 1.1-es verzi\u00f3 m\u00e1r megjelent). Az a helyzet, hogy az Odyssey jelenleg 1.0rc verzi\u00f3ban van, azaz a kiad\u00e1si jel\u00f6ltben. Minden probl\u00e9ma, amit felsoroltam, pontosan e verzi\u00f3ban lett jav\u00edtva, kiv\u00e9ve a mem\u00f3ria sziv\u00e1rg\u00e1st. <\/p>\n<p><\/p>\n<p>Mit mit jelent sz\u00e1munkra az 1.0-\u00e1s verzi\u00f3? Az Odyssey-t bevezetj\u00fck a saj\u00e1t adatb\u00e1zisainkba. M\u00e1r most m\u0171k\u00f6dik az adatb\u00e1zisainkon, de amikor el\u00e9rj\u00fck az 1 000 000 k\u00e9r\u00e9st m\u00e1sodpercenk\u00e9nt, akkor azt mondhatjuk, hogy ez a kiad\u00e1si verzi\u00f3, \u00e9s ezt nevezhetj\u00fck 1.0-nak. <\/p>\n<p><\/p>\n<p>A k\u00f6z\u00f6ss\u00e9g n\u00e9h\u00e1ny tagja k\u00e9rte, hogy az 1.0-\u00e1s verzi\u00f3 tartalmazzon sz\u00fcnetet \u00e9s SCRAM-ot is. De ez azt jelenti, hogy ki kell adni a k\u00f6vetkez\u0151 verzi\u00f3t, mert sem SCRAM, sem a sz\u00fcnet nincs m\u00e9g \u00f6sszevonva. De val\u00f3sz\u00edn\u0171leg ezt a k\u00e9rd\u00e9st gyorsan meg tudjuk oldani. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: mit v\u00e1runk m\u00e9g a kapcsol\u00f3d\u00e1si pullert\u0151l. Andrej Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2f50de9f51f653a7396965239bd545e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00e1rom a pull requestjeiteket. \u00c9s szeretn\u00e9m hallani, hogy milyen probl\u00e9m\u00e1itok vannak a Bouncer-rel. Besz\u00e9lj\u00fck meg \u0151ket. Tal\u00e1n meg tudunk val\u00f3s\u00edtani olyan funkci\u00f3kat, amelyek sz\u00fcks\u00e9gesek sz\u00e1motokra. <\/p>\n<p><\/p>\n<p>Ezzel a r\u00e9szem befejez\u0151d\u00f6tt, szeretn\u00e9m hallani a v\u00e9lem\u00e9nyeteket. K\u00f6sz\u00f6n\u00f6m!<\/p>\n<p><\/p>\n<p>K\u00e9rd\u00e9sek<\/p>\n<p><\/p>\n<p><em>Ha be\u00e1ll\u00edtom az application_name-t, akkor az helyesen fog tov\u00e1bb\u00edt\u00f3dni, bele\u00e9rtve a transaction poolingot az Odyssey-ban?<\/em><\/p>\n<p><\/p>\n<p>Az Odyssey-ban vagy a Bouncer-ben?<\/p>\n<p><\/p>\n<p><em>Az Odyssey-ban. A Bouncer-ben tov\u00e1bb\u00edt\u00f3dik.<\/em> <\/p>\n<p><\/p>\n<p>A szettet megcsin\u00e1ljuk. <\/p>\n<p><\/p>\n<p><em>\u00c9s ha a val\u00f3di kapcsolatom ugr\u00e1l m\u00e1s kapcsolatok k\u00f6z\u00f6tt, akkor az \u00e1t lesz adva?<\/em><\/p>\n<p><\/p>\n<p>Minden param\u00e9tert be\u00e1ll\u00edtunk, ami a list\u00e1n szerepel. Nem tudom megmondani, hogy az application_name benne van-e a list\u00e1ban. \u00dagy t\u0171nik, hogy l\u00e1ttam. Az \u00f6sszes param\u00e9tert ugyan\u00fagy fogjuk be\u00e1ll\u00edtani. Egy k\u00e9r\u00e9s keret\u00e9ben minden be lesz \u00e1ll\u00edtva, amit az \u00fcgyf\u00e9l a startup sor\u00e1n megadott. <\/p>\n<p><\/p>\n<p><em>K\u00f6sz\u00f6n\u00f6m, Andrei, a prezent\u00e1ci\u00f3t! J\u00f3 el\u0151ad\u00e1s! \u00d6r\u00fcl\u00f6k, hogy az Odyssey minden percben egyre gyorsabban fejl\u0151dik. K\u00edv\u00e1nom, hogy folytass\u00e1tok \u00edgy tov\u00e1bb. M\u00e1r k\u00e9rt\u00fcnk t\u0151letek egy multi data-source kapcsol\u00f3d\u00e1st, hogy az Odyssey egyszerre t\u00f6bb adatb\u00e1zishoz tudjon csatlakozni, azaz master-slave, majd automatikusan a failover ut\u00e1n csatlakozzon az \u00faj masterhez.<\/em> <\/p>\n<p><\/p>\n<p>Igen, \u00fagy t\u0171nik, eml\u00e9kszem erre a vit\u00e1ra. Jelenleg van n\u00e9h\u00e1ny t\u00e1rol\u00f3. De v\u00e1lt\u00e1s k\u00f6z\u00f6tt\u00fck nincs. A saj\u00e1t oldalunkon kell lek\u00e9rdezn\u00fcnk a szervert, hogy m\u00e9g \u00e9l-e, \u00e9s meg kell \u00e9rten\u00fcnk, hogy t\u00f6rt\u00e9nt-e a failover, ki h\u00edvja meg a pg_recovery-t. Van egy standard m\u00f3dszerem, hogy meg\u00e9rts\u00fck, hogy nem a masterre \u00e9rkezt\u00fcnk. \u00c9s meg kell \u00e9rten\u00fcnk, hogy valahogy hib\u00e1kb\u00f3l vagy hogyan? Teh\u00e1t az \u00f6tlet \u00e9rdekes, besz\u00e9lget\u00fcnk r\u00f3la. \u00cdrjatok t\u00f6bb megjegyz\u00e9st. Ha van olyan munkat\u00e1rsatok, aki ismeri a C-t, akkor az remek. <\/p>\n<p><\/p>\n<p>A replik\u00e1k sk\u00e1l\u00e1z\u00e1s\u00e1val kapcsolatos k\u00e9rd\u00e9s minket is \u00e9rdekel, mivel azt szeretn\u00e9nk, hogy a replik\u00e1lt klaszterek elfogad\u00e1sa a lehet\u0151 legegyszer\u0171bb legyen az alkalmaz\u00e1sfejleszt\u0151k sz\u00e1m\u00e1ra. De itt t\u00f6bb megjegyz\u00e9st szeretn\u00e9nk, azaz hogyan lehet megval\u00f3s\u00edtani, hogyan lehet j\u00f3l megcsin\u00e1lni. <\/p>\n<p><\/p>\n<p><em>A k\u00e9rd\u00e9s szint\u00e9n a replik\u00e1kr\u00f3l sz\u00f3l. Teh\u00e1t van egy mester \u00e9s t\u00f6bb replik\u00e1ja. \u00c9s nyilv\u00e1nval\u00f3, hogy ritk\u00e1bban fordulunk a replik\u00e1hoz, mint a mesterszerverhez a kapcsolatok miatt, mert lehet elt\u00e9r\u00e9s. Azt mondtad, hogy az adatok elt\u00e9r\u00e9se olyan lehet, hogy nem felel meg az \u00fczletednek, \u00e9s nem fogsz oda l\u00e1togatni, am\u00edg nem replik\u00e1l\u00f3dik vissza. Ugyanakkor, ha hossz\u00fa ideig nem l\u00e1togattad, majd elkezdesz oda j\u00e1rni, akkor azok az adatok, amikre sz\u00fcks\u00e9ged van, nem lesznek azonnal el\u00e9rhet\u0151ek. Azaz, ha folyamatosan a mesterhez megy\u00fcnk, ott a gyors\u00edt\u00f3t\u00e1r fel van meleg\u00edtve, m\u00edg a replik\u00e1ban a gyors\u00edt\u00f3t\u00e1r kicsit le van maradva.<\/em> <\/p>\n<p><\/p>\n<p>Igen, ez igaz. A pcache-ben nem lesznek azok az adatok, amikre sz\u00fcks\u00e9g van, a real cache-ben nem lesz inform\u00e1ci\u00f3 a t\u00e1bl\u00e1kr\u00f3l, amikre sz\u00fcks\u00e9g van, a tervekben nem lesznek elemzett lek\u00e9rdez\u00e9sek, tulajdonk\u00e9ppen semmi sem lesz. <\/p>\n<p><\/p>\n<p><em>\u00c9s amikor van egy klasztered, \u00e9s \u00faj replik\u00e1t adsz hozz\u00e1, addig, am\u00edg az elindul, minden rosszul van benne, azaz n\u00f6veli a gyors\u00edt\u00f3t\u00e1r\u00e1t.<\/em> <\/p>\n<p><\/p>\n<p>\u00c9n meg\u00e9rtettem az \u00f6tletet. A helyes megk\u00f6zel\u00edt\u00e9s az lenne, hogy el\u0151sz\u00f6r egy kis sz\u00e1zal\u00e9k\u00e1t a lek\u00e9rdez\u00e9seknek a replik\u00e1ra ir\u00e1ny\u00edtsuk, hogy felmelegedjen a gyors\u00edt\u00f3t\u00e1r. Durv\u00e1n sz\u00f3lva, van egy felt\u00e9tel\u00fcnk, miszerint legfeljebb 10 m\u00e1sodperccel kell lemaradnunk a mestert\u0151l. Ezt a felt\u00e9telt nem egy hull\u00e1mban, hanem fokozatosan kellene bevezetni n\u00e9h\u00e1ny kliens sz\u00e1m\u00e1ra. <\/p>\n<p><\/p>\n<p><em>Igen, n\u00f6velni a s\u00falyt.<\/em><\/p>\n<p><\/p>\n<p>Ez j\u00f3 \u00f6tlet. De el\u0151sz\u00f6r ezt a kikapcsol\u00e1st kell megval\u00f3s\u00edtani. El\u0151sz\u00f6r ki kell kapcsolni, \u00e9s azt\u00e1n gondolkodunk, hogyan lehet bekapcsolni. Ez egy nagyszer\u0171 funkci\u00f3, hogy fokozatosan bekapcsol\u00f3djunk.<\/p>\n<p><\/p>\n<p><em>Az nginx-nek van egy ilyen lehet\u0151s\u00e9ge <code>lassan indul<\/code> a server klaszter\u00e9ben. \u00c9s fokozatosan n\u00f6veli a terhel\u00e9st.<\/em> <\/p>\n<p><\/p>\n<p>Igen, nagyszer\u0171 \u00f6tlet, kipr\u00f3b\u00e1ljuk, amikor od\u00e1ig jutunk.<\/p>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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 \u00fctemterv: mit szeretn\u00e9nk m\u00e9g a kapcsolatkezel\u0151t\u0151l. Andr\u00e9 Borodin (2019) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hu\/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":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/96515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=96515"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/96515\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/96516"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=96515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=96515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=96515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}