{"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\/da\/blog\/administrirovanie\/odyssey-roadmap-chto-eshhyo-my-hotim-ot-pulera-soedinenij-andrej-borodin-2019","title":{"rendered":"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/6c445191705a4c96939cd094bc457a53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I rapporten vil Andrey Borodin fort\u00e6lle, hvordan de tog erfaringerne fra skalering af PgBouncer i betragtning ved designet af connection pooleren. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Odyssey<\/a><\/noindex>, og hvordan de rullede det ud i produktion. Derudover vil vi diskutere, hvilke funktioner vi gerne vil se i nye versioner af pooleren: det er vigtigt for os ikke kun at d\u00e6kke vores egne behov, men ogs\u00e5 at udvikle brugersamfundet. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex\/odyssey\">Odyssey<\/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=\"Afspil video\" 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=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/dd2ea50b72e3d9c4e795aecbf9afdd25.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hejsa alle! Jeg hedder Andrey. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/0a2f1880005bec1f61b72fb23b555adc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hos Yandex arbejder jeg med udvikling af open source-databaser. I dag skal vi tale om connection pooler. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/c18e7c937423d2514faa12e820e78e70.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvis du ved, hvordan man overs\u00e6tter connection pooler til russisk, s\u00e5 sig det til mig. Jeg vil meget gerne finde en god teknisk term, der kan etablere sig i den tekniske litteratur. <\/p>\n<p><\/p>\n<p>Emnet er ret komplekst, fordi mange databaser har indbyggede connection poolere, som man ikke engang beh\u00f8ver at vide noget om. Der er selvf\u00f8lgelig nogle indstillinger overalt, men s\u00e5dan er det ikke i Postgres. Og parallelt (p\u00e5 HighLoad++ 2019) er der et opl\u00e6g fra Nikolai Samokhvalov om foresp\u00f8rgselsindstillinger i Postgres. Og jeg forst\u00e5r, at her er kommet folk, som allerede har indstillet deres foresp\u00f8rgsler perfekt, og det er folk, der st\u00e5r over for mere sj\u00e6ldne systemproblemer, relateret til netv\u00e6rk og ressourceudnyttelse. Nogle gange kan det v\u00e6re ret sv\u00e6rt, fordi problemerne ikke er \u00e5benlyse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/89c660dd530575e2938e6bf312b83e95.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I Yandex findes der Postgres. I Yandex.Cloud lever mange af Yandex' tjenester. Vi har flere petabyte data, som genererer ikke mindre end en million foresp\u00f8rgsler i sekundet i Postgres. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/288bfa37b9dcd60acd22ba48f0ef8a39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og vi tilbyder et temmelig standardiseret cluster til alle tjenester \u2013 dette er den prim\u00e6re node, almindelige to replikaer (synkron og asynkron), backup, og skalerer l\u00e6seforesp\u00f8rgsler p\u00e5 replikaen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/c249ca55bb387e25a5560324024cc523.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hver node i clusteren er en Postgres, hvor der udover Postgres og systemmonitorering ogs\u00e5 er installeret en connection pooler. Connection pooleren bruges til fencing og til sit prim\u00e6re form\u00e5l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/0e29be55cc048007db21c80bbb08a9d4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad er det prim\u00e6re form\u00e5l med connection pooleren? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/e2fbbd440c2781573cb35deeef358f20.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I Postgres anvendes en procesmodel, n\u00e5r man arbejder med databasen. Det betyder, at \u00e9n forbindelse svarer til \u00e9n proces, \u00e9n Postgres-backend. Og i denne backend er der mange forskellige caches, som er ret dyre at g\u00f8re forskellige for forskellige forbindelser. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/587498063b1af8fac4a845961c654bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derudover er der i Postgres-koden et array, der hedder procArray. Det indeholder de grundl\u00e6ggende data om netv\u00e6rksforbindelser. Og n\u00e6sten alle algoritmer til behandling af procArray har line\u00e6r kompleksitet, da de gennemg\u00e5r hele arrayet med netv\u00e6rksforbindelser. Det er en ret hurtig l\u00f8kke, men med et stort antal indkommende netv\u00e6rksforbindelser bliver det lidt dyrere. Og n\u00e5r det hele bliver lidt dyrere, kan man i sidste ende betale en meget h\u00f8j pris for et stort antal netv\u00e6rksforbindelser. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/b534a38d0bfae7a65fc4258155a50280.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der er 3 mulige tilgange:<\/p>\n<p><\/p>\n<ul>\n<li>P\u00e5 applikationssiden. <\/li>\n<li>P\u00e5 databasesiden. <\/li>\n<li>Og imellem, dvs. forskellige kombinationer. <\/li>\n<\/ul>\n<p><\/p>\n<p>Desv\u00e6rre er den indbyggede pooler stadig under udvikling. Vennerne i PostgreSQL Professional arbejder hovedsageligt med det. Hvorn\u00e5r det bliver tilg\u00e6ngeligt, er sv\u00e6rt at forudsige. Faktisk har vi to l\u00f8sninger tilg\u00e6ngelige for arkitekten. Det er application-side pool og proxy pool. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/702527a09e9fc86dd39b7fd69dcf1fc9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Application-side pool er den nemmeste m\u00e5de. Og n\u00e6sten alle klientdrivere giver dig en m\u00e5de: at repr\u00e6sentere millioner af dine forbindelser i koden som nogle f\u00e5 dusin forbindelser til databasen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/7b66b9e20d22f472ca5ac39f6b9e0ba4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der opst\u00e5r et problem, n\u00e5r du p\u00e5 et givent tidspunkt \u00f8nsker at skalere backend'en, n\u00e5r du \u00f8nsker at implementere den p\u00e5 mange virtuelle maskiner. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/f216fd7a8c01c2b07891e2242c48b06a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00e5 indser du, at du ogs\u00e5 har flere tilg\u00e6ngelighedszoner, flere datacentre. Og tilgangen med client side pooling f\u00f8rer til store tal. Store tal er omkring 10.000 forbindelser. Det er gr\u00e6nsen for, hvad der kan fungere ordentligt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/e5bc5f284fd8ff568bbe16c3895b7ac6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e5r vi taler om proxy poolers, er der to poolers, som kan en masse forskellige ting. De er ikke kun poolers. De er poolers + yderligere fantastisk funktionalitet. Det er <noindex><a rel=\"nofollow\" href=\"https:\/\/www.pgpool.net\/\">Pgpool<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/crunchy-proxy\">Crunchy-Proxy<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p>Men desv\u00e6rre er denne ekstra funktionalitet ikke n\u00f8dvendig for alle. Og den f\u00f8rer til, at poolers kun underst\u00f8tter session pooling, dvs. \u00e9n indkommende klient, \u00e9n udg\u00e5ende klient til databasen. <\/p>\n<p><\/p>\n<p>Til vores opgaver passer det ikke s\u00e5 godt, derfor bruger vi PgBouncer, som implementerer transaction pooling, dvs. serverforbindelser matches med klientforbindelser kun i l\u00f8bet af transaktionen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/e5fedbe14656d2ac2cde8d1878a950e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og under vores belastning \u2013 det er sandt. <strong>Men der er nogle problemer.<\/strong>.<img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/61fd36cadcd9948d624dafa711777307.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Problemerne begynder, n\u00e5r du \u00f8nsker at diagnosticere en session, fordi alle indkommende forbindelser er lokale. Alle kommer fra loopback, og det bliver sv\u00e6rt at spore sessionen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/36108c4956c410a1b1f286a88bc393d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Selvf\u00f8lgelig kan du bruge application_name_add_host. Det er en m\u00e5de for Bouncer at tilf\u00f8je en IP-adresse til application_name p\u00e5. Men application_name oprettes med en ekstra forbindelse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/b4cec483aa776f48db7ad3966c3b78e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I denne graf er den gule linje de faktiske foresp\u00f8rgsler, mens den bl\u00e5 linje viser foresp\u00f8rgsler, der flyder ind i databasen. Og denne forskel illustrerer netop indstillingen af application_name, som kun er n\u00f8dvendigt for sporing, men som ikke er gratis. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/c02ea73a6f1a2a4cd6af6c621f321ab4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Desuden kan man ikke begr\u00e6nse \u00e9n pool i Bouncer, dvs. antallet af databaserforbindelser til en bestemt bruger, til en bestemt database. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/3431a463e04106066e2799aead66f571.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad f\u00f8rer det til? Du har en belastet service skrevet i C++, og et lille serviceprogram p\u00e5 Node, der ikke forvolder databasen nogen skade, men hvor driveren g\u00e5r amok. Den \u00e5bner 20.000 forbindelser, og alt andet m\u00e5 vente. Du har endda en god kode. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/d7fa321714dc017b017945dffcf79bc6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi skrev selvf\u00f8lgelig en lille patch til Bouncer, der tilf\u00f8jede denne indstilling, dvs. gr\u00e6nsen for klienter p\u00e5 poolen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/d58884fc5ac0f90ff8442f126972157a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det kunne ogs\u00e5 g\u00f8res p\u00e5 Postgres-siden, dvs. at begr\u00e6nse rollerne i databasen til et bestemt antal forbindelser.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/8d6ff70db72964ed4eae5eaa47309931.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men s\u00e5 mister du muligheden for at forst\u00e5, hvorfor du ikke har forbindelser til serveren. PgBouncer videresender ikke forbindelsesfejl, den returnerer altid den samme information. Og du kan ikke forst\u00e5: m\u00e5ske er dit kodeord \u00e6ndret, m\u00e5ske er databasen bare nede, m\u00e5ske er der noget galt. Men der er ingen diagnosticering. Hvis sessionen ikke kan etableres, finder du ikke ud af, hvorfor det ikke er muligt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/cb3048344a94f2953bf403485d28e69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00e5 et bestemt tidspunkt ser du p\u00e5 applikationens grafer og bem\u00e6rker, at applikationen ikke fungerer.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/e67c6680bb9a7f41242af9f9e4920916.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Du kigger p\u00e5 toppen og ser, at Bouncer er enkelttr\u00e5det. Det er et vendepunkt i tjenestens liv. Du indser, at du forberedte dig p\u00e5 at skalere databasen om halvandet \u00e5r, men du skal skalere pooleren. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/4c140c4ba6db19cb9939c1148638fb73.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi er n\u00e5et frem til, at vi har brug for flere PgBouncer'ere. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" 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>Vi har lidt patched Bouncer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/97755489a25ebfe38efd56ff897bd8fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og vi har gjort det muligt at starte flere Bouncers med genbrug af TCP-porten. Og operativsystemet h\u00e5ndterer nu indg\u00e5ende TCP-forbindelser automatisk ved hj\u00e6lp af round-robin.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/ac30d3f067de2a8cd66ad2325c3a3b58.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det er gennemsigtigt for klienterne, dvs. alt ser ud som om du har \u00e9n Bouncer, men der er fragmentering af inaktive forbindelser mellem de k\u00f8rende Bouncers. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/53825f075db00b026c12013a610be456.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og p\u00e5 et bestemt tidspunkt kan du bem\u00e6rke, at disse 3 Bouncers bruger hver deres kerne 100 %. Du har brug for en hel del Bouncers. Hvorfor? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/66c17883a043e157cd7ceab2c2a4e326.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fordi du har TLS. Du har en krypteret forbindelse. Og hvis du benchmarker Postgres med TLS og uden TLS, vil du opdage, at antallet af etablerede forbindelser falder med n\u00e6sten to ordener, n\u00e5r krypteringen er aktiveret, fordi TLS handshake bruger CPU-ressourcer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/6101121ebe136af16e5eb1a484c65d66.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og \u00f8verst kan du se et ret stort antal kryptografiske funktioner, der udf\u00f8res under en b\u00f8lge af indkommende forbindelser. Da vores prim\u00e6re kan skifte mellem tilg\u00e6ngelighedszoner, er en b\u00f8lge af indkommende forbindelser en ret typisk situation. Det vil sige, at af en eller anden grund var den gamle prim\u00e6re utilg\u00e6ngelig, og al belastning blev sendt til et andet datacenter. De vil alle komme og hilse p\u00e5 TLS samtidigt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/c238ac2f511568590dc275e01c192c00.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og et stort antal TLS handshakes kan m\u00e5ske ikke hilse p\u00e5 Bouncer, men klemme dets hals. P\u00e5 grund af timeout kan b\u00f8lgen af indkommende forbindelser blive vedvarende. Hvis du har retries til databasen uden eksponentiel backoff, vil de forts\u00e6tte med at komme igen og igen i en sammenh\u00e6ngende b\u00f8lge. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/f42d0b210174d4d172254603ae6b834a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Her er et eksempel med 16 PgBouncers, der belaster 16 kerner 100 %.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/8d048d3774c09e5b6a3fb3c7bff62084.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi er n\u00e5et til det kaskadede PgBouncer. Dette er den bedste konfiguration, vi kan opn\u00e5 med vores belastning af Bouncer. Eksterne Bouncers tjener os til TCP handshake, mens interne Bouncers bruges til den reelle pooling, for at undg\u00e5 at fraktionere de eksterne forbindelser for meget.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/3a4ee4ea46d5fe8479a5a7222ee134da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I en s\u00e5dan konfiguration er en glidende genstart mulig. Du kan genstarte alle disse 18 Bouncers \u00e9n ad gangen. Men det er ret sv\u00e6rt at vedligeholde en s\u00e5dan konfiguration. Systemadministratorer, DevOps og de personer, der faktisk har ansvaret for denne server, vil ikke v\u00e6re meget glade for en s\u00e5dan skema. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/5291fe67dbe02036f3ff8e98bdd84d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det kunne synes, at vi kunne fremme alle vores forbedringer som open source, men Bouncer underst\u00f8ttes ikke s\u00e6rlig godt. For eksempel blev muligheden for at k\u00f8re flere PgBouncers p\u00e5 \u00e9n port committet for en m\u00e5ned siden. Og pull requesten med denne funktion blev sendt for flere \u00e5r siden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" 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>Eller et andet eksempel. I Postgres kan du annullere en k\u00f8rende foresp\u00f8rgsel ved at sende en hemmelighed til en anden forbindelse uden ekstra autentificering. Men nogle klienter sender blot en TCP-reset, dvs. de afbryder netv\u00e6rksforbindelsen. Hvad vil Bouncer s\u00e5 g\u00f8re? Han vil ikke g\u00f8re noget. Han vil forts\u00e6tte med at udf\u00f8re foresp\u00f8rgslen. Hvis du har modtaget et enormt antal forbindelser, som med sm\u00e5 foresp\u00f8rgsler har belastet databasen, vil det ikke v\u00e6re tilstr\u00e6kkeligt bare at afbryde forbindelsen fra Bouncer, du skal ogs\u00e5 afslutte de foresp\u00f8rgsler, der k\u00f8rer i databasen. <\/p>\n<p><\/p>\n<p>Dette blev patchet, og dette problem er stadig ikke blevet integreret i upstream Bouncer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/a9695b6d9e640a5543dc73429eb0050b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og s\u00e5ledes kom vi frem til, at vi havde brug for vores egen connection pooler, som ville udvikle sig, blive patchet, hvor vi hurtigt kunne rette problemer, og som selvf\u00f8lgelig skulle v\u00e6re multitr\u00e5det. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/e755cd9b06a004f0eced1dc12fd3a6fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Multitr\u00e5dning satte vi som en prim\u00e6r opgave. Vi har brug for at kunne h\u00e5ndtere en stor b\u00f8lge af indg\u00e5ende TLS-forbindelser. <\/p>\n<p><\/p>\n<p>For this, we had to develop a separate library called Machinarium, designed to describe the machine states of a network connection as sequential code. If you look at the source code of libpq, you'll see quite complex calls that might return a result and say, 'Call me back a bit later. Right now I have IO, but when the IO is done, I will have CPU load.' It's a multi-layered scheme. Network interactions are usually described as a state machine. Many rules like 'If I previously received a packet header of size N, then I'm now waiting for N bytes,' and 'If I sent a SYNC packet, then I'm now waiting for a metadata result packet' come into play. This results in rather complicated counterintuitive code, as if a maze were transformed into a linear unfolding. We made it so that instead of a state machine, the programmer describes the main interaction path in simple imperative code. In this imperative code, there are places where the sequence of execution needs to pause, waiting for data from the network, by passing the execution context to another coroutine (green thread). This approach is similar to writing down the most expected path in the maze in a row and then adding branches to it. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/a6bfb4b11961c7db3a7c7184674e3bc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>As a result, we have a single thread that performs a TCP accept and round-robin distributes multiple workers with the TCP connection. <\/p>\n<p><\/p>\n<p>Desuden k\u00f8rer hver klientforbindelse altid p\u00e5 \u00e9n processor, hvilket g\u00f8r den cache-venlig. <\/p>\n<p><\/p>\n<p>Vi har ogs\u00e5 foretaget lidt arbejde med at samle sm\u00e5 pakker til \u00e9n stor pakke for at aflaste det systemm\u00e6ssige TCP-stack.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/7d740c23baecdd2f993c83cd54a0a8e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derudover har vi forbedret transaktionspuljen, s\u00e5 Odyssey med den rette indstilling kan sende CANCEL og ROLLBACK i tilf\u00e6lde af afbrudt netv\u00e6rksforbindelse, dvs. hvis ingen venter p\u00e5 foresp\u00f8rgslen, vil Odyssey fort\u00e6lle databasen, at den ikke skal fors\u00f8ge at udf\u00f8re den foresp\u00f8rgsel, som kan bruge v\u00e6rdifulde ressourcer.<\/p>\n<p><\/p>\n<p>Og s\u00e5 vidt muligt bevarer vi forbindelserne til den samme klient. Dette g\u00f8r det muligt ikke at geninstallere application_name_add_host. Hvis muligt, har vi ingen yderligere geninstallation af de parametre, der er n\u00f8dvendige til diagnosticering. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/afb2fb7fb16d65c9ea73a8978d1eb83c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi arbejder for Yandex.Cloud. Hvis du bruger managed PostgreSQL og har en connection pooler indstillet, kan du oprette en logisk replikation udad, dvs. forlade os, hvis du \u00f8nsker det, ved hj\u00e6lp af logisk replikation. Bouncer vil ikke give udadg\u00e5ende str\u00f8m af logisk replikation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/c53defc92ebd8f3bec57ce64d97b9f72.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dette er et eksempel p\u00e5 ops\u00e6tning af logisk replikation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/a37d9d1abf288d17fa646b642e8b62ab.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derudover har vi support for fysisk replikation udad. I clouden er det selvf\u00f8lgelig umuligt, da klusteret s\u00e5 ville give for meget information om sig selv. Men i dine installationer, hvis du har brug for fysisk replikation gennem connection pooler i Odyssey, er det muligt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/572934ce5b08115e57ab4b55d2153c6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odyssey har fuldt kompatibel overv\u00e5gning med PgBouncer. Vi har et lignende interface, der udf\u00f8rer n\u00e6sten alle de samme kommandoer. Hvis der mangler noget, s\u00e5 send os en pull request eller i det mindste en issue p\u00e5 GitHub, s\u00e5 vi kan forfine de n\u00f8dvendige kommandoer. Men den grundl\u00e6ggende funktionalitet fra PgBouncer konsollen er allerede til stede. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/451dd798fb3523a7a174ebfe00a14bc5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og selvf\u00f8lgelig har vi fejl-videref\u00f8ring. Vi vil returnere den fejl, som databasen rapporterede. Du vil f\u00e5 information om, hvorfor du ikke kan f\u00e5 adgang til databasen, og ikke bare, at du ikke kan. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/14b4cb0efa33a2658dfc528349a5382f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Denne mulighed kan deaktiveres, hvis du har brug for 100%-kompatibilitet med PgBouncer. Vi kan opf\u00f8re os som Bouncer, bare for en sikkerheds skyld. <\/p>\n<p><\/p>\n<p><strong>Udvikling<\/strong><\/p>\n<p><\/p>\n<p>Lidt om kildekoden til Odyssey. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" 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>For eksempel er der kommandoer som \u00abPause \/ Resume\u00bb. De bruges normalt til at opdatere databasen. Hvis du har brug for at opdatere Postgres, kan du s\u00e6tte det p\u00e5 pause i connection pooler, udf\u00f8re pg_upgrade, og derefter genoptage. Og for klienten vil det se ud som om, databasen bare har v\u00e6ret langsom. Denne funktionalitet blev bragt til os af folk fra f\u00e6llesskabet. Den er endnu ikke merged, men det kommer snart. (Allerede merged)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" 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 allerede merged<\/p>\n<p><\/p>\n<p>Desuden er en af de nye funktioner i PgBouncer underst\u00f8ttelsen af SCRAM-godkendelse, som ogs\u00e5 blev bragt til os af en person, der ikke arbejder i Yandex.Cloud. Begge dele er kompleks funktionalitet og vigtige. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/f39346a543c88d17728233d05c2dff19.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derfor vil jeg gerne fort\u00e6lle om, hvad Odyssey er lavet af, hvis du ogs\u00e5 \u00f8nsker at skrive noget kode. <\/p>\n<p><\/p>\n<p>Du har en grundl\u00e6ggende Odyssey-database, som bygger p\u00e5 to hovedbiblioteker. Kiwi-biblioteket er en implementering af Postgres' meddelelsesprotokol. Det vil sige, at den native proto 3 i Postgres er de standardmeddelelser, som frontends og backends kan udveksle. De er implementeret i Kiwi-biblioteket.<\/p>\n<p><\/p>\n<p>Machinarium-biblioteket er et bibliotek til implementering af streams. Et lille fragment af dette Machinarium er skrevet i assembler. Men bekymr dig ikke, der er kun 15 linjer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/cd18f250af50eabd53536b2c0d7f12b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Odyssey-arkitektur. Der er en hovedmaskine, hvor coroutines k\u00f8rer. I denne maskine h\u00e5ndteres accept af indg\u00e5ende TCP-forbindelser og fordeling til workers. <\/p>\n<p><\/p>\n<p>Inden i \u00e9n worker kan der k\u00f8re en behandler for flere klienter. Desuden k\u00f8rer konsollen og h\u00e5ndteringen af crone-opgaver til at fjerne forbindelser, der ikke l\u00e6ngere er n\u00f8dvendige i poolen, i hovedtr\u00e5den.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/7072fb20f406f2ee5788542860ccdf50.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Til testning af Odyssey bruges et standard s\u00e6t tests fra Postgres. Vi k\u00f8rer blot install-check via Bouncer og via Odyssey, og vi f\u00e5r en nul div. Der er flere tests, hvor formatering af datoer ikke best\u00e5et pr\u00e6cis ens i Bouncer og Odyssey.<\/p>\n<p><\/p>\n<p>Derudover er der mange drivere, som har deres test. Og deres tests bruger vi til at teste Odyssey.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/fb01cc9a0e9724ddcd3cc3d088afb182.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Desuden p\u00e5 grund af vores kaskadekonfiguration er vi n\u00f8dt til at teste forskellige kombinationer: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey for at v\u00e6re sikre p\u00e5, at hvis Odyssey optr\u00e6der i en af delene i kaskaden, vil det stadig fungere som forventet. <\/p>\n<p><\/p>\n<p><strong>Rive<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/25855b691180bca083025b9e8b611c09.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi bruger Odyssey i produktionen. Og det ville v\u00e6re uretf\u00e6rdigt at sige, at alt bare fungerer. Nej, alts\u00e5 ja, men ikke altid. For eksempel fungerede alt bare i produktionen, s\u00e5 kom vores venner fra PostgreSQL Professional og sagde, at vi har et hukommelsesl\u00e6kkage. De havde ret, og vi fik det rettet. Men det var bare. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/e638d88397b32b1ca0b74c9c1b905f81.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Senere opdagede vi, at der er indg\u00e5ende TLS-forbindelser og udg\u00e5ende TLS-forbindelser i connection pooleren. Og der kr\u00e6ves klientcertifikater og servercertifikater i forbindelserne.<\/p>\n<p><\/p>\n<p>Servercertifikaterne Bouncer og Odyssey genl\u00e6ser deres pcache, men klientcertifikaterne skal ikke genl\u00e6ses fra pcache, fordi vores skalerbare Odyssey til sidst st\u00f8der p\u00e5 systemets l\u00e6seevne for dette certifikat. Det kom som en overraskelse for os, fordi det ikke satte sig fast med det samme. F\u00f8rst skalerede det line\u00e6rt, og efter 20.000 samtidige indg\u00e5ende forbindelser blev dette problem synligt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/6cff094cd59a990e448b82fa0b1572b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pluggable Authentication Method er muligheden for at autentificere sig med de indbyggede Linux-midler. I PgBouncer er det implementeret s\u00e5dan, at der er en separat tr\u00e5d, der venter p\u00e5 svar fra PAM, og der er hovedtr\u00e5den PgBouncer, som betjener den aktuelle forbindelse og kan bede dem om at vente i PAM-tr\u00e5den. <\/p>\n<p><\/p>\n<p>Vi besluttede ikke at implementere dette af en simpel grund. Vi har jo mange tr\u00e5de. Hvorfor skal vi have dette?<\/p>\n<p><\/p>\n<p>I sidste ende kan det skabe problemer, hvis du har PAM-autentificering og ikke-PAM-autentificering, s\u00e5 kan en stor b\u00f8lge af PAM-autentificering betydeligt forsinke ikke-PAM-autentificering. Det er en af de ting, vi ikke har rettet. Men hvis du \u00f8nsker at rette dette, kan du tage fat p\u00e5 det. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/c7bd9e9980ff7298b30a59c130f03dbb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En anden faldgrube var, at vi har \u00e9n tr\u00e5d, der accepterer alle indg\u00e5ende forbindelser. Og derefter overf\u00f8rer dem til worker pool, hvor TLS handshake vil finde sted.<\/p>\n<p><\/p>\n<p>I sidste ende, hvis du har en sammenh\u00e6ngende b\u00f8lge af 20.000 netv\u00e6rksforbindelser, vil de alle blive accepteret. Og p\u00e5 klientsiden vil libpq begynde at t\u00e6lle ned til tidsafbrud. Som standard ser det ud til, at der er 3 sekunder. <\/p>\n<p><\/p>\n<p>Hvis de alle ikke kan f\u00e5 adgang til databasen samtidigt, kan de ikke f\u00e5 adgang til databasen, fordi alt dette kan d\u00e6kkes af ikke-eksponentiel retry. <\/p>\n<p><\/p>\n<p>Vi kom frem til, at vi her kopierede skemaet fra PgBouncer med det, at vi har throttling af antallet af TCP-forbindelser, som vi accepterer. <\/p>\n<p><\/p>\n<p>Hvis vi ser, at vi accepterer forbindelser, men de ikke n\u00e5r at fuldf\u00f8re handshake, s\u00e6tter vi dem i k\u00f8, s\u00e5 de ikke bruger CPU-ressourcer. Det betyder, at samtidig handshake muligvis ikke kan udf\u00f8res for alle forbindelser, der kom. Men i det mindste kommer nogen ind i databasen, selvom belastningen er ret h\u00f8j.<\/p>\n<p><\/p>\n<p><strong>Roadmap<\/strong><\/p>\n<p><\/p>\n<p>Hvad vil vi gerne se i fremtiden i Odyssey? Hvad er vi klar til selv at udvikle, og hvad forventer vi fra f\u00e6llesskabet?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/4719437d80b33efc3da6572af9a4dedb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>I august 2019.<\/strong><\/p>\n<p><\/p>\n<p>S\u00e5dan s\u00e5 roadmappen for Odyssey ud i august:<\/p>\n<p><\/p>\n<ul>\n<li>Vi \u00f8nskede SCRAM og PAM autentificering.<\/li>\n<li>Vi \u00f8nskede at forwarde l\u00e6seanmodninger til standby. <\/li>\n<li>Vi ville gerne have online-genstart. <\/li>\n<li>Og muligheden for at s\u00e6tte serveren p\u00e5 pause. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/455c92f92df826257c2c57dc2b034e22.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Halvdelen af denne roadmap er udf\u00f8rt, og det er ikke os. Og det er godt. S\u00e5 lad os diskutere, hvad der er tilbage, og tilf\u00f8je mere. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" 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\">Hvad ang\u00e5r forward read-only queries til 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=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/0873cffd4f1ae15d9ffa6d080671051b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I princippet, i Postgres, siden version 10, er der mulighed for at angive session_attrs ved oprettelse af forbindelse. Du kan liste alle databaserne i forbindelsen og angive, hvorfor du g\u00e5r til databasen: for at skrive eller kun l\u00e6se. Og driveren v\u00e6lger selv den f\u00f8rste host p\u00e5 listen, som opfylder session_attrs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/0693d1327fe5826502a01c21d05d5b4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men problemet med denne tilgang er, at den ikke kontrollerer replicationslag. Du kan have en replika, der er forsinket i en uacceptabel tid for din service. For at kunne udf\u00f8re l\u00e6seanmodninger fuldt ud p\u00e5 replikken, skal vi reelt underst\u00f8tte muligheden for i Odyssey ikke at arbejde, n\u00e5r det ikke kan l\u00e6ses. <\/p>\n<p><\/p>\n<p>Odyssey skal af og til kontakte databasen og sp\u00f8rge om replikationsafstanden fra primary. Og hvis det n\u00e5r en gr\u00e6nsev\u00e6rdi, skal nye foresp\u00f8rgsler blokeres, fort\u00e6lle klienten, at de skal geninitiativere forbindelserne og muligvis v\u00e6lge en anden host til at udf\u00f8re anmodningerne. Dette vil g\u00f8re det muligt for databasen hurtigt at genoprette replicationslaget og igen v\u00e6re i stand til at svare p\u00e5 anmodninger. <\/p>\n<p><\/p>\n<p>Det er sv\u00e6rt at angive en tidsramme for implementeringen, fordi det er open source. Men jeg h\u00e5ber, det ikke tager 2,5 \u00e5r som hos kollegerne fra PgBouncer. Denne funktion ville jeg gerne se i Odyssey. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" 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\">I f\u00e6llesskabet har folk spurgt om st\u00f8tte til prepared statement.<\/a><\/noindex>. Du kan nu oprette prepared statements p\u00e5 to m\u00e5der. For det f\u00f8rste kan du udf\u00f8re SQL-kommandoen, nemlig \"prepared\". For at forst\u00e5 denne SQL-kommando, skal vi l\u00e6re at forst\u00e5 SQL fra Bouncer-siden. Det ville v\u00e6re overkill, fordi vi har brug for en fuld parser. Vi kan ikke parse hver SQL-kommando. <\/p>\n<p><\/p>\n<p>Men der er prepared statements p\u00e5 niveauet for meddelelsesprotokol p\u00e5 proto3. Og det er her, informationen om, at der oprettes et prepared statement, kommer i struktureret form. Vi kunne st\u00f8tte forst\u00e5elsen af, at en klient har bedt om at oprette prepared statements p\u00e5 en eller anden serverforbindelse. Og selvom transaktionen er afsluttet, skal vi stadig opretholde sammenh\u00e6ngen mellem serveren og klienten. <\/p>\n<p><\/p>\n<p>Men her opst\u00e5r der et misforhold i dialogen, fordi nogen siger, at det er n\u00f8dvendigt at forst\u00e5, hvilken pr\u00e6cist prepared statement klienten har oprettet, og at dele serverforbindelsen mellem alle klienter, der har oprettet denne serverforbindelse, dvs. hvilke der har oprettet et s\u00e5dant prepared statement. <\/p>\n<p><\/p>\n<p>Andres Freund sagde, at hvis en klient kommer til dig, som allerede har oprettet et s\u00e5dant prepared statement i en anden serverforbindelse, s\u00e5 opret det for ham. Men det virker lidt forkert at udf\u00f8re foresp\u00f8rgsler i databasen i stedet for klienten, men set fra en udviklers perspektiv, der skriver protokollen for interaktion med databasen, ville det v\u00e6re praktisk, hvis han bare fik en netv\u00e6rksforbindelse, hvor der var en s\u00e5dan forberedt foresp\u00f8rgsel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/cd56b3ad015195d86a64e52be365b16a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og endnu en funktion, som vi skal implementere. Vi har nu overv\u00e5gning, der er kompatibel med PgBouncer. Vi kan returnere den gennemsnitlige udf\u00f8relsestid for foresp\u00f8rgslen. Men den gennemsnitlige tid er som gennemsnitstemperaturen p\u00e5 hospitalet: nogen er kolde, nogen er varme \u2013 i gennemsnit er alle raske. Det er ikke sandt. <\/p>\n<p><\/p>\n<p>Vi skal implementere st\u00f8tte til percentiler, som ville angive, at der er langsomme foresp\u00f8rgsler, der forbruger ressourcer, og g\u00f8re overv\u00e5gningen mere acceptabel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/6f285f3eb0d79e7f25d42f0e792b85b1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det vigtigste er, at vi \u00f8nsker version 1.0 (Version 1.1 er allerede udgivet). Faktisk er Odyssey i \u00f8jeblikket i version 1.0rc, dvs. release candidate. Og alle de problemer, jeg har n\u00e6vnt, blev l\u00f8st med netop den version, bortset fra memory leak. <\/p>\n<p><\/p>\n<p>Hvad betyder version 1.0 for os? Vi ruller Odyssey ud p\u00e5 vores databaser. Det fungerer allerede nu p\u00e5 vores systemer, men n\u00e5r det n\u00e5r 1.000.000 foresp\u00f8rgsler i sekundet, kan vi sige, at det er en release-version, og det er den version, der kan kaldes 1.0. <\/p>\n<p><\/p>\n<p>I f\u00e6llesskabet har flere bedt om, at version 1.0 ogs\u00e5 inkluderer pause og SCRAM. Men det vil betyde, at vi skal rulle den n\u00e6ste version ud i produktion, fordi hverken SCRAM eller pause er blevet merged endnu. Men det er sandsynligvis et sp\u00f8rgsm\u00e5l, der vil blive l\u00f8st hurtigt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\ud83e\udd47Windows 10 + Linux. Ops\u00e6tning af GUI KDE Plasma for Ubuntu 20.04 i WSL2. Trinvist vejledning | ProHoster\" src=\"\/wp-content\/uploads\/2020\/10\/2f50de9f51f653a7396965239bd545e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jeg venter p\u00e5 dine pull requests. Og jeg vil ogs\u00e5 gerne h\u00f8re, hvilke problemer du har med Bouncer. Lad os diskutere dem. M\u00e5ske kan vi implementere nogle funktioner, som du har brug for. <\/p>\n<p><\/p>\n<p>Nu er min del slut, jeg vil gerne h\u00f8re fra dig. Tak!<\/p>\n<p><\/p>\n<p>Sp\u00f8rgsm\u00e5l<\/p>\n<p><\/p>\n<p><em>Hvis jeg angiver application_name, vil det korrekt blive videregivet, ogs\u00e5 i transaction pooling i Odyssey?<\/em><\/p>\n<p><\/p>\n<p>I Odyssey eller i Bouncer?<\/p>\n<p><\/p>\n<p><em>I Odyssey. I Bouncer bliver det videregivet.<\/em> <\/p>\n<p><\/p>\n<p>Vi vil lave et s\u00e6t. <\/p>\n<p><\/p>\n<p><em>Og hvis min faktiske forbindelse hopper mellem andre forbindelser, vil den s\u00e5 blive videregivet?<\/em><\/p>\n<p><\/p>\n<p>Vi vil lave et s\u00e6t af alle parametre, der er angivet i listen. Jeg kan ikke sige, om application_name er i denne liste. Jeg mener, jeg har set det der. Vi vil stille alle de samme parametre op. Med \u00e9n foresp\u00f8rgsel vil s\u00e6ttet g\u00f8re alt det, der var indstillet af klienten ved opstart. <\/p>\n<p><\/p>\n<p><em>Tak, Andrey, for pr\u00e6sentationen! God pr\u00e6sentation! Jeg er glad for, at Odyssey udvikler sig hurtigere for hver minut. Jeg \u00f8nsker, at det forts\u00e6tter s\u00e5dan. Vi har allerede kontaktet jer med en foresp\u00f8rgsel om at have multi data-source forbindelse, s\u00e5 Odyssey kan tilsluttes samtidig til forskellige databaser, dvs. master-slave, og derefter automatisk skifte til den nye master efter failover.<\/em> <\/p>\n<p><\/p>\n<p>Ja, jeg mener, jeg husker denne diskussion. Der er nu flere lagre. Men der er ikke nogen skift imellem dem. Vi skal p\u00e5 vores side sp\u00f8rge serveren, om den stadig er aktiv og forst\u00e5, at der er sket en failover, hvem der vil kalde pg_recovery. Jeg har en standardmetode til at forst\u00e5, at vi ikke er kommet til masteren. Og skal vi forst\u00e5 noget fra fejlene, eller hvordan? Dvs. ideen er interessant, den diskuteres. Skriv flere kommentarer. Hvis du har aktive h\u00e6nder, der kender C, ville det v\u00e6re fantastisk. <\/p>\n<p><\/p>\n<p>Sp\u00f8rgsm\u00e5let om skalering via replikaer interesserer os ogs\u00e5, fordi vi \u00f8nsker at g\u00f8re adoptionen af replikerede klynger s\u00e5 enkel som muligt for applikationsudviklerne. Men her ville jeg gerne have mere kommentarer, alts\u00e5 hvordan det pr\u00e6cist g\u00f8res, og hvordan man g\u00f8r det godt. <\/p>\n<p><\/p>\n<p><em>Sp\u00f8rgsm\u00e5let handler ogs\u00e5 om replikaer. Det viser sig, at I har en master og flere replikaer. Og det er klart, at der forbindes sj\u00e6ldnere til en replika end til masteren, fordi der kan v\u00e6re forskelle. I har sagt, at forskellene i data kan v\u00e6re s\u00e5dan, at det ikke vil opfylde jeres forretning, og I vil ikke tage til den, f\u00f8r den er blevet replikeret. Hvis I har v\u00e6ret lidt l\u00e6nge v\u00e6k, og s\u00e5 begyndt at forbinde igen, s\u00e5 vil de data, I har brug for, ikke v\u00e6re tilg\u00e6ngelige med det samme. Det vil sige, at hvis vi konstant forbinder til masteren, s\u00e5 er cachen der varm, mens cachen i replikaen er lidt bagud.<\/em> <\/p>\n<p><\/p>\n<p>Ja, det er rigtigt. I pcache vil der ikke v\u00e6re de data, som I \u00f8nsker, i real cache vil der ikke v\u00e6re information om de tabeller, som I \u00f8nsker, i planerne vil der ikke v\u00e6re parsede foresp\u00f8rgsler, overhovedet ingenting vil v\u00e6re der. <\/p>\n<p><\/p>\n<p><em>Og n\u00e5r I har en eller anden klynge, og I tilf\u00f8jer en ny replika til den, s\u00e5 mens den starter op, er den i en d\u00e5rlig tilstand, alts\u00e5 den opbygger sin cache.<\/em> <\/p>\n<p><\/p>\n<p>Jeg forstod ideen. Den rigtige tilgang ville v\u00e6re at k\u00f8re en lille procentdel af foresp\u00f8rgslerne f\u00f8rst til replikaen for at varme cachen op. Groft sagt, vi har en betingelse om, at vi ikke m\u00e5 v\u00e6re mere end 10 sekunder bagud i forhold til masteren. Og denne betingelse skal ikke aktiveres i \u00e9n b\u00f8lge, men gradvist for nogle kunder. <\/p>\n<p><\/p>\n<p><em>Ja, \u00f8ge v\u00e6gten.<\/em><\/p>\n<p><\/p>\n<p>Det er en god id\u00e9. Men f\u00f8rst skal vi implementere denne frakobling. F\u00f8rst skal vi koble fra, og s\u00e5 t\u00e6nker vi over, hvordan vi kobler til igen. Det er en fremragende funktion, at vi kan koble til gradvist.<\/p>\n<p><\/p>\n<p><em>I nginx er der en s\u00e5dan mulighed <code>slowly start<\/code> i klyngen til serveren. Og den \u00f8ger gradvist belastningen.<\/em> <\/p>\n<p><\/p>\n<p>Ja, fantastisk id\u00e9, vi pr\u00f8ver, n\u00e5r vi n\u00e5r dertil.<\/p>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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 roadmap: hvad mere \u00f8nsker vi fra forbindelsespooleren. Andrey Borodin (2019) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/96515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=96515"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/96515\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/96516"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=96515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=96515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=96515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}