áááºážáá¡á
á®áááºáá¶á
á¬ááœáẠAndrey Borodin ááẠconnection pooler ááá¯áá®ááá¯ááºážááœá²áá±á¬á¡áá« PgBouncer ááá¯á
áá±ážáá»á²á·ááŒááºážá¡ááœá±á·á¡ááŒá¯á¶ááá¯ááá·áºááœááºážá
ááºážá
á¬ážáááºááá¯ááŒá±á¬ááŒáááá·áºáááºá
áá®áá®ááá¯áá»á¬áž:
á¡á¬ážáá¯á¶ážáááºá¹ááá¬áá«! áá»áœááºáá±á¬á·áºáá¬ááẠAndrew áá«á
Yandex ááœááºá áá»áœááºá¯ááºááẠopen source databases ááᯠááŒá¯á á¯áá«áááºá ááá±á·áá»áœááºá¯ááºááá¯á·ááẠconnection pooler connections ááŸáá·áºáááºáááºáá±á¬ áá±á«ááºážá ááºáá áºáá¯ááŸááááºá
áá¯ááŸá¬ážááᯠconnection pooler ááᯠáááºááá¯áá±á«áºáááá² ááááẠááŒá±á¬ááŒáá±ážáá«á ááá¬áááºááá¯ááºáá¬á á¬áá±áá»á¬ážááœáẠáá°áá±á¬ááºááá·áºáá±á¬ ááá¬áááºááá¯ááºáᬠáá±á«áá¬ááá±á¬ááºážáá áºáá¯ááᯠá¡ááŸááºáááẠááŸá¬ááœá±ááá¯áá«áááºá
áá±á«ááºážá ááºá áá±á¬áºáá±á¬áºááŸá¯ááºááœá±ážáá«áááºá áá¬ááŒá áºááá¯á·áá²ááá¯áá±á¬á· databases áá±á¬áºáá±á¬áºáá»á¬ážáá»á¬ážááŸá¬ connection pooler á built-in ááŸáááŒá®áž á¡á²áá«ááᯠáááºááááá¯á·áá±á¬áẠáááá¯á¡ááºáá«áá°ážá áá¯ááºáá«áááºá áá±áá¬ááá¯ááºážááœááºá¡áá»áá¯á·áá±á¬áááºáááºáá»á¬ážááŸááááºá ááá¯á·áá±á¬áº Postgres ááœááºáááºážáááºá€ááá¯á·á¡áá¯ááºááá¯ááºáá«á á¡ááŒáá¯áẠ(HighLoad++ 2019 ááœááº) Postgres ááœáẠáá±ážááœááºážáá»á¬ážááá·áºááœááºážááŒááºážááŸáá·áºáááºáááºá Nikolai Samokhvalov á០á¡á á®áááºáá¶á á¬áá áºáá¯ááŸááááºá áá»áœááºáá±á¬áºáá¬ážáááºáááá¯áá²á áá°ááá¯á·áá²á·áá±ážááŒááºážáá»ááºááœá±ááᯠá á¯á¶áááºá áœá¬ááŒááºáááºááŒá®ážáá²á·áá°ááœá±á áá®ááá¯áá¬ááŒá®ážá ááœááºáááºáá²á· á¡áááºážá¡ááŒá áºá¡áá¯á¶ážáá»ááŸá¯ááá¯ááºáᬠááŸá¬ážáá«ážáá²á·á áá áºááŒá¿áá¬ááœá±áá²á· áááºááá¯ááºáá±ááŒááá°ááœá±áá«á á¡áá»áá¯á·áá±áá¬áá»á¬ážááœáẠááŒá¿áá¬áá»á¬ážááẠááŸááºážááŸááºážáááºážáááºáž ááááá¬áá±á¬ááŒá±á¬áá·áº á¡ááœááºáááºáá²ááá¯ááºáááºá
Yandex ááœáẠPostgres ááŸááááºá Yandex áááºáá±á¬ááºááŸá¯áá»á¬ážá áœá¬ááẠYandex.Cloud ááœááºáá±ááá¯ááºáááºá ááá¯á·á¡ááŒáẠPostgres ááœáẠáá áºá áá¹ááá·áºáá»áŸáẠá¡áááºážáá¯á¶áž áá±á¬ááºážááá¯ááŸá¯ áá áºáááºážááᯠáá¯ááºáá±ážááá·áº áá±áᬠpetabytes áá»á¬ážá áœá¬ááŸááááºá
áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážá¡ááœáẠáá»áŸááá±á¬á á¶ááŒá¡á á¯á¡áá±ážáá áºáá¯ááᯠáá¶á·ááá¯ážáá±ážááẠ- á€áááºááŸá¬ node á á¡ááá áááºáááááºááŒá áºááŒá®ážá áá¯á¶ááŸááºáá¯á¶á á¶áá°ááŸá áºáᯠ(áá áºááŒáá¯ááºáááºáááºážááŸáá·áº á¡áá®á¡áá»áŸ)á á¡áááºáá°ážáá°ááŸá¯á áá¯á¶á á¶áá°áá±á«áºááŸá áááºááŸá¯ááŸá¯áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá»á²á·ááœááºááŒááºážá
á¡á á¯á¡áá±ážáá áºáá¯á á®ááẠPostgres ááŒá áºááŒá®áž áááºážááœáẠPostgres ááŸáá·áº á á±á¬áá·áºááŒáá·áºáá±ážá áá áºáá»á¬ážá¡ááŒáẠáá»áááºáááºááŸá¯áá±á«ááºážáá°ážá ááºááá¯áááºáž ááá·áºááœááºážáá¬ážáááºá Connection pooler ááᯠáá¬áá¶ááŒááºážááŸáá·áº áááºážá á¡ááááááºááœááºáá»ááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áááºá
connection pooler áá²á· á¡ááá áááºááœááºáá»ááºá áá¬áá²á
Postgres ááẠáá±áá¬áá±á·á áºáá áºáá¯ááŸáá·áº á¡áá¯ááºáá¯ááºáá±á¬á¡áá« áá¯ááºáááºážá ááºáá¯á¶á á¶ááᯠáááºáá¶áááºá ááá¯ááá¯áááºááŸá¬ áá»áááºáááºááŸá¯áá áºáá¯ááẠáá¯ááºáááºážá ááºáá áºáá¯ááŒá áºááŒá®áž Postgres áá±á¬ááºáá¶áá áºáá¯ááŒá áºáááºá ááŒá®ážáá±á¬á· áá® backend ááŸá¬ ááá°áá®áá²á· áá»áááºáááºááŸá¯ááœá±á¡ááœáẠááœá²ááŒá¬ážá¡á±á¬ááºáá¯ááºááá¯á· áá±á¬áºáá±á¬áºá á»á±ážááŒá®ážáá²á· ááá°áá®áá²á· áááºááŸáºááœá±á¡áá»á¬ážááŒá®ážááŸááá«áááºá
ááá¯á·á¡ááŒááºá Postgres áá¯ááºááœáẠprocArray áá¯áá±á«áºáá±á¬ array áá áºáá¯ááŸááááºá áááºážááœáẠááœááºáááºáá»áááºáááºááŸá¯áá»á¬ážá¡ááŒá±á¬ááºáž á¡ááŒá±áá¶á¡áá»ááºá¡áááºáá»á¬áž áá«ááŸááááºá ááá¯á·á¡ááŒáẠprocArray áá¯ááºáá±á¬ááºááŒááºáž algorithms á¡á¬ážáá¯á¶ážáá®ážáá«ážááẠlinear ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááŸááááº; áááºážááá¯á·ááẠnetwork connections á array áá áºáá¯áá¯á¶ážááᯠrun áááºá áááºážááẠá¡ááœááºáá»ááºááŒááºáá±á¬ á ááºáááºážáá áºáá¯ááŒá áºáá±á¬áºáááºáž áááºáá¬áá±á¬ááœááºáááºáá»áááºáááºááŸá¯áá»á¬ážááŒá±á¬áá·áº á¡áá¬áá»á¬ážááẠá¡áááºážáááºááá¯áá á»á±ážááŒá®ážáá«áááºá á á»á±ážáááºážáááºážááá¯áááºáá¬áá²á·á¡áá« ááœááºáááºáá»áááºáááºááŸá¯áá»á¬ážá áœá¬á¡ááœáẠá¡ááœááºááŒáá·áºáá¬ážáá²á·á á»á±ážááŸá¯ááºážááᯠáá±ážáá»á±ááá¯ááºáá«áááºá
ááŒá áºááá¯ááºáá»á± áá»ááºážáááºááŸá¯ 3 áᯠááŸááá«áááºá
- áá»áŸá±á¬ááºááœáŸá¬áááºááŸá¬á
- áá±áá¬áá±á·á áááºááœááºá
- á¡ááŒá¬ážá ááá¯ááá¯áááºááŸá¬á áá±á«ááºážá ááºááŸá¯á¡áá»áá¯ážáá»áá¯ážá
áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá Built-in pooler ááẠáááºááŸáááœáẠáá®ááœááºáá±áá²ááŒá áºáááºá PostgreSQL Professional á០áá»áœááºá¯ááºááá¯á·ááá°áááºáá»ááºážáá»á¬ážááẠá€á¡áá¬ááᯠá¡áá»á¬ážá¡á¬ážááŒáá·áº ááŒá¯áá¯ááºááŒáááºá áááºá¡áá»áááºáá±á«áºáá¬áááºááá¯áᬠááá·áºááŸááºážááááºáá«áááºá á¡ááŸááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááœáẠáááá¯áá¬ááá¬ááŸááºá០ááœá±ážáá»ááºááẠááŒá±ááŸááºážáá»ááºááŸá áºáá¯ááŸááááºá áááºážááá¯á·ááẠá¡ááá®áá±ážááŸááºáž-áááºááŒááºáž áá±áá°ážáááºááŸáá·áº ááá±á¬ááºá á®áá±áááºáá»á¬ážááŒá áºáááºá
Application-side pool ááẠá¡ááœááºáá°áá¯á¶ážáááºážáááºážááŒá áºáááºá ááŒá®ážáá±á¬á· client drivers á¡á¬ážáá¯á¶ážáá®ážáá«ážá ááá·áºá¡á¬áž áááºážáááºážáá áºáá¯áá±ážáááº- áááºážáá±á«ááºážáá»á¬ážá áœá¬áá±á¬ ááá·áºáá»áááºáááºááŸá¯áá»á¬ážááᯠáá±áá¬áá±á·á áºááá¯á· áá«áááºáá»á¬ážá áœá¬áá±á¬ áá»áááºáááºááŸá¯áá»á¬ážá¡ááŒá Ạáá¯ááºááœáẠáááºááŒáá«á
ááŒá áºáá±á«áºáá¬ááá·áºááŒá¿áá¬ááŸá¬ áá±á¬ááºáá¶á¡á áœááºážááᯠá¡ááá¯ááºážá¡áá¬áá áºáá¯á¡áá á¡ááá¯ááºážá¡áá¬áá áºáá¯á¡áá ááŒá¯áá¯ááºááá¯áá«á áááºážááᯠvirtual machine á¡áá»á¬ážá¡ááŒá¬ážááœáẠá¡áá¯á¶ážáá»ááá¯ááŒááºážáááºááŒá áºáááºá
ááá¯á·áá±á¬áẠááá·áºááœááºáááŸáááá¯ááºááŸá¯áá¯ááºáá»á¬ážá áœá¬á áá±áá¬á ááºáá¬áá»á¬ážá áœá¬ááŸááááºááᯠáááºááá±á¬áá±á«ááºáá¬áááºá ááŸáá·áº client side áá±á«ááºážáá°ážááŒááºážáá»ááºážáááºááŸá¯ááẠá¡áá±á¡ááœááºáá»á¬ážá áœá¬ááᯠáŠážáááºá á±áááºá á¡ááŒá®ážááœá±á áá»áááºáááºááŸá¯ 10 áá±á¬ááºááŸááááºá áá«á áá¯á¶ááŸááºá¡áá¯ááºáá¯ááºááá¯ááºáá²á· á¡á áœááºážáá áºáá¯áá«á
proxy poolers á¡ááŒá±á¬ááºážááŒá±á¬áááºá á¡áá»á¬ážááŒá®ážáá¯ááºááá¯ááºáá²á· poolers ááŸá
áºáá¯ááŸááááºá áááºážááá¯á·ááẠáá±áá°ážáááºáá»á¬ážáá¬ááá áááºážááá¯á·ááẠáá±áá°ážáááºáá»á¬áž + ááá¯ááá¯á¡á±ážááŒáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá
áœááºážáá»á¬ážááŒá
áºáááºá áá®
ááá¯á·áá±á¬áº áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá áá°ááá¯ááºážááẠá€á¡ááá¯áá±á¬ááºážáá¯ááºáá±á¬ááºáá»ááºááᯠáááá¯á¡ááºáá«á áááºážááẠpoolers ááẠsession pooling ááá¯áᬠáá¶á·ááá¯ážáá±ážáááºá ááá¯ááá¯áááºááŸá¬ á¡áááºáá±á¬ááºáááºáá áºáá¯á áá±áá¬áá±á·á áºááá¯á· á¡ááœááºáá±á¬ááºáááºáá áºáŠážááᯠááŒá áºáá±á«áºá á±áááºá
áááºážááẠáá»áœááºá¯ááºááá¯á·ááááºááœááºáá»ááºáá»á¬ážá¡ááœáẠá¡ááœááºááá·áºáá»á±á¬áºááŒááºážáááŸááá«á ááá¯á·ááŒá±á¬áá·áº ááœá±áá±ážááœá±áá°áá±á«ááºážá ááºážááŒááºážááᯠáá¯ááºáá±á¬ááºááá·áº PgBouncer ááá¯á¡áá¯á¶ážááŒá¯áááºá ááá¯ááá¯áááºááŸá¬ áá¬áá¬áá»áááºáááºááŸá¯áá»á¬ážááᯠá¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááá·áºáá¬áá¡ááœááºáᬠáá¯á¶ážá áœá²áá°áá»áááºáááºááŸá¯áá»á¬ážááŸáá·áº ááá¯ááºáá®áá«áááºá
ááŒá®ážáá±á¬á· áá»áœááºáá±á¬áºááá¯á·áá²á· áá¯ááºáááºážááœááºááŸá¬ áá«á ááŸááºáá«áááºá áá«áá±ááá·áº ááŒá¿áá¬á¡áááºážáááºááŸááá«áááºá.
áááºáá¡áááºáá»áááºáááºááŸá¯á¡á¬ážáá¯á¶ážááẠáá±ááá¹ááááŒá áºáá±á¬ááŒá±á¬áá·áº áááºá ááºááŸááºáá áºáá¯ááᯠá¡ááŒá±ááŸá¬ááá¯áá±á¬á¡áá«ááœáẠááŒá¿áá¬áá»á¬ážá áááºáááºá áá°ááá¯ááºážááẠááŸáá·áºáááºááŸá¯áá áºáá¯ááŒáá·áº áá±á¬ááºááŸááá¬ááŒááŒá®áž á ááºááŸááºááᯠááŒá±áá¬áá¶ááẠáá áºáááºážáááºážááŒáá·áº áááºáá²áá¬áááºá
áá±áá»á¬áá¬ááá±á¬á· ááẠapplication_name_add_host ááᯠáá¯á¶ážááá¯ááºáá«áááºá á€áááºááŸá¬ application_name ááá¯á· IP ááááºá á¬áá áºáá¯ááá·áºááẠBouncer áááºááŸá áááºážáááºážáá áºáá¯ááŒá áºáááºá ááá¯á·áá±á¬áº application_name ááᯠá¡ááá¯áá»áááºáááºááŸá¯áá áºáá¯ááŒáá·áº áááºááŸááºáááºá
á€ááááºááœááºá á¡áá«áá±á¬ááºáá»ááºážááẠá¡á á áºá¡ááŸááºáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŒá áºááŒá®ážá á¡ááŒá¬ááá¯ááºážááẠáá±áá¬áá±á·á áºááá¯á· áá»á¶áááºážááá·áº áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŒá áºáááºá á€ááŒá¬ážáá¬ážáá»ááºááẠááŒá±áá¬áá¶áááºá¡ááœááºáᬠááá¯á¡ááºáá±á¬ application_name áááºáááºááŒááºážááŒá áºáááºá ááá¯á·áá±á¬áº áááºážááẠáá¯á¶ážáá¡ááá²á·ááá¯ááºáá«á
ááá¯á·á¡ááŒááºá Bouncer ááœáẠáááºáááºááŸááºáá¬ážáá±á¬áá±áá¬áá±á·á áºáá áºáá¯á¡ááœááºá ááá¯ááá¯áááºááŸá¬ á¡áá¯á¶ážááŒá¯áá°á¡ááœáẠáá±áá¬áá±á·á áºáá»áááºáááºááŸá¯á¡áá±á¡ááœááºá áá®ážááŒá¬ážáá±áá¬áá±á·á áºáá áºáá¯á¡ááœáẠááá·áºáááºáá»ááºáááŸááá«á
áá«á áá¬ááᯠáŠážáááºáá¬áá²á ááá·áºááœáẠC++ ááŒáá·áº áá±ážáá¬ážáá±á¬ áááºáá±á¬ááºáá¬ážáá±á¬ áááºáá±á¬ááºááŸá¯áá áºáá¯ááŸáááŒá®áž áá±áá¬áá±á·á áºááᯠááá¯ážááœá¬ážá áœá¬ááá¯ááºáá±á¬ááºááá¯ááºáá±á¬ node áá áºáá¯ááŸá á¡áá±ážá á¬ážáááºáá±á¬ááºááŸá¯áá áºáá¯ááŸááá±á¬áºáááºáž áááºážááá¬ááºáá±á¬ááºážááẠáá°ážááœááºááœá¬ážáá«áááºá áááºážááẠáá»áááºáááºááŸá¯ 20 ááá¯ááœáá·áºááŒá®áž á¡ááŒá¬ážá¡áá¬á¡á¬ážáá¯á¶áž á á±á¬áá·áºááá¯ááºážáá±áááºááŒá áºáááºá áááºážáá²á·áá¯ááºá áá¯á¶ááŸááºáá«áá²á
áá»áœááºá¯ááºááá¯á·ááẠá€áááºáááºááᯠááá·áºáá¬ážááá·áº Bouncer á¡ááœáẠáá±ážáááºáá±á¬ patch áá áºáá¯ááᯠáá±ážáá²á·áááºá ááá¯ááá¯áááºááŸá¬ áá±á¬ááºáááºáá»á¬ážááᯠáá±áá°ážáááºááœáẠááá·áºáááºáá¬ážáááºá
Postgres áááºááœáẠáááºážááᯠáá»áááºáááºááŸá¯ á¡áá±á¡ááœááºááŒáá·áº áá±áá¬áá±á·á áºááŸá á¡áááºážááá¹ááá»á¬ážááᯠááá·áºáááºáá¬ážáááºá
ááá¯á·áá±á¬áº áááºááẠáá¬áá¬ááá¯á· á¡áááºááŒá±á¬áá·áº áá»áááºáááºááŸá¯ áááŸááá±á¬á·áááºááᯠáá¬ážáááºááá¯ááºááŸá¯ áá¯á¶ážááŸá¯á¶ážááœá¬ážáááºá PgBouncer ááẠáá»áááºáááºááŸá¯ááá¯ááºáᬠá¡ááŸá¬ážá¡ááœááºážáá áºáá¯ááᯠááá»ááŒáá«á áááºážááẠáá°áá®áá±á¬ á¡áá»ááºá¡áááºááᯠá¡ááŒá²áááºáž ááŒááºáá±ážáááºá ááẠáá¬ážááááºááá¯ááºáá«- ááá·áºá áá¬ážááŸááºááᯠááŒá±á¬ááºážááœá¬ážááŒááºážá áá±áá¬áá±á·á Ạáá»á±á¬ááºáá¯á¶ážááœá¬ážááŒááºáž ááŒá áºááá¯ááºáááºá áá áºáá¯áᯠááŸá¬ážáá±áá«áááºá áá«áá±ááá·áº áá±á¬áá«ááá¹ááᬠáááŸááá«áá°ážá á¡áááºá áááºááŸááºáá»áááºááᯠááááºáá±á¬ááºááá¯ááºáá«á áááºážááᯠá¡áááºááŒá±á¬áá·áº ááááºáá±á¬ááºááá¯ááºáááºááᯠáááºáááááá¯ááºáá«á
áá áºáá»áááºáááºážááœáẠáááºááẠá¡ááá®áá±ážááŸááºážááááºáá áºáá»á¬ážááᯠááŒáá·áºááŸá¯ááŒá®áž á¡ááºááºáá®áá±ážááŸááºáž á¡áá¯ááºááá¯ááºáááºááᯠááœá±á·ááá«áááºá
á¡áá±á«áºááá¯ááŒáá·áºáá«á Bouncer ááẠsingle-threaded ááŒá áºáááºááá¯ááŒáá·áºáá«á á€áááºááŸá¬ áááºáá±á¬ááºááŸá¯ááá á¡áá»áá¯ážá¡ááœá±á·áá áºáá¯ááŒá áºáááºá áá±áá¬áá±á·á áºááᯠáá áºááŸá áºááœá²á¡ááœááºáž á áá±ážáá»ááẠááŒááºáááºáá±ááŒá±á¬ááºáž áááºááá±á¬áá±á«ááºááŒá®áž pooler ááᯠá áá±ážáá¯ááºááẠááá¯á¡ááºáá«áááºá
PgBouncers áá»á¬áž ááá¯ááá¯ááá¯á¡ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· áááá¯á¶ážáá»á¯ááºááá¯ááºááá«áááºá
Bouncer ááᯠá¡áááºážááẠáá¬áá±ážáá¬ážáá«áááºá
TCP port ááᯠááŒááºáááºá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº Bouncers á¡áá»á¬ážá¡ááŒá¬ážááᯠááŒáŸáá·áºáááºááá¯ááºá á±ááẠáááºážááá¯á·á ááŒá¯áá¯ááºáá²á·áááºá áááºáááºááŸá¯á áá áºááẠá¡ááá¯ááºáž-áá±á¬áºáááºááᯠá¡áá¯á¶ážááŒá¯á áááºážááá¯á·ááŒá¬ážá០áááºáá¬áá±á¬ TCP áá»áááºáááºááŸá¯áá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠááœáŸá²ááŒá±á¬ááºážáá±ážáá«áááºá
áááºážááẠáá¯á¶ážá áœá²áá°áá»á¬ážá¡ááœáẠááœáá·áºáááºážááŒááºáá¬ááŸá¯ááŸááá±á¬ááŒá±á¬áá·áº ááá·áºááœáẠBouncer áá áºáá¯ááŸááá¯á¶ááááºá ááá¯á·áá±á¬áº Bouncers áá»á¬ážáááºáááºáá±ááá·áºááŒá¬ážááœáẠidle connections á¡ááá¯ááºážááá¯ááºážáá»á¬ážááŸááá±áá«áááºá
á¡ááá¯ááºá¡ááá·áºááœáẠဠBouncers 3 áá±á¬ááºá á®ááẠáááºážááá¯á·á á¡á°ááá¯ááºááᯠ100% ááá¯ááºá á¬ážáááºááᯠáááááŒá¯áááá±áááºá Bouncers á¡áááºážááẠááá¯á¡ááºáá«áááºá á¡áááºááŒá±á¬ááºá·?
ááá·áºááœáẠTLS ááŸááá±á¬ááŒá±á¬áá·áºááŒá áºáááºá ááá·áºááœáẠáá¯ááºááŸááºáá¬ážáá±á¬ áá»áááºáááºááŸá¯áá áºáᯠááŸááááºá TLS áááºááœá²ááŸá¯ááºáááºááŒááºážááẠCPU á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá á¬ážáá¯á¶ážáá±á¬ááŒá±á¬áá·áº TLS áááºááœá²ááŸá¯ááºáááºááŒááºážááẠCPU á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá á¬ážáá¯á¶ážáá±á¬ááŒá±á¬áá·áº ááẠPostgres ááŸáá·áº á á¶áááºááŸááºáá¬ážáá±á¬ áá»áááºáááºááŸá¯á¡áá±á¡ááœááºááẠáá»áŸáá¯á·ááŸááºáá¯ááºááœáá·áºáá¬ážááá·áº á¡ááá¯ááºážá¡áá¬ááŸá áºáá¯áá®ážáá«áž áá»áááºážááœá¬ážáááºááᯠáááºááœá±á·áááá·áºáááºá
ááááºááœáẠá¡áááºáá»áááºáááºááŸá¯ááŸáá¯ááºážáá áºáá¯ááŸááá¬áá±á¬á¡áá«ááœáẠáá¯ááºáá±á¬ááºááá·áº cryptographic function á¡áááºážáááºááᯠáááºááœá±á·ááŒááºááá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááá°ááááºážááẠáááŸáááá¯ááºááŸá¯áá¯ááºáá»á¬ážááŒá¬ážááœáẠááŒá±á¬ááºážááá¯ááºáá±á¬ááŒá±á¬áá·áº á¡áááºáá»áááºáááºááŸá¯áá»á¬ážáááŸáá¯ááºážááẠáá¯á¶ááŸááºá¡ááŒá±á¡áá±áá áºáá¯ááŒá áºáááºá ááá¯ááá¯áááºááŸá¬ á¡ááŒá±á¬ááºážáá áºáá¯áá¯ááŒá±á¬áá·áº áá°ááááºážáá±á¬ááºážááᯠááááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áº áááºáá áºáá¯áá¯á¶ážááᯠá¡ááŒá¬ážáá±áá¬á ááºáá¬ááá¯á· ááá¯á·ááá¯ááºááŒááºážááŒá áºáááºá áá°ááá¯á·á¡á¬ážáá¯á¶áž TLS ááᯠáá áºáá»áááºáááºáž ááŸá¯ááºáááºáá¬ááŒáááá·áºáááºá
ááá¯á·á¡ááŒáẠTLS á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºááœá²ááŸá¯ááºáááºááŒááºážááẠBouncer ááᯠááŸá¯ááºáááºááŒááºážáááŒá¯áá±á¬á·áá² áá°á·áááºáá»á±á¬ááºážááᯠááŸá áºáá¬ážáááºááŒá áºáááºá á¡áá»áááºáá¯ááºááœá¬ážáá±á¬ááŒá±á¬áá·áº á¡áááºáá»áááºáááºááŸá¯ááŸáá¯ááºážáá»á¬áž áááºááá·áºááœá¬ážááá¯ááºáááºá áááºááááºážááŒááºá¡ááááºááá¶áá² á¡ááŒá±áá¶ááá¯á· ááŒááºááŒáá¯ážá á¬ážáá«áá áááºážááá¯á·ááẠáá±á«ááºážá ááºááŸáá¯ááºážáá áºáá¯á¡ááŒá Ạáááºáá«áááºáá« áá±á«áºáá¬áááºááá¯ááºáá«á
á€áááºááŸá¬ 16 cores 16% ááŒáá·áº load áá¯ááºááá·áº PgBouncers 100 áá¯á á¥ááá¬áá áºáá¯ááŒá áºáááºá
áá»áœááºá¯ááºááá¯á·ááẠáááºá áááẠPgBouncer ááá¯á· áá±á¬ááºáá¬áááºá áááºážááẠBouncer ááŒáá·áºáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááœááºá¡á±á¬ááºááŒááºááá¯ááºááá·áºá¡áá±á¬ááºážáá¯á¶ážááœá²á·á ááºážááŸá¯ááŒá áºáááºá áá»áœááºá¯ááºááá¯á·á ááŒááºá Bouncers áá»á¬ážááᯠTCP áááºááœá²ááŒááºážá¡ááœáẠá¡áá¯á¶ážááŒá¯ááŒá®áž ááŒááºááá»áááºáááºááŸá¯áá»á¬ážááᯠá¡ááœááºá¡áá»áœá¶áááœá²ááœá²á á±áááºá¡ááœáẠá¡ááœááºážááá¯ááºáž Bouncers áá»á¬ážááᯠá¡ááŸááºááááºáá±á«ááºážá ááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá
á€ááœá²á·á ááºážáá¯á¶ááœááºá áá»á±á¬ááœá±á·á áœá¬ ááŒááºáááºá áááºááá¯ááºááẠá ဠBouncers 18 áá¯á¡á¬ážáá¯á¶ážááᯠáá áºáá¯ááŒá®ážáá áºáᯠááŒááºáááºá áááºááá¯ááºáá«áááºá áá«áá±ááá·áº áá®ááá¯ááœá²á·á ááºážááŸá¯ááᯠááááºážááááºážááá¯á·á áá±á¬áºáá±á¬áºáááºáá²áá«áááºá Sysadminsá DevOps ááŸáá·áº á€áá¬áá¬á¡ááœáẠá¡ááŸááºáááẠáá¬áááºááŸááá°áá»á¬ážááẠá€á¡á á®á¡á ááºááᯠá¡ááœááºáá»á±á¬áºááœáŸááºáááºááá¯ááºáá«á
áá»áœááºá¯ááºááá¯á·á ááá¯ážáááºááŸá¯á¡á¬ážáá¯á¶ážááᯠopen source á¡ááŒá ẠááŒáŸáá·áºáááºááá¯ááºáááºáᯠáááºááá±á¬áºáááºáž Bouncer ááᯠáá±á¬ááºážá áœá¬ ááá¶á·ááá¯ážááá¯ááºáá«á á¥ááá¬á¡á¬ážááŒáá·áºá ááááºáááºážáá áºáá¯ááœáẠPgBouncers á¡áá»á¬ážá¡ááŒá¬ážááᯠrun ááá¯ááºá áœááºážááẠááœááºáá²á·áá±á¬ áá áºáá áá»á°ážááœááºáá²á·áááºá ááœááºáá²á·áá±á¬ááŸá áºáá±á«ááºážáá»á¬ážá áœá¬á á€á¡ááºá¹áá«áááºááᯠááœá²áá¯ááºááẠáá±á¬ááºážááá¯ááŸá¯áá áºáá¯ááŸááá²á·áááºá
ááá¯á·ááá¯áẠáá±á¬ááºááẠá¥ááá¬áá áºáá¯á Postgres ááœááºá áááá¯á¡ááºáá² á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážáááŸááá² ááá°áá®áá±á¬áá»áááºáááºááŸá¯áá®ááá¯á· áá»áŸáá¯á·ááŸááºáá±ážááá¯á·ááŒááºážááŒáá·áº áá¯ááºáá±á¬ááºáá±ááá·áº áá±á¬ááºážááá¯áá»ááºááᯠáááºáá»ááºááá¯ááºáááºá ááá¯á·áá±á¬áº á¡áá»áá¯á·áá±á¬áá±á¬ááºáááºáá»á¬ážááẠTCP ááŒááºáááºáááºááŸááºááŒááºážááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áá±ážááá¯á·áááºá ááá¯ááá¯áááºááŸá¬ áááºážááá¯á·ááẠááœááºáááºáá»áááºáááºááŸá¯ááᯠáá»áá¯ážáá»ááºáááºá Bouncer áá¬áá¯ááºááá²á áá°áá¬ááŸáá¯ááºááŸá¬ááá¯ááºáá°ážá áááºážááẠáá±á¬ááºážááá¯áá»ááºááᯠáááºáááºáá¯ááºáá±á¬ááºáááºááŒá áºáááºá á¡áááºá áááºááẠáá±ážáááºáá±á¬ áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŒáá·áº áá±áá¬áá±á·á áºáá áºáá¯ááᯠáááºáá®ážáá¬ážááá·áº áá»áááºáááºááŸá¯ á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºáá¶áááŸááá«áá Bouncer á០áá»áááºáááºááŸá¯ááᯠááŒááºááá¯ááºáá¯á¶ááŒáá·áº ááá¯á¶áá±á¬ááºáá±á¬á·áá«á áááºááẠáá±áá¬áá±á·á áºááœáẠáá¯ááºáá±á¬ááºáá±áá±á¬ áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠááŒáá·áºááœááºážááẠááá¯á¡ááºáá«áááºá
áááºážááᯠáá¬áá±ážáá¬ážááŒá®ážá á€ááŒá¿áá¬ááᯠBouncer á á¡áááºááá¯ááºážááá¯á· áá±á«ááºážáááá·áºááá±ážáá«á
áá«ááŒá±á¬áá·áº ááŒá¿áá¬ááœá±ááᯠááŒááºááŒááºáááºááẠááŒááºáááºááá¯ááºááŒá®áž áááºáá¬á ááŒáá¯ážáá»áá¯ážá á¯á¶áá¯ááºááááºááá¯áá²á· áá»áœááºáá±á¬áºááá¯á·áá²á· ááá¯ááºááá¯ááºáá»áááºáááºááŸá¯áá±á«ááºážáá°ážá áẠááá¯á¡ááºáááºááá¯áá¬ááᯠáááá¯á¶ážáá»á¯ááºáá¬áá²á·áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠmultithreading ááᯠá¡áááá¡áá¯ááºá¡ááŒá ẠáááºááŸááºáááºá á¡ááẠTLS áá»áááºáááºááŸá¯ááŸáá¯ááºážááᯠáá±á¬ááºážá áœá¬ááá¯ááºááœááºááá¯ááºáááºááá¯á¡ááºáááºá
áá«ááá¯áá¯ááºááá¯á·á Machinarium ááá¯á·áá±á«áºáá²á· áá®ážááŒá¬ážá á¬ááŒáá·áºááá¯ááºáá áºáá¯ááᯠáá®ááœááºáááŸá¬ ááŒá áºááŒá®ážá ááœááºáááºáá»áááºáááºááŸá¯áá²á· á ááºá¡ááŒá±á¡áá±ááœá±ááᯠáááºááá¯ááºáá¯ááºá¡ááŒá Ạáá±á¬áºááŒááá¯á· áá®ááá¯ááºážáá¯ááºáá¬ážáá«áááºá libpq á¡áááºážá¡ááŒá áºáá¯ááºááá¯ááŒáá·áºáá»áŸáẠááá·áºá¡á¬áž ááááºáá áºáá¯ááŒááºáá±ážááá¯ááºááá·áº ááŸá¯ááºááœá±ážááŸáá±á¬áá±á«áºááá¯ááŸá¯á¡áá»áá¯á·ááᯠááœá±á·ááááºááŒá áºááŒá®áž âáá«á·ááᯠáá±á¬ááºááŸáá±á«áºáá«á áá±á¬áá±á¬ááẠáá»áœááºáá±á¬á·áºááŸá¬ IO ááŸááááºá áá«áá±ááá·áº IO ááœááºááœá¬ážáá²á·á¡áá« áááá¯áááºáá¬ááŸá¬ Load áá áºáá¯ááŸááá±áááºá" áááºážááẠá¡ááá·áºáá±á«ááºážáá»á¬ážá áœá¬ á¡á á®á¡á ááºáá áºáá¯ááŒá áºáááºá ááœááºáááºáááºááœááºáá±ážááᯠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááá¯ááºáá¶áá±á¬áºá ááºááŒáá·áº áá±á¬áºááŒáááºá "á¡áááºáá¯ááºážá á¡ááœááºá¡á á¬áž N áá²á· packet header áá áºáá¯ááᯠáááºáá¶áááŸááá²á·áááºá á¡áᯠN bytes ááᯠá á±á¬áá·áºáá±áá«áááº" "SYNC packet áá áºáá¯ááᯠááá¯á·áá²á·áááºá á¡áᯠáá»áœááºáá±á¬áº áááẠmetadata áá«áá²á· packet áá áºáá¯ááᯠá á±á¬áá·áºáá±áá«áááºá" ááááºááẠáááºá¹ááá«ááᯠááá¯ááºážá áááºááºá¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²ááœá¬ážááá²á·ááá¯á· á¡áá±á¬áºáá±ážáááºáá²áá±á¬á áááºááŒááºáá¬ážáááºááá¯ááºáá±á¬ áá¯ááºáá áºáá¯ááŒá áºáááºá state machine á¡á á¬áž áááá¯ááááºáá¬ááẠáá¬ááẠimperative code áá¯á¶á á¶ááŒáá·áº á¡ááŒááºá¡ááŸááºáááºááœááºááŒááºážá á¡ááááááºážááŒá±á¬ááºážááᯠáá±á¬áºááŒáááºá¡ááœáẠáááºážááᯠááŒá¯áá¯ááºáá²á·ááŒááºážááŒá áºáááºá á€áááŒá áºááá±áá¯ááºááœááºá ááœááºáááºááŸáá±áá¬ááá¯á á±á¬áá·áºááá¯ááºážááŒá®áž execution context ááá¯á¡ááŒá¬áž coroutine (green thread) ááá¯á·áá±ážááá¯á·ááŒááºážááŒáá·áº execution sequence ááᯠá¡ááŸá±á¬áá·áºá¡ááŸááºááŒá áºá á±ááá·áºáá±áá¬áá»á¬ážááᯠááá·áºááœááºážáááºááá¯á¡ááºáá«áááºá á€áá»ááºážáááºáááºážááẠáááºá¹ááá«áá²ááœáẠáá»áŸá±á¬áºááá·áºáá¬ážáá¯á¶ážáááºážááŒá±á¬ááºážááᯠáááºááá¯ááºáá»áá±ážááŒá®áž áááºážááœáẠá¡ááá¯ááºážá¡áááºáá»á¬ážááá·áºááá·áºá¡áá»ááºááŸáá·áº áááºáá°áááºá
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠTCP ááá¯áááºáá¶ááŒá®áž á¡áá¯ááºááá¬ážáá»á¬ážá áœá¬áᶠTPC áá»áááºáááºááŸá¯ááᯠá¡ááŸáá·áºáá»ááŒááºáááºážáá±ážááá·áº ááá¯ááºážáá áºáá¯ááŸááááºá
á€ááá á¹á ááœááºá áááá¯ááºážááá·áºáá»áááºáááºááŸá¯áá áºáá¯á á®ááẠáááá¯áááºáá¬áá áºáá¯áá±á«áºááœáẠá¡ááŒá²áááºážá¡áá¯ááºáá¯ááºáááºá áááºážááẠááá·áºá¡á¬áž áááºááŸáº-áá±á¬áºááœá±ááŸá¯ááŒá áºá á±ááẠááœáá·áºááŒá¯áááºá
ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááẠá áá ẠTCP á¡á á¯á¡áá±ážááᯠáááºáá¬áá¬áá á±áááºá¡ááœáẠáá±ážáááºáá±á¬ áááºáá±á·ááºá»áá»á¬áž á á¯á ááºážááŸá¯ááᯠááŒá®ážáá¬ážáá±á¬ áááºáá±á·ááºá»áá áºáá¯á¡ááŒá Ạá¡áááºážááẠááŒáŸáá·áºáááºáá¬ážáá«áááºá
ááá¯á·á¡ááŒááºá ááŒááºáááºáááºááŸááºááá·áºá¡áá« Odyssey ááẠááœááºáááºáá»áááºáááºááŸá¯áá»áá¯á·ááœááºážááœá¬ážáá±á¬á¡áá«ááœáẠOdyssey ááẠááœáŸá²ááŒá±á¬ááºážáá±ážááá¯á·ááá¯ááºáááºáá°áá±á¬ á¡áááá¹áá¬ááºááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡áá±á¬ááºážá¡áááºáá¯ááºáááºážá á¯áá±á«ááºážááŒááºážááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážááŒá®ážá ááá¯ááá¯áááºááŸá¬ áááºáá°áá»áŸáá±á¬ááºážááá¯ááŸá¯ááᯠáá á±á¬áá·áºááá¯ááºážáá«áá Odyssey ááẠáá±áá¬áá±á·á áºá¡á¬áž áááŒáá¯ážá á¬ážááẠááŒá±á¬ááŒá¬ážáááºááŒá áºáá«áááºá á¡ááá¯ážáááºá¡áááºážá¡ááŒá áºáá»á¬ážááᯠáá¯á¶ážááŸá¯á¶ážá á±ááá·áº áá±á¬ááºážááá¯áá»ááºááᯠááŒáá·áºáááºážáá«á
ááŒá áºááá¯ááºááá·áºá¡áá«ááá¯ááºážá áá»áœááºá¯ááºááá¯á·ááẠáá°áá®áá±á¬áááá¯ááºážááá·áºááŸáá·áº áá»áááºáááºááŸá¯áá»á¬áž ááŸááá±áá«áááºá áááºážááẠapplication_name_add_host ááᯠááŒááºáááºááá·áºááœááºážááẠááŸá±á¬ááºááŒááºáááºá ááŒá áºááá¯ááºáá«á áá±á¬áá«ááŸá¬ááœá±ááŒááºážá¡ááœáẠááá¯á¡ááºáá±á¬ ááá·áºáááºáá±á¬ááºáá»á¬ážááᯠáááºáá¶áááºááŸááºááẠáááá¯á¡ááºáá«á
áá»áœááºá¯ááºááá¯á·ááẠYandex.Cloud áá¡áá»áá¯ážá á®ážááœá¬ážá¡ááœáẠáá¯ááºáá±á¬ááºáá«áááºá áááºááẠá á®áá¶ááá·áºááœá²áá¬ážáá±á¬ PostgreSQL ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž áá»áááºáááºááŸá¯áá±á«ááºážáá°ážá ááºááᯠáááºáááºáá¬ážáá«áá áááºááẠáá¯áá¹áááá¯á¶áá°ááœá¬ážááŸá¯ááᯠá¡ááŒááºáááºááœáẠáááºáá®ážááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬á áááºááẠáá¯áá¹áááá¯á¶áá°ááœá¬ážááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á áá»áœááºá¯ááºááá¯á·ááᯠáá¬ážáá²á·ááá¯áá«áá Bouncer ááẠáá¯áá¹áááááºáá±á¬áá¯á¶áá°ááœá¬ážááŸá¯ááᯠááŒááºáááá¯á· áá¯ááºááœáŸááºáááºááá¯ááºáá«á
á€áááºááŸá¬ áá¯áá¹áááá¯á¶áá°ááœá¬ážááŒááºážááᯠáááºááŸááºááŒááºážá á¥ááá¬áá áºáá¯ááŒá áºáááºá
ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒááºáááºážáá¯ááºáá¯á¶áá°áá°ážááŒááºážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááŸááá«áááºá Cloud ááœááºá á€á¡áá¬ááẠáááŒá áºááá¯ááºáá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á¡á á¯á¡ááœá²á·ááẠááá·áºá¡á¬áž áá°á·á¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážá áœá¬ áá±ážáááá·áºáááºááŒá áºáá±á¬ááŒá±á¬áá·áºá ááá¯á·áá±á¬áº áááºáááá·áºááœááºážááŸá¯áá»á¬ážááœááºá áááºááẠOdyssey ááŸá connection pooler ááŸáááá·áº áá¯ááºááá¯ááºážááá¯ááºáá¬áá¯á¶áá°ááœá¬ážááŸá¯ááᯠááá¯á¡ááºáá«áá áááºážááẠááŒá áºááá¯ááºáááºá
Odyssey ááœáẠPgBouncer ááŸáá·áº áá¯á¶ážááááá¬áááŸááá±á¬ á á±á¬áá·áºááŒáá·áºááŸá¯ ááŸááá«áááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá°áá®áá±á¬ command áá»á¬ážá¡á¬ážáá¯á¶ážáá®ážáá«ážááᯠáá¯ááºáá±á¬ááºááá·áº áá°áá®áá±á¬ ááœááºááá¯ážááºáá áºáá¯ááŸááááºá áá áºáá¯áá¯áá»á±á¬ááºáá¯á¶ážáá±áá«áá ááœá²áá¯ááºáááºáá±á¬ááºážááá¯áá»ááºáá áºáᯠááá¯á·ááá¯áẠá¡áááºážáá¯á¶ážááŒá¿áá¬áá áºáᯠGitHub ááœáẠáá±ážááá¯á·áá«á ááá¯á¡ááºáá±á¬á¡áááá·áºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· ááŒáá·áºá áœááºáá«áááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááœáẠPgBouncer console á á¡ááááá¯ááºáá±á¬ááºááá¯ááºá áœááºážááŸáááŒá®ážáá¬ážááŒá áºáááºá
ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡ááŸá¬ážáááºááá·áºááŒááºáž ááŸááá«áááºá áá±áá¬áá±á·á áºá០áááºááŒáá¬ážáá±á¬ á¡ááŸá¬ážááᯠáá»áœááºá¯ááºááá¯á· ááŒááºáá±ážáá«áááºá áááºááẠáá±áá¬áá±á·á áºááœáẠá¡áááºááŒá±á¬áá·áº ááá«áááºáááŒá±á¬ááºážááŸáá·áº áááºážááœáẠáááºááá«áááºáááŒááºážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬áž áááŸááááºááŒá áºáááºá
áááºááẠPgBouncer ááŸáá·áº 100% ááá¯ááºáááºááŸá¯ááŸáááẠááá¯á¡ááºáá«á á€á¡ááºá¹áá«áááºááᯠááááºáá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááẠáá±ážáááºážáá±á¬áááºááœááºááŸááá±ááẠBouncer áá²á·ááá¯á· á¡áá¬ážáá°ááŒá¯áá°ááá¯ááºáááºá
áá¯á¶á á¶
Odyssey á¡áááºážá¡ááŒá áºáá¯ááºá¡ááŒá±á¬ááºáž á áá¬ážá¡áááºážáááºá
á¥ááá¬á¡á¬ážááŒáá·áºá "Pause / Resume" command áá»á¬ážááŸááááºá áá±áá¬áá±á·á áºááᯠá¡ááºááááºáá¯ááºááẠáááºážááá¯á·ááᯠá¡áá»á¬ážá¡á¬ážááŒáá·áº á¡áá¯á¶ážááŒá¯ááŒáááºá Postgres ááᯠá¡ááºááááºáá¯ááºááẠááá¯á¡ááºáá«á áá»áááºáááºááŸá¯áá±á«ááºážáá°ážá ááºááœáẠáá±áá¹ááááºááá¯ááºáááºá pg_upgrade ááŒá¯áá¯ááºááŒá®ážáá±á¬áẠááŒááºáááºá áááºáá«á ááŒá®ážáá±á¬á· Client áááºááá± Database áᬠááá¯ážááá¯ážááŸá±ážááœá±ážáá±áá¯á¶áá«áá²á á€áá¯ááºáá±á¬ááºáá»ááºááᯠá¡ááá¯ááºážá¡ááá¯ááºážááŸáá°áá»á¬ážá áá»áœááºá¯ááºááá¯á·áᶠáá°áá±á¬ááºáá¬áá²á·áááºá áá°á áá¡á±ážáá±ážáá°ážá áá«áá±ááá·áº áááŒá¬áááºááŸá¬ á¡áá¬á¡á¬ážáá¯á¶ážááŒá áºáá¬áááá·áºáááºá (á¡á±ážáá²áá±ááŒá®)
ááá¯á·á¡ááŒááºá PgBouncer ááŸáá¡ááºá¹áá«áááºá¡áá áºáá»á¬ážáá²ááŸáá áºáá¯ááẠYandex.Cloud ááœááºá¡áá¯ááºááá¯ááºáá±á¬áá°áá áºáŠážááŸáá»áœááºá¯ááºááá¯á·áá¶áá°áá±á¬ááºáá¬áá±á¬ SCRAM Authentication á¡ááœááºáá¶á·ááá¯ážááŸá¯ááŒá áºáááºá ááŸá áºáá¯áá¯á¶ážááẠááŸá¯ááºááœá±ážááŒá®áž á¡áá±ážááŒá®ážáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážááŒá áºáááºá
áá«ááŒá±á¬áá·áº Odyssey á áá¬áá²á·áá¯ááºáá¬ážáá¬áá²ááá¯áᬠááŒá±á¬ááŒáá»ááºáá«áááºá á¡áá¯áá² áá¯ááºáááºážáááºážáá±ážáá»ááºáá«áá±ážáááºá
ááá·áºááœáẠáááºáá á¬ááŒáá·áºááá¯ááºááŸá áºáá¯ááᯠááŸá®ááá¯áá±áááá·áº Odyssey á¡áááºážá¡ááŒá áºá¡ááŒá±áá¶ááŸááááºá áá®áá®á á¬ááŒáá·áºááá¯ááºááẠPostgres ááááºážá áá¬áž áááá¯ááá¯áá±á¬ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá áºáá¯ááŒá áºáááºá ááá¯ááá¯áááºááŸá¬ Postgres á áá°áááºážáááá¯ááᯠ3 ááẠááŸá±á·á áœááºážáá»á¬ážááŸáá·áº áá±á¬ááºáááºážáá»á¬áž áááŸááºááá¯ááºááá·áº á á¶á á¬áá»á¬ážááŒá áºáááºá áááºážááá¯á·ááᯠáá®áá®á á¬ááŒáá·áºááá¯ááºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá
Machinarium á á¬ááŒáá·áºááá¯ááºááẠthread á¡áá±á¬ááºá¡áááºáá±á¬áºáá±ážá á¬ááŒáá·áºááá¯ááºááŒá áºáááºá ဠMachinarium á áá±ážáááºáá±á¬ á¡ááá¯ááºážá¡á ááᯠá á¯á ááºážáá¬áá¬á áá¬ážááŒáá·áº áá±ážáá¬ážáá¬ážáááºá áá«áá±ááá·áº áá áá¯ážááááºáá«áá²á·á 15 ááá¯ááºážáá²ááŸááááºá
Odyssey áááá¯áᬠáá±á¬áºááá¯áááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±ááá·áº áááºáá ááºáá áºáá¯ááŸááááºá á€á ááºááẠá¡ááẠTCP áá»áááºáááºááŸá¯áá»á¬ážááᯠáááºáá¶ááŒá®áž á¡áá¯ááºááá¬ážáá»á¬ážá¡ááŒá¬áž ááŒáá·áºáá±áá±ážáááºá
áá±á¬ááºáááºáá»á¬ážá áœá¬á¡ááœáẠááá¯ááºááœááºáá°ááẠá¡áá¯ááºááá¬ážáá áºáŠážá¡ááœááºáž á¡áá¯ááºáá¯ááºááá¯ááºáááºá áááºáá á¬ááœá²ááẠááœááºááá¯ážááºááœáẠáááá¯á¡ááºáá±á¬á·áá±á¬ áá»áááºáááºááŸá¯áá»á¬ážááᯠáá»ááºááẠááœááºááá¯ážááºááŸáá·áº áááá¯áá®á¡áá¯ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒááºážááá¯áááºáž áá¯ááºáá±á¬ááºáá«áááºá
Odyssey ááẠáá¯á¶ááŸáẠPostgres á ááºážáááºááŸá¯á¡á á¯á¶ááᯠá¡áá¯á¶ážááŒá¯á á ááºážáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠBouncer ááŸáááá·áº install-check ááá¯áá¯ááºáá±á¬ááºááŒá®áž Odyssey ááŸáááá·áºá áá»áœááºá¯ááºááá¯á·ááẠnull div ááá¯áááŸááááºá Bouncer ááŸáá·áº Odyssey ááœáẠá¡ááá¡áá»áá°áá®ááŒááºážáááŸááá±á¬ áááºá áœá²áá¯á¶á á¶áá»ááŒááºážááá¯ááºáᬠá ááºážáááºááŸá¯áá»á¬ážá áœá¬ááŸááááºá
ááá¯á·á¡ááŒááºá áááºážááá¯á·áááá¯ááºááá¯ááºá ááºážáááºááŸá¯ááŒá¯áá¯ááºáá±á¬áá¬ááºáá±á¬ááºážáá»á¬ážá áœá¬ááŸááááºá ááŒá®ážáá±á¬á· Odyssey ááᯠá ááºážáááºááá¯á· áá°ááá¯á·áá²á· á ááºážáááºááŸá¯ááœá±ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·á cascade configuration ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬á¡á á¯á¡áá±ážáá»á¬áž- Postgres + Odysseyá PgBouncer + Odysseyá Odyssey + Odyssey ááá¯áá±áá»á¬á á±áááºá¡ááœáẠOdyssey ááẠcascade ááŸáá¡á áááºá¡ááá¯ááºážáá áºáá¯áá¯ááœááºá¡áá¯á¶ážáááºáá«áá áááºážáááºáááºážá¡áá¯ááºáá¯ááºáá²ááŒá áºááẠáá»áœááºá¯ááºááá¯á·áá»áŸá±á¬áºááá·áºáá¬ážááá·áºá¡ááá¯ááºáž
Rake
áá»áœááºá¯ááºááá¯á·ááẠOdyssey ááá¯áá¯ááºáá¯ááºáá¬ááœááºá¡áá¯á¶ážááŒá¯áááºá ááŒá®ážáá±á¬á· á¡áá¬á¡á¬ážáá¯á¶áž á¡áááºááŒá±áááºááá¯á· áá«ááŒá±á¬ááẠááá¬ážáá»áŸáááŸá¬ ááá¯ááºáá°ážá ááá¯ááºáá°ážá á¡á²áá«á áá¯ááºáá«áááºá áá«áá±ááá·áº á¡ááŒá²áááºážáá±á¬á· ááá¯ááºáá«áá°ážá á¥ááá¬á¡á¬ážááŒáá·áºá áá¯ááºáá¯ááºááŸá¯ááœááºá¡áá¬á¡á¬ážáá¯á¶ážáááºá¡áá¯ááºááŒá áºáááºá ááá¯á·áá±á¬áẠPostgreSQL Professional ááŸáá»áœááºá¯ááºááá¯á·ááá°áááºáá»ááºážáá»á¬ážáááºááŸááºáá¬ááºááá¯á ááá·áºááŸá¯ááŸááááºáá¯ááŒá±á¬ááŒáááºá áá°ááá¯á·ááááºááŒá áºáá²á·áááºá áá«ááá¯á·ááá°ááá¯á·ááá¯ááŒááºáá±ážáááºá áá«áá±ááá·áº ááá¯ážááŸááºážáá«áááºá
ááá¯á·áá±á¬áẠáá»áááºáááºááŸá¯áá±á«ááºážáá°ážá ááºááœáẠá¡ááẠTLS áá»áááºáááºááŸá¯áá»á¬ážááŸáá·áº á¡ááœáẠTLS áá»áááºáááºááŸá¯áá»á¬ážááᯠááœá±á·ááŸááá²á·áááºá áá»áááºáááºááŸá¯áá»á¬ážááẠáá¯á¶ážá áœá²áá°áááºááŸááºáá»á¬ážááŸáá·áº áá¬áá¬á¡ááá¡ááŸááºááŒá¯áááºááŸááºáá»á¬áž ááá¯á¡ááºáááºá
Bouncer ááŸáá·áº Odyssey áá¬áá¬á¡ááá¡ááŸááºááŒá¯áááºááŸááºáá»á¬ážááᯠáááºážááá¯á·á pcache ááŒáá·áº ááŒááºáááºáááºááŸá¯áá±á¬áºáááºážá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áá»áœááºá¯ááºááá¯á·á á¡ááœááºá¡á á¬ážááŸá Odyssey ááẠáá±á¬ááºáá¯á¶ážááœáẠá€áááºááŸááºááá¯áááºááŸá¯ááŒááºážá á áá áºá áœááºážáá±á¬ááºáááºááá¯á· áááºáááºáá±áá±á¬ááŒá±á¬áá·áº áá¯á¶ážá áœá²áá°áááºááŸááºáá»á¬ážááᯠpcache á០ááŒááºáááºáááºááŸá¯ááẠáááá¯á¡ááºáá«á áá¯áá¶ááẠá¡áá»áááºá¡ááŒá¬ááŒá®ážááá±ážáá²á·áá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡á¶á·á¡á¬ážááá·áºá áá¬ááŒá áºáá¬áááºá á¡á ááá¯ááºážááœáẠáááºážááẠáá»ááºážááŒá±á¬ááºážá¡ááá¯ááºáž á¡ááá¯ááºážá¡áᬠáá»á²á·ááœááºáá²á·áá±á¬áºáááºáž áá áºááŒáá¯ááºááẠáá»áááºáááºááŸá¯ 20 áááºáá¬ááŒá®ážáá±á¬áẠá€ááŒá¿áá¬ááẠáá°á·á¡ááá¯ááá¯áá±á«áºáá¬áááºá
Pluggable Authentication Method ááẠBuilt-in Lunux áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááá¯ááºááá·áº á áœááºážáááºááŒá áºáááºá PgBouncer ááœáẠPAM á០áá¯á¶á·ááŒááºááŸá¯ááᯠá á±á¬áá·áºááá¯ááºážááẠáá®ážááŒá¬áž thread áá áºáá¯ááŸáááá²á·ááá¯á· áááºááŸááá»áááºáááºááŸá¯ááᯠáá±á¬ááºááœááºáá±ážááŒá®áž áááºážááá¯á·á¡á¬áž PAM thread ááœáẠáá±ááá¯ááºááẠáá±á¬ááºážááá¯ááá¯ááºááá·áº áááºá PgBouncer thread áá áºáá¯áá«ááŸááááºá
ááá¯ážááŸááºážáá±á¬ á¡ááŒá±á¬ááºážááŒáá»ááºáá áºáá¯ááŒá±á¬áá·áº á€á¡áá¬ááᯠáá»áœááºá¯ááºááá¯á· á¡áá±á¬ááºá¡áááºááá±á¬áºáá²á·áá«á áá«ááá¯á·ááŸá¬ á á¬ááŒá±á¬ááºážááœá±á¡áá»á¬ážááŒá®ážááŸááááºá áá«ááᯠáá¬ááŒá±á¬áá·áº ááá¯á¡ááºáá¬áá²á
áááºážááẠááá·áºááœáẠPAM á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááŒááºážááŸáá·áº PAM á á áºááŸááºááŒááºážááá¯ááºáá«áá PAM á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááŒááºážááŸáá¯ááºážááŒá®ážááẠPAM á á áºááŸááºááŒá±á¬ááºážááá¯ááºáá±á¬á á áºááŸááºááŒá±á¬ááºážááᯠáááááá¬áá¬ááŸá±á¬áá·áºááŸá±ážá á±ááá¯ááºáááºá á€á¡áá¬ááẠáá»áœááºá¯ááºááá¯á· áááŒá¯ááŒááºááá±ážáá±á¬ á¡áá¬áá»á¬ážáá²á០áá áºáá¯ááŒá áºáááºá áá«áá±ááá·áº ááŒááºáá»ááºáááºááá¯áááºáá±á¬á· áá®ááá¯áá¯ááºááá¯á·ááá«áááºá
áá±á¬ááºáá áºáá¯ááá±á¬á· á¡áááºáá»áááºáááºááŸá¯á¡á¬ážáá¯á¶ážááᯠáááºáá¶ááá¯ááºáá²á· ááŒáá¯ážáá áºáá¯ááŸááá«áááºá ááá¯á·áá±á¬áẠáááºážááá¯á·á¡á¬áž TLS áááºááœá²ááŸá¯ááºáááºááá·áºáá±áá¬ááœáẠá¡áá¯ááºááá¬ážáá±áááºááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáááºá
á¡á±á¬ááºááŒá±ááá¯ááºážá ááá·áºááœáẠááœááºáááºáá»áááºáááºááŸá¯áá±á«ááºáž 20 ááŸááá»áŸáẠáááºážááá¯á·á¡á¬ážáá¯á¶ážááᯠáááºáá¶áá«áááºá ááŸáá·áº client áááºá០libpq ááẠá¡áá»áááºáá¯ááºááœá¬ážáááºáá»á¬ážááᯠá¡á á®áááºáá¶áááºááŒáá«áááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áº 000 á áá¹ááá·áºááŒá áºáá¯á¶ááááºá
áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠáá±áá¬áá±á·á áºááᯠáá áºáá»áááºáááºážááœáẠááááºááá¯ááºáá«áá áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠááááºážááááºážááá¯ááºáá±á¬ áááºá ááºážááŒááºážááŒáá·áº áá¯á¶ážá¡á¯ááºáá¬ážááá¯ááºáá±á¬ááŒá±á¬áá·áº áá±áá¬áá±á·á áºááá¯á· ááááºááá¯ááºáá«á
áá»áœááºá¯ááºááá¯á·áááºáá¶ááá·áº TCP áá»áááºáááºááŸá¯á¡áá±á¡ááœááºááᯠááá·áºáááºáá¬ážáá±á¬ááŒá±á¬áá·áº á€áá±áá¬ááœáẠPgBouncer á០á¡á á®á¡á ááºááᯠáá°ážáá°ááŒá±á¬ááºáž áááá¯á¶ážáá»á¯ááºáá¬áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠáá»áááºáááºááŸá¯áá»á¬ážááᯠáááºáá¶áá±ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºáá±á¬áºáááºáž áááºážááá¯á·ááẠáá±á¬ááºáá¯á¶ážááœáẠáááºááœá²ááŸá¯ááºáááºááẠá¡áá»áááºáááŸááá«á CPU á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáááŒá¯ááºážáá®ážá á±ááẠáááºážááá¯á·ááᯠáááºážá á®áá¬ážáááºá áá±á¬ááºááŸááá¬áá±á¬ áá»áááºáááºááŸá¯á¡á¬ážáá¯á¶ážá¡ááœáẠáááŒáá¯ááºááẠáááºááœá²ááŸá¯ááºáááºááŒááºážá¡á¬áž áá¯ááºáá±á¬ááºááá¯ááºáááºááá¯ááºááŒá±á¬ááºáž ááŒá áºáá±á«áºá á±áá«áááºá áá«áá±ááá·áº áááºá áá±á¬áºáá±á¬áºáá±ážáá±áááºáá±á¬áẠá¡áááºážáá¯á¶áž áá áºá á¯á¶áá áºáá±á¬ááºá áá±áá¬áá±á·á áºáá²ááᯠáááºáááá·áºáááºá
áááºážááŒááŒá±áá¯á¶
Odyssey ááŸá¬ á¡áá¬áááºááŸá¬ áá¬ááŒááºáá»ááºáá²á ááá¯áá·áºááá¯ááá¯áẠááœá¶á·ááŒáá¯ážááá¯ážáááºááá¯á· áá¬ááœá± á¡áááºááá·áºááŒá áºáá±ááŒá®áá²á
ááŒáá¯ááºá 2019 áááºáá±á·á¡ááá
á€áááºááŸá¬ ááŒáá¯ááºáááœáẠOdyssey áááºážááŒááŒá±áá¯á¶á¡ááá¯ááºážááŒá áºáááºá
- áá»áœááºá¯ááºááá¯á·ááẠSCRAM ááŸáá·áº PAM á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááŒááºážááᯠááá¯áá»ááºáá«áááºá
- áá»áœááºá¯ááºááá¯á·ááẠá¡ááá·áºá¡áá±á¡áá¬ážááœáẠá á¬áááºááŒááºážáá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáááºááá·áºáá±ážááá¯áá«áááºá
- á¡áœááºááá¯ááºážááᯠááŒááºá áá»ááºáá«áááºá
- áá¬áá¬áá±á«áºááœáẠáá±áá¹ááááºáá±ážááá¯ááºáááºá
áá®áááºážááŒááŒá±áá¯á¶áá²á· áá áºáááºáá±á¬ááºá ááŒá®ážááœá¬ážáá«ááŒá®á áá«ááá¯á·á ááá¯ááºáá°ážá ááŒá®ážáá±á¬á· áá«á áá±á¬ááºážáááºá áá«ááᯠáá¬ááœá±áá»ááºáá±ážáá² ááœá±ážááœá±ážááŒá®áž áááºááá·áºááŒáá·áºáá¡á±á¬ááºá
áá°á¡áá 10 ááŸá áááºá Postgres ááœááºá áá»áááºáááºááá·áºá¡áá« session_attrs ááá¯áááºááŸááºááá¯ááºáááºá áá»áááºáááºááŸá¯á¡ááœááºážááŸá áá±áá¬áá±á·á áºáááºáá¶áá°á¡á¬ážáá¯á¶ážááᯠá á¬áááºážááŒá¯á á¯ááŒá®áž áá±áá¬áá±á·á áºááá¯á· áá¬ááŒá±á¬áá·áºááœá¬ážáááŒááºážááŒá áºáááº- áá¯áá±ážááá¯ááºááẠááá¯á·ááá¯áẠáááºáááºáá¬ááŒá áºáááºá ááŒá®ážáá±á¬á· áá¬ááºáá±á¬ááºážááá¯ááºááá¯ááºá session_attrs áá²á· ááá¯á¡ááºáá»ááºááœá±ááᯠááŒáá·áºáááºážáá±ážááá·áº áá°á¡ááŒáá¯ááºáá¯á¶ážá á¬áááºážáá²á ááááá¯á¶áž host ááᯠááœá±ážáá«áááá·áºáááºá
áá«áá±ááá·áº áá®áá»ááºážáááºááŸá¯áá²á· ááŒá¿áá¬ááá±á¬á· áá°ážáá°ááŸá¯ ááŸá±ážááœá±ážááŸá¯ááᯠáááááºážáá»á¯ááºááá¯ááºáá«áá°ážá ááá·áºáááºáá±á¬ááºááŸá¯á¡ááœáẠáááºáá¶ááá¯ááºáá±á¬á¡áá»áááºá¡ááá¯ááºážá¡áá¬áá áºáá¯á¡áá áá±á¬ááºáá»áá»ááºáá±áá²á·áá±á¬ áá¯á¶á á¶áá°á¡áá»áá¯á·ááᯠááá·áºááœááºááŸáááá¯ááºáá«áááºá áá¯á¶áá°áá áºáá¯áá±á«áºááŸá read queries áá»á¬ážááᯠá¡ááŒáá·áºá¡ááá¯ááºáá±á¬ááºááá¯ááºá á±áááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá á¬ááááºááá¯ááºáá±á¬á¡áá«ááœáẠááááºáááºááá¯ááºáá±á¬ Odyssey á á áœááºážáááºááᯠáá¶á·ááá¯ážáá±ážáááºááá¯á¡ááºáá«áááºá
Odyssey ááẠáá±áá¬áá±á·á áºááá¯á· á¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ ááœá¬ážááŒá®áž áá°ááááºážá០áá¯á¶áá°áá°ážááẠá¡ááœá¬á¡áá±ážááᯠáá±á¬ááºážááá¯ááááºá áááºážááẠááá·áºáááºáááºááá¯ážááá¯á· áá±á¬ááºááŸááá«áá áá±áá¬áá±á·á áºááá¯á· áá±á¬ááºážááá¯ááŸá¯á¡áá áºáá»á¬ážááᯠááœáá·áºáááŒá¯áá«ááŸáá·áºá áááºážááẠáá»áááºáááºááŸá¯áá»á¬ážááᯠááŒááºáááºá áááºááẠááá¯á¡ááºááŒá±á¬ááºážááŸáá·áº áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠá¡ááŒá¬ážá¡áááºááŸááºááᯠááœá±ážáá»ááºááẠááŒá áºááá¯ááºáááºá áááºážááẠáá±áá¬áá±á·á áºá០áá°ážáá°ááŸá¯áá±á¬ááºáá»ááŒááºážááᯠáá»ááºááŒááºá áœá¬ ááŒááºáááºááá°ááá¯ááºááŒá®áž áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááŒáá·áº áá¯á¶á·ááŒááºááẠáá áºáááºááŒááºááœá¬ážáááºááŒá áºáááºá
áááºážááẠopen source ááŒá áºáá±á¬ááŒá±á¬áá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááẠá¡áá»áááºá¡ááá¯ááºážá¡áá¬áá áºáá¯áá±ážááẠáááºáá²áááºá ááá¯á·áá±á¬áº PgBouncer á០áá»áœááºá¯ááºááá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬ážáá²á·ááá¯á· 2,5 ááŸá áºááá¯ááºáᯠáá»áœááºá¯ááºáá»áŸá±á¬áºááá·áºáá«áááºá á€áááºááŸá¬ Odyssey ááœáẠáá»áœááºá¯ááºááŒááºááá¯áá±á¬ á¡ááºá¹áá«áááºááŒá áºáááºá
ááá¯á·áá±á¬áº proto3 ááŸá message protocol á¡ááá·áºááœáẠááŒááºáááºáá¬ážáá±á¬ ááŒá±ááŒá¬áá»ááºáá áºáᯠááŸááá«áááºá ááŒááºáááºáá¬ážáá²á· áá¯ááºááŒááºáá»ááºáá áºáá¯ááᯠáááºáá®ážááá¯ááºáá²á· á¡áá»ááºá¡áááºááœá±áᬠááœá²á·á ááºážáá¯á¶áá¯á¶á á¶áá²á· áá±á¬ááºáá¬áá²á·á¡áá« áá«á áá±áá¬áá«áá²á ááá¯á·á¡ááŒáẠá¡áá»áá¯á·áá±á¬ server áá»áááºáááºááŸá¯ááœáẠclient á០ááŒááºáááºáá¬ážáá±á¬ statements áá»á¬ážááᯠáááºáá®ážááẠáá±á¬ááºážááá¯ááŒá±á¬ááºáž áá¬ážáááºááŸá¯ááᯠáá»áœááºá¯ááºááá¯á· áá¶á·ááá¯ážáá±ážááá¯ááºáá«áááºá ááœá±áá±ážááœá±áá°ááᯠááááºáá¬ážáá±á¬áºáááºáž áá¬áá¬ááŸáá·áº áááá¯ááºážááá·áºá¡ááŒá¬áž áá»áááºáááºááŸá¯ááᯠáááºáááºááááºážááááºážáá¬ážááẠááá¯á¡ááºáá«áááºá
ááá¯á·áá±á¬áº á€áá±áá¬ááœáẠááá¯ááºáá¬áá±á¬á·ááºááœáẠááœá²ááœá²ááŸá¯áá áºáᯠááŒá áºáá±á«áºáá¬áááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áá áºá á¯á¶áá áºáŠážá០áá±á¬ááºáááºá áááºáá®ážáá¬ážáá±á¬ á€áá¬áá¬áá»áááºáááºááŸá¯á¡á¬áž á€áá¬áá¬áá»áááºáááºááŸá¯á¡á¬áž áááºáá®ážááá·áºáá±á¬ááºáááºáá»á¬ážááŒá¬ážááœáẠáááºááá·áºááŒááºáááºáá¬ážáá±á¬áá¯ááºááŒááºáá»ááºá¡áá»áá¯ážá¡á á¬ážááᯠáá¬ážáááºááẠááá¯á¡ááºáááºáᯠáá áºá á¯á¶áá áºáŠážááŸááŒá±á¬áá±á¬ááŒá±á¬áá·áº á€áá¬áá¬áá»áááºáááºááŸá¯ááᯠáá»áŸáá±ááŒááºážááŒá áºáááºá
á¡ááŒá¬ážáá¬áá¬áá»áááºáááºááŸá¯ááœáẠááá¯ááá¯á·áá±á¬ááŒááºáááºáá¬ážáá±á¬áá¯ááºááŒááºáá»ááºááá¯áááºáá®ážááŒá®ážáá±á¬ client ááẠááá·áºáá¶áá¬áá«á áááºážááá¯áááºáá®ážáá«áᯠAndres Freund ááŸááŒá±á¬ááŒá¬ážáá²á·áááºá áá«áá±ááá·áº client á¡á á¬áž database áá²ááŸá¬ queries ááœá±ááᯠexecute áá¯ááºááᬠáááºážáááºážááŸá¬ážáá¯á¶áá±á«áºáá±ááá·áº database áá²á· á¡ááŒááºá¡ááŸááºá¡ááŒááºá¡ááŸááºáááºáá¶ááá¯á·á¡ááœáẠprotocol áá±ážáá²á· developer áá²á·á¡ááŒááºá¡ááá±á¬á· network connection ááᯠááá¯ážááá¯ážááŸááºážááŸááºážáá² áá±ážáá¬ážááẠá¡áááºááŒá±ááŸá¬áá«á á¡á²áá®ááᯠááŒááºáááºáá¬ážáá²á· áá±ážááœááºážáá áºáá¯ááŸááááºá
ááŒá®ážáá±á¬á· áá»áœááºáá±á¬áºááá¯á· á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯á·ááá¯á¡ááºáá²á· áá±á¬ááºáááºá¡ááºá¹áá«áááºáá áºáá¯á ááᯠáá»áœááºá¯ááºááá¯á·ááœáẠPgBouncer ááŸáá·áº ááá¯ááºáááºáá±á¬ á á±á¬áá·áºááŒáá·áºááŸá¯ ááŸááááºá áá»áœááºá¯ááºááá¯á·ááẠáá»ááºážáá»áŸáá±ážááŒááºážááŸá¯áá¯ááºáá±á¬ááºáá»áááºááᯠááŒááºáá±ážááá¯ááºáá«áááºá ááá¯á·áá±á¬áº áá±ážáá¯á¶ááŸá áá»ááºážáá»áŸá¡áá»áááºááẠáá»ááºážáá»áŸá¡áá°áá»áááºááŒá áºáááº- á¡áá»áá¯á·ááŸá¬ á¡á±ážáááºá á¡áá»áá¯á·ááŸá¬ áá°ááœá±ážáááº- áá»ááºážáá»áŸá¡á¬ážááŒáá·áº áá°ááá¯ááºáž áá»ááºážáá¬ááŒáááºá áááŸááºáá«áá°ážá
á¡áááºážá¡ááŒá áºáá»á¬ážááᯠááŒá¯ááºážáá®ážáá±ááŒá®áž á á±á¬áá·áºááŒáá·áºááŸá¯ááᯠááá¯ááá¯áááºáá¶ááá¯ááºá á±ááá·áº ááŸá±ážááœá±ážáá±á¬áá±ážááŒááºážááŸá¯áá»á¬ážááŸááá±ááŒá±á¬ááºáž ááœáŸááºááŒááá·áº áá¬ááá¯ááºááŸá¯ááºážáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááá¯á¡ááºáá«áááºá
á¡áá±ážááŒá®ážáá¯á¶ážááá±á¬á· áá»áœááºáá±á¬áºááá¯áá»ááºáá¬á version 1.0 (Version 1.1 áááœááºááŸáááŒá®ážáá¬áž)á á¡ááŸááºááŸá¬ Odyssey ááẠááᯠáá¬ážááŸááºáž 1.0rc ááœáẠááŸááá±ááŒá®ážá ááá¯ááá¯áááºááŸá¬ ááŒáá·áºáá»ááá±áž ááá¯ááºá á¬ážááŸááºáá±á¬ááºáž ááŒá áºáááºá ááŒá®ážáá±á¬á· áá»áœááºáá±á¬áºá á¬áááºážááœááºážáá¬ážáá²á· ááŒá¿áá¬á¡á¬ážáá¯á¶ážáᬠmemory ááá¯á ááá·áºááŸá¯ááŸááœá²ááŒá®áž á¡ááá¡áá»áá°áá®áá²á·áá¬ážááŸááºážáá²á· ááŒá±ááŸááºážáá±ážáá²á·áá«áááºá
áá¬ážááŸááºáž 1.0 ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáá¬á¡áááá¹áá¬ááºááŸááááºáááºážá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¡ááŒá±á áá¯ááºá áááºážáá»á¬ážááá¯á· Odyssey ááᯠááŒáá·áºááŒááºáá¬ážáááºá áááºážááẠáá»áœááºá¯ááºááá¯á·ááá±áá¬áá±á·á áºáá»á¬ážáá±á«áºááœááºáááºáááºáá±ááŒá®ááŒá áºáá±á¬áºáááºážá áá áºá áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯áá»áẠ1 ááá¯á·áá±á¬ááºááŸááá±á¬á¡áá«á áááºážááẠááŒáá·áºáá»áááá·áºáá¬ážááŸááºážááŒá áºááŒá±á¬ááºážááŸáá·áº áááºážááẠ000 áá¯áá±á«áºááá¯ááºáá±á¬áá¬ážááŸááºážáá áºáá¯ááŒá áºáááºá
ááœááºááŒá°ááá®ááŸááá°á¡áá»á¬ážá¡ááŒá¬ážá ááá¯áá¬ážááŸááºáž 1.0 ááœáẠáá±áá¹ááááºááŒááºážááŸáá·áº SCRAM ááá¯á·ááᯠáá±á¬ááºážááá¯áá²á·ááŒáááºá ááá¯á·áá±á¬áº áááºážááẠáá»áœááºá¯ááºááá¯á·ááẠSCRAM ááŸáá·áº áá±áá¹ááááºááŒááºážááá¯á·ááᯠááááºááá±ážáá±á¬ááŒá±á¬áá·áº áá±á¬ááºáá¬ážááŸááºážááᯠáá¯ááºáá¯ááºááẠááá¯á¡ááºáááºáᯠááá¯ááá¯áá«áááºá ááá¯á·áá±á¬áº ááŒá áºááá¯ááºáá»á± áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº á€ááŒá¿áá¬ááᯠáá»ááºááŒááºá áœá¬ ááŒá±ááŸááºážááá¯ááºáááºááŒá áºáááºá
áááºážáá²á· ááœá²áááºá¡á¬ážááᯠáá«á á±á¬áá·áºáá±áááºá Bouncer áá²á· áááºážááŸá¬ áá¬ááŒá¿áá¬ááŸááá² áá«áááºáž ááŒá¬ážáá»ááºáá«áááºá á¡á²áá«ááœá±ááᯠááœá±ážááœá±ážááŒáá·áºáá¡á±á¬ááºá áááºááá¯á¡ááºáá±á¬áá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯á·ááᯠáá»áœááºá¯ááºááá¯á·á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá±áááºá
áá®á¡ááá¯ááºážáá±áž á¡áá¯á¶ážáá áá¬ážáá±á¬ááºáá»ááºáá«ááẠá áá»á±ážáá°ážáááºáá«áááº!
áá±ážááœááºážáá»á¬ážááá¯
áá»áœááºá¯ááºááẠáá»áœááºá¯ááºáááá¯ááºááá¯áẠapplication_name ááᯠáááºááŸááºáá«áá Odyssey ááœáẠááœá±áá±ážááœá±áá°áá±á«ááºážá ááºážááŒááºážá¡áá«á¡ááẠáááºážááᯠááŸááºáááºá áœá¬ áááºááá·áºáá±ážááá¯á·ááá¯ááºáááºáá¬ážá
Odyssey ááá¯á·ááá¯áẠBouncer
Odyssey ááŸá¬á Bouncer ááœááºáááºážááá¯áá áºáá»áááºá
á¡á á¯á¶áá¯ááºáááºá
áá»áœááºá¯ááºá áá»áááºáááºááŸá¯á¡á á áºá¡ááŸááºááẠá¡ááŒá¬ážáá»áááºáááºááŸá¯áá»á¬ážááœáẠáá¯ááºáááºáá«áá áááºážááᯠáá¯ááºááœáŸáá·áºáááºáá¬ážá
á á¬áááºážááœááºáá±á¬áºááŒáá¬ážáá±á¬ ááá·áºáááºáá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºááá¯á·ááŒá¯áá¯ááºáá«áááºá á€á á¬áááºážááœáẠapplication_name ááŸáá áááŸá áááŒá±á¬ááá¯ááºáá«á áá°á·ááᯠááá¯ááŸá¬ááœá±á·áá°ážáááºáááºáááºá áá°áá®áá±á¬áá±á¬ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºááá¯á·áááºááŸááºáá«áááºá áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááŒáá·áºá set ááẠá áááºáá»áááºá¡ááœááºáž client á០ááá·áºááœááºážáá¬ážááá·áº á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáá±ážáááºááŒá áºáááºá
á¡á á®áááºáá¶á á¬á¡ááœáẠAndrey áá»á±ážáá°ážáááºáá«áááºá á¡á á®áááºáá¶á á¬áá±á¬ááºážá Odyssey á áááá áºááá¯ááºáž ááá¯ááŒááºááŒá®áž ááœá¶á·ááŒáá¯ážáá¬áá¬ááᯠáááºážáá¬áá«áááºá áá®á¡ááá¯ááºážáááºááœá¬ážáá»ááºáá«áááºá Odyssey ááẠááá°áá®áá±á¬áá±áá¬áá±á·á áºáá»á¬ážááá¯á· áá áºááŒáá¯ááºáááºáá»áááºáááºááá¯ááºá á±áááºá¡ááœáẠMulti data-source connection ááŸáááẠááá·áºá¡á¬áž áá»áœááºá¯ááºááá¯á·áá±á¬ááºážááá¯áá¬ážááŒá®ážááŒá áºáááº
áá¯ááºáááºá áá®ááœá±ážááœá±ážááŸá¯ááᯠááŸááºáááá±áá¯á¶ááááºá ááá¯ááœáẠááá¯ááŸá±á¬ááºááŸá¯áá»á¬ážá áœá¬ ááŸááá±ááŒá®ááŒá áºáááºá áá«áá±ááá·áº áá°ááá¯á·ááŒá¬ážááŸá¬ á¡ááŒá±á¬ááºážá¡áá²áááŸááá«áá°ážá áá»áœááºá¯ááºááá¯á·áááºááŸá áá»áœááºá¯ááºááá¯á·ááẠáá¬áᬠá¡áááºááŸááºáá±áá±ážááŒá±á¬ááºáž á á áºáááºážáá±á¬ááºáá°ááŒá®áž pg_recovery áá¯áá±á«áºááá·áºáá°ááẠáá»ááºááœááºááŸá¯áá áºáᯠááŒá áºááœá¬ážáá²á·ááŒá±á¬ááºáž áá¬ážáááºááá«áááºá áá«ááá¯á· ááááºáá® ááá±á¬ááºáá°ážááá¯áá²á· á á¶ááŸá¯ááºážáá áºáᯠááŸááááºá á¡ááŸá¬ážááœá±ááá± áá áºáááºážáááºážáá²á· áá¬ážáááºááá·áºááá¬ážá ááá¯ááá¯áááºááŸá¬ á¡ááŒá¶á¥á¬ááºááẠá áááºáááºá á¬ážááœááºáá±á¬ááºážááŒá®áž ááœá±ážááœá±ážáá±ááŒááºážááŒá áºáááºá áá±á¬ááºáááºááŸááºáá»ááºáá»á¬ážáá±ážáá«á C áááá²á· á¡áá¯ááºááá¬ážááœá±ááŸáááẠá¡áááºážáá±á¬ááºážáá«áááºá
á¡ááá®áá±ážááŸááºážáá±á¬á·ááºáá²áá±ážááœá²áá°áá»á¬ážá¡ááœáẠáá¯á¶áá°á á¯áá»á¬ážááᯠáááºááá¯ááºááá»áŸ ááá¯ážááŸááºážá¡á±á¬ááºááŒá¯áá¯ááºáá±ážááá¯áá±á¬ááŒá±á¬áá·áº áá¯á¶áá°áá»á¬ážáá áºáá»áŸá±á¬áẠá¡ááá¯ááºážá¡áá¬áá»á²á·ááŒááºážááŒá¿áá¬ááá¯áááºáž áá»áœááºá¯ááºááá¯á·á áááºáááºá á¬ážáá«áááºá áá«áá±ááá·áº áá®áá±áá¬ááŸá¬ áá»áœááºáá±á¬áº áá±á¬ááºááẠááŸááºáá»ááºááœá± áá±ážáá»ááºáá«áááºá á¥ááᬠá¡ááá¡áá» áá¯ááºáááºážá áá±á¬ááºážáá±á¬ááºáž áá¯ááºáááºážá
áá±ážááœááºážá áá¯á¶á á¶áá°ááœá±á¡ááŒá±á¬ááºážáá«á ááá·áºááœáẠáá¬á áá¬ááŸáá·áº áá¯á¶á á¶áá°áá»á¬ážá áœá¬ ááŸááááºá ááœá²ááŒá¬ážááŸá¯áá»á¬ážááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááẠáá»áááºáááºááŸá¯áá»á¬ážá¡ááœáẠááááºáá¶ááẠáááŒá¬áááááºážáá±á¬ áá¯á¶á á¶áá°ááá¯á·ááœá¬ážááŒá±á¬ááºáž áááºááŸá¬ážáá«áááºá áá±áá¬á ááŒá¬ážáá¬ážáá»ááºááŸá¬ ááá·áºáá¯ááºáááºážááᯠáá»á±áááºáááºááá¯ááºááŒá±á¬ááºážááŸáá·áº áááºážááᯠáá¯á¶áá°ááá°ážááá»ááºáž ááá¯áá±áá¬ááá¯á· áááºááœá¬ážáááºááá¯ááºááŒá±á¬ááºáž áááºááŒá±á¬áá²á·áááºá áá áºáá»áááºáááºážááŸá¬ááẠáááºááẠááá¯áá±áá¬ááá¯á· á¡áá»áááºá¡ááŒá¬ááŒá®áž áááœá¬ážáá² á áááºááœá¬ážáá«áá ááá¯á¡ááºáá±á¬ áá±áá¬ááᯠáá»ááºáá»ááºážáááŸáááá¯ááºáá±á¬á·ááẠááá¯ááºáá«á ááá¯ááá¯áááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠáá¬á áá¬áᶠá¡áááºáááŒááºááœá¬ážáá«áá ááá¯áá±áá¬ááœáẠáááºááŸáºááẠáá°ááœá±ážáá¬áá±á¬áºáááºáž áá¯á¶á á¶áá°áá±á¬ áááºááŸáºááẠá¡áááºážááẠáá±á¬ááºáá»áá±áá«áááºá
áá¯ááºáá«áááºá pcache ááœáẠáááºááá¯áá»ááºáá±á¬ data blocks áá»á¬áž ááŸááááºááá¯ááºáá«á á¡á á áºá¡ááŸáẠcache ááœáẠáááºááá¯áá»ááºáá±á¬ tables ááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬áž ááŸááááºááá¯ááºáá«á á¡á á®á¡á ááºáá»á¬ážááœáẠparseed queries áá»á¬áž ááŸááááºááá¯ááºáá«á áá¯á¶ážááááŸááá±á¬á·áá«á
ááá·áºááœáẠá¡á á¯á¡áá±ážáá áºáá»áá¯ážááŸááá±á¬á¡áá«á ááá¯áá±áá¬ááœáẠáá¯á¶á á¶áá°á¡áá áºáá áºáá¯ááᯠáááºááá·áºááá¯ááºááá·áºá¡áá«á áááºážá áááºáá»áááºááœááºá áááºážááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááẠááá¯ážááœá¬ážáá±áááºá ááá¯ááá¯áááºááŸá¬ áááºážááẠáááºážá cache ááá¯ááá¯ážá á±áááºá
á¡ááŒá¶áááœá¬ážáááºá ááŸááºáááºáá±á¬áá»ááºážáááºáááºážááŸá¬ áááºááŸáºááᯠááœá±ážááœá±ážá á±ááá·áº áá¯á¶á á¶áá°áá±á«áºááŸá á á¯á¶á ááºážáá±ážááŒááºážááŸá¯ áá¬ááá¯ááºááŸá¯ááºážá¡áááºážáááºááᯠáŠážá áœá¬áá¯ááºáá±á¬ááºáááºááŒá áºáááºá á¡ááŒááºážáá»ááºážááŒá±á¬ááá»áŸáẠáá»áœááºá¯ááºááá¯á·ááẠááááºáá±á¬ááºááá¯á· 10 á áá¹ááá·áºáááºáááá¯á á±ááá°áá±á¬ á¡ááŒá±á¡áá±ááŸááááºá á€á¡ááŒá±á¡áá±ááẠááŸáá¯ááºážáá áºáá¯ááœáẠááá«áááºáá±á¬áºáááºáž á¡áá»áá¯á·áá±á¬ áá±á¬ááºáááºáá»á¬ážá¡ááœáẠáá»á±á¬áá»á±á¬ááœá±á·ááœá±á·ááŒá áºáááºá
áá¯ááºáááºá ááá¯ááºá¡áá±ážáá»áááºááá¯ážáááºá
áá«á á¡ááŒá¶áá±á¬ááºážáá²á áá«áá±ááá·áº á¡áááºáá¯á¶áž áá«ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯á· ááá¯áá«áááºá á¡áááºáá¯á¶áž ááááºááá¯á·ááá¯áááºá ááŒá®ážáá±á¬á· áááºááá¯ááœáá·áºáááá²ááá¯áá¬ááᯠá ááºážá á¬ážáááºá áááºážááẠáá»á±á¬ááœá±á·á áœá¬ááœáá·áºááẠáá±á¬ááºážááœááºáá±á¬á¡ááºá¹áá«áááºáá áºáá¯ááŒá áºáááºá
Nginx ááœáẠá€ááœá±ážáá»ááºááœáá·áºááŸááááºá slowly start
áá¬áá¬á¡ááœáẠá¡á
á¯á¡áá±ážáá
áºáá¯á¡ááœááºážá ááŒá®ážáá±á¬á· áá°á áááºááᯠáááŒááºážááŒááºáž ááá¯ážáá¬áááºá
áá¯ááºáááºá á áááºáá°ážáá±á¬ááºážáááºá á¡á²áá«ááá¯áá±á¬ááºáá²á·á¡áá« á ááºážááŒáá·áºáááºá
source: www.habr.com