{"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\/sq\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019","title":{"rendered":"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6c445191705a4c96939cd094bc457a53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb raport, Andrei Borodin do t\u00eb flas\u00eb se si ata mor\u00ebn parasysh p\u00ebrvoj\u00ebn e shkall\u00ebzimit t\u00eb PgBouncer gjat\u00eb projektimit t\u00eb pool-it t\u00eb lidhjeve. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Odyssey<\/a><\/noindex>, si e vendos\u00ebn at\u00eb n\u00eb prodhim. P\u00ebr m\u00eb tep\u00ebr, do t\u00eb diskutojm\u00eb se cilat funksione t\u00eb pool-it do t\u00eb d\u00ebshironim t\u00eb shihnim n\u00eb versionet e reja: na intereson jo vet\u00ebm t\u00eb mbushim nevojat tona, por t\u00eb zhvillojm\u00eb komunitetin e p\u00ebrdoruesve. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Odisea<\/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=\"Luaj videon\" 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: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/dd2ea50b72e3d9c4e795aecbf9afdd25.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebrsh\u00ebndetje t\u00eb gjith\u00ebve! Un\u00eb quhem Andrei. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0a2f1880005bec1f61b72fb23b555adc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb Yandex, merrem me zhvillimin e bazave t\u00eb t\u00eb dh\u00ebnave open source. Dhe sot tema jon\u00eb \u00ebsht\u00eb p\u00ebr connection pooler-in e lidhjeve. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c18e7c937423d2514faa12e820e78e70.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse e dini si t\u00eb em\u00ebrtoni connection pooler-in n\u00eb rusisht, m\u00eb tregoni. Dua shum\u00eb t\u00eb gjej nj\u00eb termin teknik t\u00eb mir\u00eb q\u00eb duhet t\u00eb konsolidohet n\u00eb literatur\u00ebn teknike. <\/p>\n<p><\/p>\n<p>Tema \u00ebsht\u00eb mjaft e nd\u00ebrlikuar, sepse n\u00eb shum\u00eb baza t\u00eb dh\u00ebnash, connection pooler \u00ebsht\u00eb e integruar dhe as nuk \u00ebsht\u00eb nevoja t\u00eb dihet p\u00ebr t\u00eb. Disa konfigurime, sigurisht, ekzistojn\u00eb kudo, por n\u00eb Postgres nuk funksionon k\u00ebshtu. Dhe paralelisht (n\u00eb HighLoad++ 2019) po zhvillohet nj\u00eb prezantim nga Nikolai Samokhvalov p\u00ebr konfigurimin e k\u00ebrkesave n\u00eb Postgres. Dhe kuptoj q\u00eb k\u00ebtu erdh\u00ebn njer\u00ebz q\u00eb tashm\u00eb i kan\u00eb konfiguruar k\u00ebrkesat n\u00eb m\u00ebnyr\u00eb perfekte, dhe k\u00ebta jan\u00eb njer\u00ebz q\u00eb p\u00ebrballen me probleme sistemike m\u00eb t\u00eb rralla, t\u00eb lidhura me rrjetin dhe p\u00ebrdorimin e burimeve. Edhe n\u00eb disa raste mund t\u00eb ket\u00eb qen\u00eb mjaft e komplikuar, n\u00eb kuptimin q\u00eb problemet nuk ishin t\u00eb dukshme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/89c660dd530575e2938e6bf312b83e95.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb Yandex ka Postgres. N\u00eb Yandex.Cloud jetojn\u00eb shum\u00eb sh\u00ebrbime t\u00eb Yandex-it. Dhe ne kemi disa petabajt t\u00eb dh\u00ebnash, t\u00eb cilat gjenerojn\u00eb jo m\u00eb pak se nj\u00eb milion k\u00ebrkesa n\u00eb sekond\u00eb n\u00eb Postgres. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/288bfa37b9dcd60acd22ba48f0ef8a39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe ne ofrojm\u00eb nj\u00eb klaster mjaft tipik p\u00ebr t\u00eb gjith\u00eb sh\u00ebrbimet \u2013 kjo \u00ebsht\u00eb nodi kryesor primar, dy replika t\u00eb zakonshme (nj\u00eb sinkronike dhe nj\u00eb asinkronike), kopjimi rezerv\u00eb, dhe shkall\u00ebzimi i k\u00ebrkesave lexuese n\u00eb replik\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c249ca55bb387e25a5560324024cc523.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7do nod i klasterit \u00ebsht\u00eb nj\u00eb Postgres, n\u00eb t\u00eb cilin, p\u00ebrve\u00e7 Postgres dhe sistemeve t\u00eb monitorimit, \u00ebsht\u00eb instaluar gjithashtu connection pooler. Connection pooler p\u00ebrdoret p\u00ebr fencing dhe p\u00ebr q\u00ebllimin e tij kryesor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0e29be55cc048007db21c80bbb08a9d4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cila \u00ebsht\u00eb q\u00ebllimi kryesor i connection pooler? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e2fbbd440c2781573cb35deeef358f20.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb Postgres \u00ebsht\u00eb pranuar nj\u00eb model procesi p\u00ebr t\u00eb punuar me baz\u00ebn e t\u00eb dh\u00ebnave. Kjo do t\u00eb thot\u00eb se nj\u00eb lidhje \u00ebsht\u00eb nj\u00eb proces, nj\u00eb backend Postgres. Dhe n\u00eb k\u00ebt\u00eb backend ka shum\u00eb cache t\u00eb ndryshme, t\u00eb cilat jan\u00eb mjaft t\u00eb kushtueshme p\u00ebr t'u b\u00ebr\u00eb t\u00eb ndryshme p\u00ebr lidhje t\u00eb ndryshme. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/587498063b1af8fac4a845961c654bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, n\u00eb kodin e Postgres ka nj\u00eb masiv, i quajtur procArray. Ai p\u00ebrmban t\u00eb dh\u00ebna kryesore mbi lidhjet rrjet\u00ebrore. Dhe pothuajse t\u00eb gjitha algorithmet q\u00eb trajtojn\u00eb procArray kan\u00eb komplekse lineare, ata kalojn\u00eb p\u00ebrmes gjith\u00eb masivit t\u00eb lidhjeve rrjet\u00ebrore. Kjo \u00ebsht\u00eb nj\u00eb cik\u00ebl mjaft i shpejt\u00eb, por me numrin e madh t\u00eb lidhjeve rrjet\u00ebrore hyr\u00ebse, gjith\u00e7ka b\u00ebhet paksa m\u00eb e shtrenjt\u00eb. Dhe kur gjith\u00e7ka b\u00ebhet pak m\u00eb e shtrenjt\u00eb, n\u00eb fund mund t\u00eb paguani nj\u00eb \u00e7mim shum\u00eb t\u00eb lart\u00eb p\u00ebr numrin e madh t\u00eb lidhjeve rrjet\u00ebrore. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b534a38d0bfae7a65fc4258155a50280.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ekzistojn\u00eb 3 qasje t\u00eb mundshme:<\/p>\n<p><\/p>\n<ul>\n<li>Nga ana e aplikacionit. <\/li>\n<li>Nga ana e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. <\/li>\n<li>Dhe n\u00eb mes, dmth. t\u00eb gjitha kombinimet e mundshme. <\/li>\n<\/ul>\n<p><\/p>\n<p>Fatkeq, pooler i integruar aktualisht \u00ebsht\u00eb n\u00eb faz\u00ebn e zhvillimit. Shok\u00ebt n\u00eb kompanin\u00eb PostgreSQL Professional kryesisht po merren me k\u00ebt\u00eb. Kur do t\u00eb dal\u00eb, \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb parashikohet. Dhe n\u00eb t\u00eb v\u00ebrtet\u00eb, p\u00ebr zgjedhjen e arkitektit kemi dy zgjidhje. Kjo \u00ebsht\u00eb pool aplikacioni dhe pool proxy. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/702527a09e9fc86dd39b7fd69dcf1fc9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pool-i i aplikacionit \u00ebsht\u00eb m\u00ebnyra m\u00eb e thjesht\u00eb. Dhe pothuajse t\u00eb gjith\u00eb drejtor\u00ebt e klient\u00ebve ofrojn\u00eb nj\u00eb m\u00ebnyr\u00eb: miliardet e lidhjeve tuaja n\u00eb kod t\u00eb p\u00ebrfaq\u00ebsohen si disa dhjet\u00ebra lidhje n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7b66b9e20d22f472ca5ac39f6b9e0ba4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebtu shfaqet problemi q\u00eb n\u00eb nj\u00eb moment d\u00ebshironi t\u00eb skaloni backend-in, d\u00ebshironi ta shp\u00ebrndani at\u00eb n\u00eb disa makina virtuale. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f216fd7a8c01c2b07891e2242c48b06a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00eb pas, e kuptoni se keni gjithashtu disa zona disponueshm\u00ebrie, disa qendra t\u00eb t\u00eb dh\u00ebnave. Dhe qasja me pool-in n\u00eb an\u00ebn e klientit \u00e7on n\u00eb numra t\u00eb m\u00ebdhenj. T\u00eb m\u00ebdhenj do t\u00eb thot\u00eb rreth 10,000 lidhje. Ky \u00ebsht\u00eb kufiri q\u00eb mund t\u00eb funksionoj\u00eb normalisht. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e5bc5f284fd8ff568bbe16c3895b7ac6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse flasim p\u00ebr pooler\u00ebt e proxy, ka dy pooler q\u00eb din\u00eb t\u00eb b\u00ebjn\u00eb shum\u00eb gj\u00ebra. Ato nuk jan\u00eb vet\u00ebm pooler\u00eb. Ato jan\u00eb pooler dhe nj\u00eb funksionalitet t\u00eb mrekulluesh\u00ebm. Kjo \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.pgpool.net\/\">Pgpool<\/a><\/noindex> dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/crunchy-proxy\">Crunchy-Proxy<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p>Por fatke, kjo funksionalitet shtes\u00eb nuk \u00ebsht\u00eb e nevojshme p\u00ebr t\u00eb gjith\u00eb. Dhe kjo \u00e7on n\u00eb faktin se poolers mb\u00ebshtet vet\u00ebm pooling sesionesh, dmth nj\u00eb klient t\u00eb ardhur, nj\u00eb klient t\u00eb dal\u00eb n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave. <\/p>\n<p><\/p>\n<p>P\u00ebr ne, kjo nuk p\u00ebrshtatet aq mir\u00eb, prandaj ne p\u00ebrdorim PgBouncer, i cili implementon pooling transaksionesh, dmth lidhjet e serverit i p\u00ebrputhen lidhjeve klient\u00ebve vet\u00ebm p\u00ebr koh\u00ebn e transaksionit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e5fedbe14656d2ac2cde8d1878a950e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe p\u00ebr ngarkes\u00ebn ton\u00eb \u2013 \u00ebsht\u00eb e v\u00ebrtet\u00eb. <strong>Por ka disa probleme<\/strong>.<img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/61fd36cadcd9948d624dafa711777307.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Problemet fillojn\u00eb kur d\u00ebshironi t\u00eb diagnostikoni nj\u00eb sesion, sepse t\u00eb gjitha lidhjet e ardhshme jan\u00eb lokale. T\u00eb gjitha erdh\u00ebn nga loopback dhe si\u00e7 e keni kuptuar, \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb gjurmohet sesioni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/36108c4956c410a1b1f286a88bc393d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sigurisht, mund t\u00eb p\u00ebrdorni application_name_add_host. Ky \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb nga ana e Bouncer p\u00ebr t\u00eb shtuar IP-n\u00eb n\u00eb application_name. Por application_name vendoset me nj\u00eb lidhje shtes\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b4cec483aa776f48db7ad3966c3b78e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb grafik, ku linja e verdh\u00eb tregon k\u00ebrkesat reale, nd\u00ebrsa linja blu \u2013 k\u00ebrkesat q\u00eb hyjn\u00eb n\u00eb baz\u00eb. Dhe kjo diferenc\u00eb \u2013 \u00ebsht\u00eb pik\u00ebrisht vendosja e application_name, e cila nevojitet vet\u00ebm p\u00ebr gjurmim, por nuk \u00ebsht\u00eb krejt\u00ebsisht pa kosto. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c02ea73a6f1a2a4cd6af6c621f321ab4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, n\u00eb Bouncer nuk mund t\u00eb kufizoni nj\u00eb pool, dometh\u00ebn\u00eb numrin e lidhjeve me baz\u00ebn e t\u00eb dh\u00ebnave p\u00ebr nj\u00eb p\u00ebrdorues t\u00eb caktuar, n\u00eb nj\u00eb baz\u00eb t\u00eb caktuar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3431a463e04106066e2799aead66f571.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7far\u00eb ndikimi ka kjo? Keni nj\u00eb sh\u00ebrbim t\u00eb ngarkuar, t\u00eb shkruar n\u00eb C++ dhe af\u00ebr tij nj\u00eb sh\u00ebrbim t\u00eb vog\u00ebl n\u00eb node, i cili nuk b\u00ebn asgj\u00eb t\u00eb keqe me baz\u00ebn, por drejtuesi i tij del nga kontrolli. Ai hap 20,000 lidhje, nd\u00ebrsa gjith\u00eb e tjer\u00eb presin. Keni madje kod t\u00eb mir\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d7fa321714dc017b017945dffcf79bc6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Natyrisht, kemi shkruar nj\u00eb patch t\u00eb vog\u00ebl p\u00ebr Bouncer, i cili shtoi k\u00ebt\u00eb cil\u00ebsim, dometh\u00ebn\u00eb kufizimin e klient\u00ebve n\u00eb pool. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d58884fc5ac0f90ff8442f126972157a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo mund t\u00eb b\u00ebhej n\u00eb an\u00ebn e Postgres, dometh\u00ebn\u00eb, rolet n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave t\u00eb kufizoheshin me numrin e lidhjeve.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8d6ff70db72964ed4eae5eaa47309931.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por at\u00ebher\u00eb humbni mund\u00ebsin\u00eb p\u00ebr t\u00eb kuptuar pse nuk keni lidhje me serverin. PgBouncer nuk transmeton gabimin e lidhjes, ai gjithmon\u00eb kthen t\u00eb nj\u00ebjtin informacion. Dhe nuk mund t\u00eb kuptoni: ndoshta keni ndryshuar fjal\u00ebkalimin, ndoshta thjesht baza ka r\u00ebn\u00eb, ndoshta ka ndodhur di\u00e7ka tjet\u00ebr. Por nuk ka diagnostikim. N\u00ebse seanca nuk mund t\u00eb vendoset, nuk do t\u00eb dini pse nuk mund t\u00eb b\u00ebhet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cb3048344a94f2953bf403485d28e69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb nj\u00eb moment t\u00eb caktuar, shikoni grafikat e aplikacionit dhe shihni q\u00eb aplikacioni nuk funksionon.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e67c6680bb9a7f41242af9f9e4920916.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Shikoni n\u00eb maj\u00eb dhe shihni se Bouncer \u00ebsht\u00eb nj\u00ebqindsh. Kjo \u00ebsht\u00eb nj\u00eb pik\u00eb kthese n\u00eb jet\u00ebn e sh\u00ebrbimit. Ju kuptoni se keni p\u00ebrgatitur p\u00ebr zgjerimin e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave brenda nj\u00eb viti e gjysm\u00eb, por tani duhet t\u00eb zmadhoni pooler-in. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c140c4ba6db19cb9939c1148638fb73.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kemi arritur n\u00eb p\u00ebrfundimin se na nevojiten m\u00eb shum\u00eb PgBouncer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey 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>P\u00ebrmir\u00ebsuam pak Bouncer-in. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/97755489a25ebfe38efd56ff897bd8fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe e b\u00ebm\u00eb q\u00eb t\u00eb mund t\u00eb ngrihen disa Bouncers me rip\u00ebrdorimin e portit TCP. Tani sistemi operativ p\u00ebrcakton automatikisht lidhjet TCP t\u00eb hyrjes mes tyre me round-robin.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ac30d3f067de2a8cd66ad2325c3a3b58.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb e padukshme p\u00ebr klient\u00ebt, pra, gjith\u00e7ka duket sikur keni nj\u00eb Bouncer, por ka nj\u00eb fragmentim t\u00eb lidhjeve idle nd\u00ebrmjet Bouncers-ve t\u00eb aktivizuar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/53825f075db00b026c12013a610be456.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb nj\u00eb moment, mund t\u00eb v\u00ebreni se k\u00ebto 3 Bouncers po konsumojn\u00eb secila 100% t\u00eb nj\u00eb b\u00ebrthame. Ju nevojiten mjaft Bouncers. Pse? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/66c17883a043e157cd7ceab2c2a4e326.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sepse keni TLS. Keni nj\u00eb lidhje t\u00eb enkriptuar. Dhe n\u00ebse benchmarkoni Postgres me TLS dhe pa TLS, do t\u00eb zbuloni se numri i lidhjeve t\u00eb vendosura bie pothuajse n\u00eb dy renditje me aktivizimin e enkriptimit, sepse dor\u00ebzimi TLS konsumon burime t\u00eb procesorit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6101121ebe136af16e5eb1a484c65d66.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb krye mund t\u00eb shihni nj\u00eb num\u00ebr t\u00eb konsideruesh\u00ebm funksionesh kriptografike q\u00eb realizohen gjat\u00eb val\u00ebs s\u00eb lidhjeve t\u00eb ardhshme. Duke qen\u00eb se primary yn\u00eb mund t\u00eb kaloj\u00eb midis zonave t\u00eb disponueshm\u00ebris\u00eb, vala e lidhjeve t\u00eb ardhshme \u00ebsht\u00eb nj\u00eb situat\u00eb mjaft tipike. Kjo do t\u00eb thot\u00eb se p\u00ebr ndonj\u00eb arsye primary-i i vjet\u00ebr ishte i paq\u00ebndruesh\u00ebm, e gjith\u00eb ngarkesa iu d\u00ebrgua nj\u00eb qendr\u00eb tjet\u00ebr t\u00eb t\u00eb dh\u00ebnave. T\u00eb gjith\u00eb ata do t\u00eb vijn\u00eb nj\u00ebher\u00ebsh p\u00ebr t\u00eb p\u00ebrsh\u00ebndetur TLS. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c238ac2f511568590dc275e01c192c00.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe nj\u00eb num\u00ebr i madh i handshak\u00ebve TLS mund t\u00eb mos p\u00ebrsh\u00ebndetin m\u00eb Bouncer-in, por ta ngushtojn\u00eb at\u00eb. P\u00ebr shkak t\u00eb vones\u00ebs, vala e lidhjeve t\u00eb ardhshme mund t\u00eb b\u00ebhet e pand\u00ebrprer\u00eb. N\u00ebse keni retry n\u00eb baz\u00eb pa backoff eksponencial, ato do t\u00eb vijn\u00eb p\u00ebrs\u00ebri dhe p\u00ebrs\u00ebri si nj\u00eb val\u00eb koherente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f42d0b210174d4d172254603ae6b834a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ky \u00ebsht\u00eb nj\u00eb shembull i 16 PgBouncer q\u00eb ngarkojn\u00eb 16 b\u00ebrthama n\u00eb 100%.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8d048d3774c09e5b6a3fb3c7bff62084.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kemi arritur n\u00eb PgBouncer n\u00eb kaskad\u00eb. Kjo \u00ebsht\u00eb konfigurata m\u00eb e mir\u00eb q\u00eb mund t\u00eb arrijm\u00eb n\u00ebn ngarkes\u00ebn ton\u00eb me Bouncer. Bouncers e jashtme na sh\u00ebrbejn\u00eb p\u00ebr handshak\u00eb TCP, nd\u00ebrsa Bouncers e brendshme sh\u00ebrbejn\u00eb p\u00ebr pooling real, p\u00ebr t\u00eb mos fragmentuar shum\u00eb lidhjet e jashtme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3a4ee4ea46d5fe8479a5a7222ee134da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb konfigurim, nj\u00eb restart i qet\u00eb \u00ebsht\u00eb i mundur. Mund t\u00eb resta\u00ebrtosh k\u00ebta 18 Bouncers nj\u00eb nga nj\u00eb. Por mbajtja e nj\u00eb konfigurimi t\u00eb till\u00eb \u00ebsht\u00eb mjaft e v\u00ebshtir\u00eb. Administrator\u00ebt e sistemeve, DevOps dhe ata q\u00eb v\u00ebrtet mbajn\u00eb p\u00ebrgjegj\u00ebsi p\u00ebr k\u00ebt\u00eb server nuk do t\u00eb jen\u00eb shum\u00eb t\u00eb k\u00ebnaqur me k\u00ebt\u00eb skem\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5291fe67dbe02036f3ff8e98bdd84d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Duket se, mund t\u00eb promovojm\u00eb t\u00eb gjitha p\u00ebrmir\u00ebsimet tona n\u00eb open source, por Bouncer nuk mb\u00ebshtetet shum\u00eb mir\u00eb. P\u00ebr shembull, mund\u00ebsia p\u00ebr t\u00eb nisur disa PgBouncers n\u00eb nj\u00eb port t\u00eb vet\u00ebm u angazhua nj\u00eb muaj m\u00eb par\u00eb. Nd\u00ebrsa pull request p\u00ebr k\u00ebt\u00eb funksionalitet ishte para disa vitesh. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey 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>Ose nj\u00eb shembull tjet\u00ebr. N\u00eb Postgres, ju mund t\u00eb anuloni nj\u00eb k\u00ebrkes\u00eb n\u00eb p\u00ebrpunim duke d\u00ebrguar nj\u00eb sekret n\u00eb nj\u00eb lidhje tjet\u00ebr pa identifikim t\u00eb tep\u00ebrt. Por disa klient\u00eb d\u00ebrgojn\u00eb thjesht TCP-reset, pra nd\u00ebrpresin lidhjen rrjet. \u00c7far\u00eb do t\u00eb b\u00ebj\u00eb at\u00ebher\u00eb Bouncer? Ai nuk do t\u00eb b\u00ebj\u00eb asgj\u00eb. Ai do t\u00eb vazhdoj\u00eb t\u00eb ekzekutoj\u00eb k\u00ebrkes\u00ebn. N\u00ebse keni marr\u00eb nj\u00eb num\u00ebr t\u00eb madh lidhjesh, t\u00eb cilat me k\u00ebrkesa t\u00eb vogla kan\u00eb ngarkuar baz\u00ebn, thjesht ndarja e lidhjes nga Bouncer do t\u00eb jet\u00eb e pamjaftueshme, duhet t\u00eb p\u00ebrfundojn\u00eb gjithashtu ato k\u00ebrkesa q\u00eb po ekzekutohen n\u00eb baz\u00eb. <\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb patch-uar dhe kjo problematik\u00eb ende nuk \u00ebsht\u00eb integruar n\u00eb upstream t\u00eb Bouncer-it. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a9695b6d9e640a5543dc73429eb0050b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe k\u00ebshtu arrit\u00ebm n\u00eb p\u00ebrfundimin se na nevojitet nj\u00eb connection pooler, i cili do t\u00eb zhvillohet, do t\u00eb pritet, dhe ku do t\u00eb jet\u00eb e mundur t\u00eb rregullojm\u00eb problematikat shpejt, dhe sigurisht, q\u00eb duhet t\u00eb jet\u00eb multi-thread. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e755cd9b06a004f0eced1dc12fd3a6fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Multithreading e kemi vendosur si nj\u00eb q\u00ebllim kryesor. Na nevojitet q\u00eb t\u00eb p\u00ebrballojm\u00eb mir\u00eb flukset e lidhjeve TLS q\u00eb hyjn\u00eb. <\/p>\n<p><\/p>\n<p>P\u00ebr k\u00ebt\u00eb na nevojitej t\u00eb zhvillonim nj\u00eb bibliotek\u00eb t\u00eb ve\u00e7ant\u00eb, e quajtur Machinarium, e cila \u00ebsht\u00eb e destinuar p\u00ebr t\u00eb p\u00ebrshkruar gjendjet e makinave t\u00eb lidhjes n\u00eb rrjet si nj\u00eb kod sintaksor. N\u00ebse shqyrtoni kodin burimor t\u00eb libpq, do t\u00eb shihni thirrje mjaft t\u00eb komplikuara q\u00eb mund t'ju kthejn\u00eb nj\u00eb rezultat dhe t\u00eb thon\u00eb: \"M\u00eb thirr pak m\u00eb von\u00eb. Tani kam IO, por, kur IO t\u00eb kaloj\u00eb do t\u00eb kem ngarkes\u00eb p\u00ebr procesorin\". Dhe kjo \u00ebsht\u00eb nj\u00eb skem\u00eb me shum\u00eb nivele. Nd\u00ebrveprimi n\u00eb rrjet zakonisht p\u00ebrshkruhet si nj\u00eb makin\u00eb gjendjesh. Nj\u00eb s\u00ebr\u00eb rregullash si \"N\u00ebse kam marr\u00eb m\u00eb par\u00eb nj\u00eb titull paketi me madh\u00ebsi N, at\u00ebher\u00eb tani po pres N byte\", \"N\u00ebse kam d\u00ebrguar paket\u00ebn SYNC, at\u00ebher\u00eb tani po pres paket\u00ebn me t\u00eb dh\u00ebna rezultati\". Kjo p\u00ebrb\u00ebn nj\u00eb kod t\u00eb v\u00ebshtir\u00eb dhe kontradiktor, si\u00e7 do t\u00eb ishte kur nj\u00eb labirint shnd\u00ebrrohet n\u00eb nj\u00eb shtrirje lineare. Ne kemi b\u00ebr\u00eb q\u00eb n\u00eb vend t\u00eb nj\u00eb makine gjendjesh, programuesi t\u00eb p\u00ebrshkruaj\u00eb rrug\u00ebn kryesore t\u00eb nd\u00ebrveprimit n\u00eb form\u00ebn e nj\u00eb kodi t\u00eb zakonsh\u00ebm imperativ. Thjesht n\u00eb k\u00ebt\u00eb kod imperativ \u00ebsht\u00eb e nevojshme t\u00eb futni vende ku sekuenca e ekzekutimit duhet t\u00eb nd\u00ebrpritet p\u00ebr t\u00eb pritur t\u00eb dh\u00ebna nga rrjeti, duke kaluar kontekstin e ekzekutimit tek nj\u00eb korutin\u00eb tjet\u00ebr (thread-i i gjelbra). Ky qasje \u00ebsht\u00eb analog me at\u00eb q\u00eb ne regjistrojm\u00eb rrug\u00ebn m\u00eb t\u00eb pritur n\u00eb labirint n\u00eb m\u00ebnyr\u00eb t\u00eb drejtp\u00ebrdrejt\u00eb, dhe pastaj i shtojm\u00eb aspekte t\u00eb tjera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a6bfb4b11961c7db3a7c7184674e3bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb fund, ne kemi nj\u00eb rrjedh\u00eb q\u00eb b\u00ebn TCP accept dhe me round-robin i transferon shum\u00eb pun\u00ebtor\u00ebve lidhjen TPC. <\/p>\n<p><\/p>\n<p>Kjo b\u00ebn q\u00eb \u00e7do lidhje klienti t\u00eb punoj\u00eb gjithmon\u00eb n\u00eb nj\u00eb procesor. Dhe kjo e b\u00ebn at\u00eb m\u00eb t\u00eb favorshme p\u00ebr cache. <\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, kemi b\u00ebr\u00eb disa p\u00ebrmir\u00ebsime n\u00eb grumbullimin e paketimeve t\u00eb vogla n\u00eb nj\u00eb paket\u00eb t\u00eb madhe p\u00ebr t\u00eb leht\u00ebsuar sistemin TCP-stack.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7d740c23baecdd2f993c83cd54a0a8e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gjithashtu, kemi p\u00ebrmir\u00ebsuar pooling-un transaksional n\u00eb m\u00ebnyr\u00eb q\u00eb Odyssey, kur \u00ebsht\u00eb e konfiguruar, mund t\u00eb d\u00ebrgoj\u00eb CANCEL dhe ROLLBACK n\u00eb rast t\u00eb nd\u00ebrprerjes s\u00eb lidhjes s\u00eb rrjetit, dometh\u00ebn\u00eb, n\u00ebse askush nuk po pret p\u00ebr nj\u00eb k\u00ebrkes\u00eb, Odyssey do t'i thot\u00eb baz\u00ebs q\u00eb t\u00eb mos p\u00ebrpiqet t\u00eb ekzekutoj\u00eb at\u00eb k\u00ebrkes\u00eb q\u00eb mund t\u00eb shpenzoj\u00eb burime t\u00eb \u00e7muara.<\/p>\n<p><\/p>\n<p>Dhe, sa m\u00eb shum\u00eb t\u00eb jet\u00eb e mundur, ne ruajm\u00eb lidhjet p\u00ebr nj\u00eb klient t\u00eb nj\u00ebjt\u00eb. Kjo parandalon rivendosjen e application_name_add_host. N\u00ebse \u00ebsht\u00eb e mundur, ne nuk kemi rivendosje shtes\u00eb t\u00eb parametrave q\u00eb nevojiten p\u00ebr diagnostikim. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb2fb7fb16d65c9ea73a8978d1eb83c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne jemi t\u00eb angazhuar n\u00eb sh\u00ebrbim t\u00eb Yandex.Cloud. N\u00ebse p\u00ebrdorni managed PostgreSQL dhe keni instaluar connection pooler, mund t\u00eb krijoni replikim logjik jasht\u00eb, q\u00eb do t\u00eb thot\u00eb se mund t\u00eb largohemi nga ne, n\u00ebse d\u00ebshironi, p\u00ebrmes replikimit logjik. Bouncer nuk do ta jap\u00eb rrjedh\u00ebn e replikimit logjik p\u00ebrjashta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c53defc92ebd8f3bec57ce64d97b9f72.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ky \u00ebsht\u00eb nj\u00eb shembull i konfigurimit t\u00eb replikimit logjik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a37d9d1abf288d17fa646b642e8b62ab.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, kemi mb\u00ebshtetje p\u00ebr replikimin fizik jasht\u00eb. N\u00eb Cloud, ky \u00ebsht\u00eb, natyrisht, i pamundur, sepse n\u00eb at\u00eb rast klasteri do t\u00eb jap\u00eb shum\u00eb informacion p\u00ebr veten. Por n\u00eb instalimet tuaja, n\u00ebse keni nevoj\u00eb p\u00ebr replikim fizik p\u00ebrmes connection pooler n\u00eb Odyssey, kjo \u00ebsht\u00eb e mundur. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/572934ce5b08115e57ab4b55d2153c6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb Odyssey kemi monitorim plot\u00ebsisht kompatibil me PgBouncer. Kemi nj\u00eb konsol\u00eb t\u00eb nj\u00ebjt\u00eb q\u00eb ekzekuton pothuajse t\u00eb nj\u00ebjtat komanda. N\u00ebse ndonj\u00eb gj\u00eb mungon, d\u00ebrgoni pull request, ose t\u00eb pakt\u00ebn nj\u00eb issue n\u00eb GitHub, do ta plot\u00ebsojm\u00eb komand\u00ebn e nevojshme. Por funksionaliteti kryesor i konsol\u00ebs PgBouncer tashm\u00eb e kemi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/451dd798fb3523a7a174ebfe00a14bc5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe, sigurisht, kemi forwarding t\u00eb gabimeve. Ne do t'ju kthejm\u00eb at\u00eb gabim q\u00eb raportoi baza. Do t\u00eb merrni informacion se pse nuk po arrini n\u00eb baz\u00eb, dhe jo vet\u00ebm se nuk jeni duke u lidhur. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/14b4cb0efa33a2658dfc528349a5382f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo mund\u00ebsi \u00ebsht\u00eb e shk\u00ebputur n\u00eb rast se ju nevojitet p\u00ebrputhshm\u00ebria 100% me PgBouncer. Ne mund t\u00eb veprojm\u00eb si Bouncer, vet\u00ebm p\u00ebr rastin e nevoj\u00ebs. <\/p>\n<p><\/p>\n<p><strong>Zhvillimi<\/strong><\/p>\n<p><\/p>\n<p>Disa fjal\u00eb mbi kodin burimor t\u00eb Odyssey. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey 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\u00ebr shembull, ekzistojn\u00eb komandat \"Pause \/ Resume\". Ato zakonisht p\u00ebrdoren p\u00ebr t\u00eb p\u00ebrdit\u00ebsuar baz\u00ebn e t\u00eb dh\u00ebnave. N\u00ebse ju nevojitet t\u00eb p\u00ebrdit\u00ebsoni Postgres, mund ta nd\u00ebrprisni at\u00eb n\u00eb pool-in e lidhjeve, t\u00eb b\u00ebni pg_upgrade, e m\u00eb pas ta rinisni. Dhe nga ana e klientit do t\u00eb duket si t\u00eb ishte baza e t\u00eb dh\u00ebnave n\u00eb nj\u00eb ndalim t\u00eb p\u00ebrkohsh\u00ebm. Kjo funksionalitet \u00ebsht\u00eb sjell\u00eb nga njer\u00ebzit n\u00eb komunitet. Nuk \u00ebsht\u00eb b\u00ebr\u00eb bashk\u00eb si\u00e7 duhet akoma, por shum\u00eb shpejt do t\u00eb jet\u00eb. (Tashm\u00eb \u00ebsht\u00eb b\u00ebr\u00eb bashk\u00eb)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey 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 tashm\u00eb \u00ebsht\u00eb b\u00ebr\u00eb bashk\u00eb<\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, nj\u00eb nga funksionet e reja n\u00eb PgBouncer \u00ebsht\u00eb mb\u00ebshtetja p\u00ebr autentikimin SCRAM, t\u00eb cilin gjithashtu e solli nj\u00eb person q\u00eb nuk punon n\u00eb Yandex.Cloud. T\u00eb dyja jan\u00eb funksionalitete komplekse dhe t\u00eb r\u00ebnd\u00ebsishme. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f39346a543c88d17728233d05c2dff19.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prandaj, do t\u00eb doja t\u00eb flas p\u00ebr at\u00eb nga \u00e7far\u00eb \u00ebsht\u00eb e b\u00ebr\u00eb Odyssey, ndoshta ju gjithashtu d\u00ebshironi t\u00eb shkruani pak kode tani. <\/p>\n<p><\/p>\n<p>Ju keni nj\u00eb baz\u00eb t\u00eb p\u00ebrllogaritur Odyssey, e cila mb\u00ebshtetet n\u00eb dy biblioteka kryesore. Biblioteka Kiwi \u00ebsht\u00eb nj\u00eb realizim i protokollit t\u00eb mesazheve t\u00eb Postgres. K\u00ebshtu, proto 3 natyror n\u00eb Postgres jan\u00eb mesazhet standarde me t\u00eb cilat mund t\u00eb komunikojn\u00eb front-endet dhe back-endet. Ato jan\u00eb realizuar n\u00eb bibliotek\u00ebn Kiwi.<\/p>\n<p><\/p>\n<p>Biblioteka Machinarium \u00ebsht\u00eb nj\u00eb bibliotek\u00eb p\u00ebr realizimin e rrjedhave. Nj\u00eb fragment i vog\u00ebl i k\u00ebtij Machinarium \u00ebsht\u00eb shkruar n\u00eb assembler. Por, mos u frik\u00ebsoni, aty ka vet\u00ebm 15 rreshta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cd18f250af50eabd53536b2c0d7f12b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Arkitektura e Odyssey. Ka nj\u00eb makin\u00eb kryesore, n\u00eb t\u00eb cil\u00ebn jan\u00eb aktivizuar coroutines. N\u00eb k\u00ebt\u00eb makin\u00eb realizohet prania e lidhjeve TCP t\u00eb ardhshme dhe shp\u00ebrndarja e tyre te pun\u00ebtor\u00ebt. <\/p>\n<p><\/p>\n<p>Brenda nj\u00eb pun\u00ebtori mund t\u00eb punoj\u00eb nj\u00eb trajtues p\u00ebr disa klient\u00eb. Po ashtu, n\u00eb rrjedh\u00ebn kryesore rrotullohen konsol\u00ebn dhe p\u00ebrpunimi i detyrave crone p\u00ebr t\u00eb fshir\u00eb lidhjet q\u00eb nuk jan\u00eb m\u00eb t\u00eb nevojshme n\u00eb pool.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7072fb20f406f2ee5788542860ccdf50.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebr testimin e Odyssey p\u00ebrdoret seti standard i testeve t\u00eb Postgres. Thjesht aktivizojm\u00eb install-check p\u00ebrmes Bouncer dhe Odyssey, dhe marrim nj\u00eb div t\u00eb null. Atje disa teste q\u00eb kan\u00eb t\u00eb b\u00ebjn\u00eb me formatimin e datave nuk kalojn\u00eb n\u00eb m\u00ebnyr\u00eb t\u00eb nj\u00ebjt\u00eb n\u00eb Bouncer dhe Odyssey.<\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 k\u00ebsaj, ka shum\u00eb driver-a q\u00eb kan\u00eb testimin e tyre. Dhe testet e tyre i p\u00ebrdorim p\u00ebr t\u00eb testuar Odyssey.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fb01cc9a0e9724ddcd3cc3d088afb182.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 k\u00ebsaj, p\u00ebr shkak t\u00eb konfigurimit ton\u00eb kaskad, na duhet t\u00eb testojm\u00eb kombinime t\u00eb ndryshme: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey p\u00ebr t\u00eb qen\u00eb t\u00eb sigurt se, n\u00ebse Odyssey gjendet n\u00eb ndonj\u00eb nga pjes\u00ebt e kaskad\u00ebs, ai vazhdon t\u00eb funksionoj\u00eb ashtu si\u00e7 e presim. <\/p>\n<p><\/p>\n<p><strong>Grapa<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/25855b691180bca083025b9e8b611c09.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne p\u00ebrdorim Odyssey n\u00eb prodhim. Dhe do t\u00eb ishte e pa drejt\u00eb t\u00eb thosha se gjith\u00e7ka funksionon thjesht. Jo, pra, po, por jo gjithmon\u00eb. P\u00ebr shembull, n\u00eb prodhim gjith\u00e7ka funksiononte vet\u00ebm, pastaj erdh\u00ebn miqt\u00eb tan\u00eb nga PostgreSQL Professional dhe than\u00eb se kishe nj\u00eb memory leak. Ata v\u00ebrtet ishin, ne i korrigjuam. Por ishte e thjesht\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e638d88397b32b1ca0b74c9c1b905f81.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00eb pas zbuluam se n\u00eb connection pooler kishte lidhje TLS hyr\u00ebse dhe lidhje TLS dal\u00ebse. Dhe n\u00eb lidhje nevojiten \u00e7ertifikata klienti dhe \u00e7ertifikata serveri.<\/p>\n<p><\/p>\n<p>Certifikatat e server\u00ebve Bouncer dhe Odyssey rilexohen nga pcache, por certifikatat e klient\u00ebve nuk duhet rilexuar nga pcache, sepse Odyssey yn\u00eb i shkall\u00ebzuesh\u00ebm p\u00ebrfundimisht p\u00ebrballet me performanc\u00ebn sistemore t\u00eb leximit t\u00eb k\u00ebtij certifikati. Kjo ishte nj\u00eb surpriz\u00eb p\u00ebr ne, sepse nuk ndodhi menj\u00ebher\u00eb. Fillimisht, ai u shkall\u00ebzua n\u00eb m\u00ebnyr\u00eb lineare, dhe pas 20,000 lidhjeve t\u00eb koheve t\u00eb nj\u00ebkohshme, kjo problematik\u00eb u shfaq.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6cff094cd59a990e448b82fa0b1572b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Metoda e Autentifikimit t\u00eb Pjessh\u00ebm \u2013 \u00ebsht\u00eb mund\u00ebsia p\u00ebr t'u autentifikuar me mjete t\u00eb integrare t\u00eb Linux. N\u00eb PgBouncer, ajo realizohet n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb ket\u00eb nj\u00eb rrjedh\u00eb t\u00eb ve\u00e7ant\u00eb p\u00ebr t\u00eb pritur p\u00ebrgjigjen nga PAM dhe ka rrjedh\u00ebn kryesore PgBouncer, e cila sh\u00ebrben lidhjen e tanishme dhe mund t'i k\u00ebrkoj\u00eb atyre t\u00eb jetojn\u00eb n\u00eb rrjedh\u00ebn PAM. <\/p>\n<p><\/p>\n<p>Ne nuk e realizuam k\u00ebt\u00eb p\u00ebr nj\u00eb arsye t\u00eb thjesht\u00eb. Ne kemi shum\u00eb rrjedha. Pse na nevojitet?<\/p>\n<p><\/p>\n<p>Si pasoj\u00eb, kjo mund t\u00eb krijoj\u00eb probleme pasi, n\u00ebse keni autentifikim PAM dhe pa autentifikim PAM, nj\u00eb val\u00eb e madhe e autentifikimit PAM mund t\u00eb vonoj\u00eb ndjesh\u00ebm autentifikimin pa PAM. Kjo \u00ebsht\u00eb nj\u00eb nga ata gj\u00ebra q\u00eb nuk e kemi korrigjuar. Por n\u00ebse d\u00ebshironi ta korrigjoni, mund t\u00eb merret me k\u00ebt\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c7bd9e9980ff7298b30a59c130f03dbb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nj\u00eb tjet\u00ebr problem ishte se kemi nj\u00eb proces q\u00eb pranon t\u00eb gjitha lidhjet e ardhshme. Pastaj, ato d\u00ebrgohen n\u00eb grupin e pun\u00ebs, ku do t\u00eb ndodhi TLS handshake.<\/p>\n<p><\/p>\n<p>Si rezultat, n\u00ebse keni nj\u00eb val\u00eb koherente prej 20,000 lidhjeve t\u00eb rrjetit, t\u00eb gjitha do t\u00eb pranohen. Dhe n\u00eb an\u00ebn e klientit, libpq do t\u00eb filloj\u00eb t\u00eb regjistroj\u00eb koh\u00ebt e pritjes. P\u00ebr default, duket se aty \u00ebsht\u00eb vendosur 3 sekonda. <\/p>\n<p><\/p>\n<p>N\u00ebse t\u00eb gjitha ato nuk mund t\u00eb hyjn\u00eb n\u00eb baz\u00eb nj\u00ebkoh\u00ebsisht, at\u00ebher\u00eb ato nuk mund t\u00eb hyjn\u00eb, sepse e gjith\u00eb kjo mund t\u00eb mbulohet me nj\u00eb retry jo eksponencial. <\/p>\n<p><\/p>\n<p>Arrit\u00ebm n\u00eb p\u00ebrfundimin se kopjuam k\u00ebtu skem\u00ebn nga PgBouncer, duke pasur parasysh se kemi nj\u00eb kufizim t\u00eb numrit t\u00eb lidhjeve TCP, t\u00eb cilave u b\u00ebjm\u00eb pranimin. <\/p>\n<p><\/p>\n<p>N\u00ebse ne shohim se po pranojm\u00eb lidhjet, dhe ato p\u00ebrfundimisht nuk arrijn\u00eb t\u00eb realizojn\u00eb handshake, i vendosim ato n\u00eb radh\u00eb p\u00ebr t\u00eb mos shpenzuar burimet e procesorit. Kjo \u00e7on n\u00eb at\u00eb q\u00eb handshake-i nj\u00ebkoh\u00ebsisht nuk mund t\u00eb b\u00ebhet p\u00ebr t\u00eb gjitha lidhjet q\u00eb jan\u00eb pranuar. Por t\u00eb pakt\u00ebn dikush do t\u00eb hyj\u00eb n\u00eb baz\u00eb, edhe n\u00ebse ngarkesa \u00ebsht\u00eb mjaft e lart\u00eb.<\/p>\n<p><\/p>\n<p><strong>Plani i Rrug\u00ebs<\/strong><\/p>\n<p><\/p>\n<p>\u00c7far\u00eb do t\u00eb donim t\u00eb shihnim n\u00eb t\u00eb ardhmen nga Odyssey? \u00c7far\u00eb jemi t\u00eb gatsh\u00ebm t\u00eb zhvillojm\u00eb vet\u00eb dhe \u00e7far\u00eb presim nga komuniteti?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4719437d80b33efc3da6572af9a4dedb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>N\u00eb gusht 2019.<\/strong><\/p>\n<p><\/p>\n<p>K\u00ebtu \u00ebsht\u00eb si dukej roadmap Odyssey n\u00eb gusht:<\/p>\n<p><\/p>\n<ul>\n<li>Ne d\u00ebshironim autentifikimin SCRAM dhe PAM.<\/li>\n<li>Ne d\u00ebshironim t\u00eb \u00e7onim k\u00ebrkesat e leximit n\u00eb standby. <\/li>\n<li>Do ishte e d\u00ebshirueshme nj\u00eb restart online. <\/li>\n<li>Dhe mund\u00ebsia p\u00ebr t\u00eb b\u00ebr\u00eb nj\u00eb pauz\u00eb n\u00eb server. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/455c92f92df826257c2c57dc2b034e22.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gjasat e k\u00ebtij roadmap jan\u00eb realizuar, p\u00ebrfshir\u00eb gjysm\u00ebn e saj nga ne. Dhe kjo \u00ebsht\u00eb mir\u00eb. Prandaj, le t\u00eb diskutojm\u00eb p\u00ebr at\u00eb q\u00eb ka mbetur dhe t\u00eb shtojm\u00eb disa m\u00eb shum\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey 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\">Sa i p\u00ebrket k\u00ebrkesave t\u00eb leximit-forward n\u00eb standby<\/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: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0873cffd4f1ae15d9ffa6d080671051b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb t\u00ebr\u00ebsi, n\u00eb Postgres, q\u00eb nga versioni 10, ekziston mund\u00ebsia p\u00ebr t\u00eb specifikuar gjithashtu session_attrs gjat\u00eb lidhjes. Ju mund t\u00eb listoni t\u00eb gjitha hostet e databaz\u00ebs n\u00eb lidhje dhe t\u00eb thoni se p\u00ebrse po hyni n\u00eb databaz\u00eb: p\u00ebr t\u00eb shkruar ose vet\u00ebm p\u00ebr t\u00eb lexuar. Dhe drivari do t\u00eb zgjedh\u00eb hostin e par\u00eb sipas list\u00ebs q\u00eb i p\u00eblqen m\u00eb shum\u00eb, i cili plot\u00ebson k\u00ebrkesat e session_attrs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0693d1327fe5826502a01c21d05d5b4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por problemi i k\u00ebtij qasje \u00ebsht\u00eb se nuk kontrollon vones\u00ebn e replikimit. Mund t\u00eb keni ndonj\u00eb replik\u00eb q\u00eb ka mbetur prapa p\u00ebr nj\u00eb koh\u00eb t\u00eb papranueshme p\u00ebr sh\u00ebrbimin tuaj. P\u00ebr t\u00eb realizuar k\u00ebrkesat e leximit n\u00eb replik\u00eb n\u00eb m\u00ebnyr\u00eb funksionale, n\u00eb thelb, na nevojitet t\u00eb mb\u00ebshtesim n\u00eb Odyssey mund\u00ebsin\u00eb q\u00eb t\u00eb mos funksionoj\u00eb kur leximi nuk \u00ebsht\u00eb i mundur. <\/p>\n<p><\/p>\n<p>Odyssey duhet t\u00eb k\u00ebrkoj\u00eb her\u00eb pas here n\u00eb baz\u00eb dhe t\u00eb pyet\u00eb p\u00ebr distanc\u00ebn e replikimit nga primary. N\u00ebse arrin nj\u00eb vler\u00eb kufi, nuk duhet t\u00eb lejoj\u00eb k\u00ebrkesa t\u00eb reja n\u00eb baz\u00eb, duke i th\u00ebn\u00eb klientit se duhet t\u00eb ri-inicioj\u00eb lidhjet dhe ndoshta t\u00eb zgjedh\u00eb nj\u00eb host tjet\u00ebr p\u00ebr t\u00eb kryer k\u00ebrkesat. Kjo do t\u00eb ndihmoj\u00eb baz\u00ebn q\u00eb t\u00eb rikuperoj\u00eb m\u00eb shpejt vones\u00ebn e replikimit dhe t\u00eb kthehet s\u00ebrish n\u00eb p\u00ebrgjigje t\u00eb k\u00ebrkesave. <\/p>\n<p><\/p>\n<p>Koha e zbatimit \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb p\u00ebrcaktohet, sepse \u00ebsht\u00eb open source. Por, shpresoj q\u00eb t\u00eb mos jen\u00eb 2.5 vjet si koleg\u00ebt e PgBouncer. K\u00ebt\u00eb funksionalitet do t\u00eb doja ta shihja n\u00eb Odyssey. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey 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\">N\u00eb komunitet, njer\u00ebzit po pyesnin p\u00ebr mb\u00ebshtetje t\u00eb prepared statement.<\/a><\/noindex>Tani mund t\u00eb krijoni prepared statement n\u00eb dy m\u00ebnyra. S\u00eb pari, mund t\u00eb kryeni komand\u00ebn SQL, konkretisht \"prepared\". P\u00ebr t\u00eb kuptuar k\u00ebt\u00eb komand\u00eb SQL, duhet t\u00eb m\u00ebsojm\u00eb t\u00eb kuptojm\u00eb SQL nga ana e Bouncer. Kjo do t\u00eb ishte mbi p\u00ebrmasat, sepse na nevojitet nj\u00eb parser i plot\u00eb. Nuk mund t\u00eb analizojm\u00eb \u00e7do komand\u00eb SQL. <\/p>\n<p><\/p>\n<p>Por drejtim, ekziston nj\u00eb prepared statement n\u00eb nivelin e protokollit t\u00eb mesazheve n\u00eb proto3. Dhe ky \u00ebsht\u00eb momenti kur informacioni p\u00ebr krijimin e nj\u00eb prepared statement vjen n\u00eb nj\u00eb format t\u00eb strukturuar. Ne mund t\u00eb mb\u00ebshtesim kuptimin se n\u00eb nj\u00eb lidhje serveri, klienti k\u00ebrkoi t\u00eb krijoj\u00eb prepared statements. Edhe n\u00ebse transaksioni p\u00ebrfundon, ne duhet t\u00eb mbajm\u00eb ende lidhshm\u00ebrin\u00eb midis serverit dhe klientit. <\/p>\n<p><\/p>\n<p>Por k\u00ebtu lind nj\u00eb mosmarr\u00ebveshje n\u00eb dialog, sepse dikush flet p\u00ebr nevoj\u00ebn p\u00ebr t\u00eb kuptuar se cilat prepared statements krijoi klienti dhe p\u00ebr t\u00eb ndar\u00eb lidhjen e serverit mes t\u00eb gjith\u00eb klient\u00ebve q\u00eb krijuan k\u00ebt\u00eb lidhje serveri, pra, ata q\u00eb krijuan nj\u00eb t\u00eb till\u00eb prepared statement. <\/p>\n<p><\/p>\n<p>Andres Freund tha se n\u00ebse ju vjen nj\u00eb klient q\u00eb tashm\u00eb ka krijuar nj\u00eb t\u00eb till\u00eb prepared statement n\u00eb nj\u00eb lidhje tjet\u00ebr serveri, at\u00ebher\u00eb krijojeni p\u00ebr t\u00eb. Por, duket se \u00ebsht\u00eb paksa e gabuar t\u00eb ekzekutoni k\u00ebrkesa n\u00eb baz\u00eb t\u00eb t\u00eb dh\u00ebnave n\u00eb vend t\u00eb klientit, megjithat\u00eb nga k\u00ebndv\u00ebshtrimi i zhvilluesit q\u00eb shkruan protokollin e nd\u00ebrveprimit me baz\u00ebn e t\u00eb dh\u00ebnave, do t\u00eb ishte e dobishme n\u00ebse thjesht do t'i jepeshin nj\u00eb lidhje rrjetore q\u00eb p\u00ebrmban nj\u00eb k\u00ebrkes\u00eb t\u00eb till\u00eb t\u00eb p\u00ebrgatitur. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cd56b3ad015195d86a64e52be365b16a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe nj\u00eb funksion tjet\u00ebr q\u00eb na nevojitet p\u00ebr t'u realizuar. Aktualisht kemi monitorim q\u00eb \u00ebsht\u00eb i pajtuesh\u00ebm me PgBouncer. Mund t\u00eb kthejm\u00eb mesataren e koh\u00ebs s\u00eb ekzekutimit t\u00eb k\u00ebrkes\u00ebs. Por mesatarja \u00ebsht\u00eb si temperatura mesatare n\u00eb spital: disa jan\u00eb t\u00eb ftoht\u00eb, disa t\u00eb ngroht\u00eb - mesatarisht t\u00eb gjith\u00eb jan\u00eb t\u00eb sh\u00ebndetsh\u00ebm. Kjo nuk \u00ebsht\u00eb e v\u00ebrtet\u00eb. <\/p>\n<p><\/p>\n<p>Na nevojitet t\u00eb realizojm\u00eb mb\u00ebshtetje p\u00ebr percentilet, t\u00eb cilat do t\u00eb tregojn\u00eb se ekzistojn\u00eb k\u00ebrkesa t\u00eb ngadalta q\u00eb po shpenzojn\u00eb burime dhe do ta b\u00ebjn\u00eb monitorimin m\u00eb t\u00eb pranuesh\u00ebm. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6f285f3eb0d79e7f25d42f0e792b85b1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E r\u00ebnd\u00ebsishmja \u00ebsht\u00eb se d\u00ebshirojm\u00eb versionin 1.0 (versioni 1.1 tashm\u00eb ka dal\u00eb). Problemi \u00ebsht\u00eb se aktualisht Odyssey \u00ebsht\u00eb n\u00eb versionin 1.0rc, pra release candidate. T\u00eb gjitha problemet q\u00eb p\u00ebrmenda jan\u00eb zgjidhur me k\u00ebt\u00eb version, p\u00ebrve\u00e7 memory leak. <\/p>\n<p><\/p>\n<p>\u00c7far\u00eb do t\u00eb thot\u00eb p\u00ebr ne versioni 1.0? Ne e hedhim Odyssey n\u00eb bazat tona. Ai tashm\u00eb po funksionon n\u00eb bazat tona, por kur t\u00eb arrij\u00eb n\u00eb pik\u00ebn e 1,000,000 k\u00ebrkesave n\u00eb sekond\u00eb, at\u00ebher\u00eb mund t\u00eb themi se kjo \u00ebsht\u00eb versioni i l\u00ebshuar dhe \u00ebsht\u00eb versioni q\u00eb mund t\u00eb quhet 1.0. <\/p>\n<p><\/p>\n<p>N\u00eb komunitet disa njer\u00ebz k\u00ebrkuan q\u00eb n\u00eb versionin 1.0 t\u00eb kishte gjithashtu pauz\u00eb dhe SCRAM. Por kjo do t\u00eb thot\u00eb se do na duhej t\u00eb l\u00ebshonim nj\u00eb version t\u00eb ardhsh\u00ebm n\u00eb prodhim, pasi as SCRAM e as pauza nuk jan\u00eb akoma t\u00eb bashkuara. Por, me shum\u00eb gjasa, ky \u00e7\u00ebshtje do t\u00eb zgjidhet mjaft shpejt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Odyssey roadmap: \u00e7far\u00eb tjet\u00ebr d\u00ebshirojm\u00eb nga kolektori i lidhjeve. Andrey Borodin (2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2f50de9f51f653a7396965239bd545e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Po pres k\u00ebrkesat tuaja p\u00ebr bashkim. Po ashtu, do doja t\u00eb d\u00ebgjoj se \u00e7far\u00eb probleme keni me Bouncer. Le t\u00eb diskutojm\u00eb p\u00ebr to. Ndoshta mund t\u00eb realizojm\u00eb disa funksione q\u00eb ju nevojiten. <\/p>\n<p><\/p>\n<p>K\u00ebtu p\u00ebrfundon pjesa ime, do doja t\u00eb d\u00ebgjoj ju. Faleminderit!<\/p>\n<p><\/p>\n<p>Pyetje<\/p>\n<p><\/p>\n<p><em>N\u00ebse vendos emrin tim t\u00eb aplikacionit, do t\u00eb kaloj\u00eb sakt\u00eb, duke p\u00ebrfshir\u00eb edhe n\u00eb transaction pooling n\u00eb Odyssey?<\/em><\/p>\n<p><\/p>\n<p>N\u00eb Odyssey apo n\u00eb Bouncer?<\/p>\n<p><\/p>\n<p><em>N\u00eb Odyssey. N\u00eb Bouncer kalon.<\/em> <\/p>\n<p><\/p>\n<p>Do ta b\u00ebjm\u00eb setin. <\/p>\n<p><\/p>\n<p><em>Dhe n\u00ebse lidhja ime aktuale do t\u00eb l\u00ebviz\u00eb mes lidhjeve t\u00eb tjera, a do t\u00eb kaloj\u00eb?<\/em><\/p>\n<p><\/p>\n<p>Ne do t\u00eb realizojm\u00eb nj\u00eb set t\u00eb t\u00eb gjitha parametrave q\u00eb jan\u00eb t\u00eb listuar. Nuk mund t\u00eb them n\u00ebse n\u00eb k\u00ebt\u00eb list\u00eb \u00ebsht\u00eb application_name. M\u00eb duket se e kam par\u00eb atje. Do t\u00eb vendosim t\u00eb gjith\u00eb parametrat e nj\u00ebjt\u00eb. Me nj\u00eb k\u00ebrkes\u00eb atje do t\u00eb b\u00ebj\u00eb gjith\u00e7ka q\u00eb ishte vendosur nga klienti gjat\u00eb nisjes. <\/p>\n<p><\/p>\n<p><em>Faleminderit, Andrei, p\u00ebr prezantimin! Ishte nj\u00eb prezantim i shk\u00eblqyer! Jam i lumtur q\u00eb Odyssey po zhvillohet gjithnj\u00eb e m\u00eb shpejt. Uroj q\u00eb kjo t\u00eb vazhdoj\u00eb. Ne tashm\u00eb ju kemi k\u00ebrkuar q\u00eb t\u00eb kemi nj\u00eb lidhje multi data-source, p\u00ebr t'i mund\u00ebsuar Odyssey t\u00eb lidhet nj\u00ebkoh\u00ebsisht me baza t\u00eb ndryshme t\u00eb t\u00eb dh\u00ebnave, dmth. master slave, dhe pastaj automatikisht pas nj\u00eb failover t\u00eb lidh\u00eb me masterin e ri.<\/em> <\/p>\n<p><\/p>\n<p>Po, duket se e mbaj mend k\u00ebt\u00eb diskutim. Tani ka disa storage. Por nuk ka kalime mes tyre. Ne duhet t\u00eb monitorojm\u00eb serverin nga ana jon\u00eb, q\u00eb ai t\u00eb jet\u00eb akoma n\u00eb funksionim dhe t\u00eb kuptojm\u00eb se ka ndodhur nj\u00eb failover, kush do ta th\u00ebrras\u00eb pg_recovery. Kam nj\u00eb m\u00ebnyr\u00eb standarde p\u00ebr t\u00eb kuptuar se nuk kemi ardhur n\u00eb master. Dhe ne duhet t\u00eb kuptojm\u00eb ndonj\u00ebher\u00eb nga gabimet, apo jo? Pra, ideja \u00ebsht\u00eb interesante, ajo po diskutohet. Shkruani m\u00eb shum\u00eb komente. N\u00ebse keni duar punuese q\u00eb din\u00eb C, at\u00ebher\u00eb \u00ebsht\u00eb thjesht fantastike. <\/p>\n<p><\/p>\n<p>Pyetja e shtrirjes p\u00ebr replikat na intereson gjithashtu, sepse duam ta b\u00ebjm\u00eb adoptimin e klastereve t\u00eb replikimit sa m\u00eb t\u00eb thjesht\u00eb p\u00ebr zhvilluesit e aplikacioneve. Por k\u00ebtu do t\u00eb doja m\u00eb shum\u00eb komente, dmth. si t\u00eb b\u00ebhet sakt\u00ebsisht, si ta b\u00ebjm\u00eb mir\u00eb. <\/p>\n<p><\/p>\n<p><em>Pyetja ka t\u00eb b\u00ebj\u00eb edhe me replikat. Pra, keni nj\u00eb master dhe disa replika. \u00cbsht\u00eb e qart\u00eb se n\u00eb replika b\u00ebhet ndales\u00eb m\u00eb rrall\u00eb sesa n\u00eb master p\u00ebr lidhjet, sepse ato mund t\u00eb ken\u00eb dallime. Keni th\u00ebn\u00eb q\u00eb dallimi n\u00eb t\u00eb dh\u00ebna mund t\u00eb jet\u00eb i till\u00eb q\u00eb nuk do t\u00eb plot\u00ebsoj\u00eb biznesin tuaj dhe nuk do t\u00eb shkoni atje derisa t\u00eb riplikohet. N\u00ebse keni q\u00ebndruar p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb duke mos shkuar atje dhe m\u00eb pas filloni t\u00eb shkoni, t\u00eb dh\u00ebnat q\u00eb nevojiten nuk do t\u00eb jen\u00eb menj\u00ebher\u00eb t\u00eb disponueshme. Pra, n\u00ebse ne vazhdimisht shkojm\u00eb te master, atje cache \u00ebsht\u00eb i ngrohur, nd\u00ebrsa n\u00eb replik\u00eb cache \u00ebsht\u00eb pak m\u00eb i pasakt\u00eb.<\/em> <\/p>\n<p><\/p>\n<p>Po, kjo \u00ebsht\u00eb e v\u00ebrtet\u00eb. N\u00eb pcache nuk do t\u00eb ket\u00eb blloqe t\u00eb dh\u00ebnash q\u00eb d\u00ebshironi, n\u00eb real cache nuk do t\u00eb ket\u00eb informacion mbi tabelat q\u00eb d\u00ebshironi, n\u00eb planet nuk do t\u00eb ket\u00eb k\u00ebrkesa t\u00eb shqyrtuara, n\u00eb p\u00ebrgjith\u00ebsi nuk do t\u00eb ket\u00eb asgj\u00eb. <\/p>\n<p><\/p>\n<p><em>Dhe kur keni nj\u00eb grup t\u00eb caktuar, dhe i shtoni atje nj\u00eb replik\u00eb t\u00eb re, derisa ajo t\u00eb filloj\u00eb, n\u00eb t\u00eb \u00ebsht\u00eb situata e keqe, dometh\u00ebn\u00eb ajo po rrit cache-in e saj.<\/em> <\/p>\n<p><\/p>\n<p>E kuptojn\u00eb iden\u00eb. Qasja e duhur do t\u00eb ishte t\u00eb lan\u00e7onim nj\u00eb p\u00ebrqindje t\u00eb vog\u00ebl t\u00eb k\u00ebrkesave fillimisht n\u00eb replik\u00eb, q\u00eb do t\u00eb ngroh\u00eb cache-in. Th\u00ebn\u00eb ndryshe, kemi nj\u00eb kusht se duhet t\u00eb jemi maksimumi 10 sekonda pas masterit. Dhe ky kusht t\u00eb aktivizohet jo nj\u00ebher\u00eb, por gradualisht p\u00ebr disa klient\u00eb. <\/p>\n<p><\/p>\n<p><em>Po, rritni pesh\u00ebn.<\/em><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb ide e mir\u00eb. Por s\u00eb pari duhet t\u00eb realizohet ky \u00e7aktivizim. S\u00eb pari duhet t\u00eb ndalemi dhe pastaj t\u00eb mendojm\u00eb se si t\u00eb aktivizohemi. Kjo \u00ebsht\u00eb nj\u00eb funksion shum\u00eb i mir\u00eb p\u00ebr t\u00eb kaluar ngadal\u00eb n\u00eb aktivizim.<\/p>\n<p><\/p>\n<p><em>Ka nj\u00eb opsion t\u00eb till\u00eb n\u00eb nginx <code>fillimisht ngadal\u00eb<\/code> n\u00eb klaster p\u00ebr serverin. Dhe ai gradualisht rrit ngarkes\u00ebn.<\/em> <\/p>\n<p><\/p>\n<p>Po, ide e shk\u00eblqyer, do ta provojm\u00eb kur t\u00eb arrijm\u00eb atje.<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/522734\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0447\u043b\u0438 \u043e\u043f\u044b\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PgBouncer \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 Odyssey, \u043a\u0430\u043a \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 production. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u041e\u0434\u0438\u0441\u0441\u0435\u044f. \u0412\u0438\u0434\u0435\u043e: \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96516,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0447\u043b\u0438 \u043e\u043f\u044b\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PgBouncer \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 Odyssey, \u043a\u0430\u043a \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 production. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u041e\u0434\u0438\u0441\u0441\u0435\u044f. \u0412\u0438\u0434\u0435\u043e: \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Odyssey roadmap: \u0447\u0442\u043e \u0435\u0449\u0451 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d (2019) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0447\u043b\u0438 \u043e\u043f\u044b\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PgBouncer \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 Odyssey, \u043a\u0430\u043a \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 production. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u041e\u0434\u0438\u0441\u0441\u0435\u044f. \u0412\u0438\u0434\u0435\u043e: \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/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\udd47Plani i Odyssey: \u00e7far\u00eb tjet\u00ebr duam nga lidh\u00ebsi i lidhjeve. Andrei Borodin (2019) | ProHoster","description":"N\u00eb raport, Andrei Borodin do t\u00eb flas\u00eb p\u00ebr m\u00ebnyr\u00ebn si kan\u00eb marr\u00eb parasysh p\u00ebrvoj\u00ebn e shkall\u00ebzimit t\u00eb PgBouncer gjat\u00eb projektimit t\u00eb lidh\u00ebsit t\u00eb lidhjeve Odyssey, si e kan\u00eb lansuar at\u00eb n\u00eb production. P\u00ebrve\u00e7 k\u00ebsaj, do t\u00eb diskutojm\u00eb se cilat funksione t\u00eb lidh\u00ebsit do t\u00eb d\u00ebshironim t\u00eb shihnim n\u00eb versionet e reja: \u00ebsht\u00eb e r\u00ebnd\u00ebsishme p\u00ebr ne jo vet\u00ebm t\u00eb mbyllim nevojat tona, por edhe t\u00eb zhvillojm\u00eb komunitetin e p\u00ebrdoruesve t\u00eb Odiseut. Video: P\u00ebrsh\u00ebndetje t\u00eb gjith\u00ebve! Un\u00eb jam Andrei. N\u00eb Yandex un\u00eb merrem me","canonical_url":"https:\/\/prohoster.info\/sq\/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":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Odyssey roadmap: \u0447\u0442\u043e \u0435\u0449\u0451 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d (2019) | ProHoster","og:description":"\u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0447\u043b\u0438 \u043e\u043f\u044b\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PgBouncer \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 Odyssey, \u043a\u0430\u043a \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 production. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0443\u043b\u0435\u0440\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u041e\u0434\u0438\u0441\u0441\u0435\u044f. \u0412\u0438\u0434\u0435\u043e: \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-12T17:43:02+00:00","article:modified_time":"2020-10-12T17:43:02+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96515","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:41:30","updated":"2022-10-01 00:02:14"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/96515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=96515"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/96515\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/96516"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=96515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=96515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=96515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}