рдореИрдВ рдЖрдВрджреНрд░реЗрдИ рдмреЛрд░реЛрдбрд┐рди "рдУрдбрд┐рд╕реА: рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рд╡рд┐рдиреНрдпрд╛рд╕, рдирд┐рдЧрд░рд╛рдиреА" рджреНрд╡рд╛рд░рд╛ 2020 рдХреА рд╢реБрд░реБрдЖрдд рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдкреНрд░рддрд┐рд▓реЗрдЦ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрддрд╛ рд╣реВрдВред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдордиреЗ рдЕрдкрдиреЗ рдЦреАрдВрдЪрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдУрдбрд┐рд╕реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.0 рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ ред рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд▓реЛрдб рдХрд┐рдП рдЧрдП PostgreSQL рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ, рдореИрдВ рдУрдбрд┐рд╕реА рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред 1.0rc рдФрд░ 1.0 рдХреЗ рдмреАрдЪ рдХрд╛рдлреА рд▓рдВрдмреЗ рд╕рдВрдХреНрд░рдордг рдореЗрдВ рд╣рд▓ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВрдЧреАред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореИрдВ рдпрд╛рдВрдбреЗрдХреНрд╕ рдореЗрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рдкрд┐рдЫрд▓реЗ рдПрдХ-рдбреЗрдврд╝ рд╕рд╛рд▓ рдореЗрдВ рдореИрдВ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдмрдВрдзрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╣реИред рд░реВрд╕реА рдореЗрдВ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ "рдУрдбрд┐рд╕реАред"

Connection pooler. . , . connection pooler . . тАУ , . , connection pooler , . Connection pooler . , .

Postgres . , Postgres ., - PostrgresтАЩ. . . .
., Postgres. , , , 1 .
. , Postgres. , , Odyssey .

? , . Postgres , , тАУ , .
, .

, Postgres . . - . , procArray.

- , , Application-side pooling.
- тАУ Proxy pooler.
- -, , pooler.
- , .

Application-side pooling тАУ , , .

, , instances , .

, . , , .
, , .

instance Postgres. , . , . , - тАУ .
Application-side pooling . , ?

pooler, . .
Pgpool II. , . . . - , , .
Crunchy-Proxy. Crunchy Data Proxy pooler. Go, - .
PgBouncer. pooler , pooling. . , , .
- PgBouncer.

.
PgBouncer . PgBouncer , . . , - , , , : , , . , PgBouncer .
, , , , Bouncer .

, , PgBouncer . . CPU 97 % . , , Bouncer .

, . , PgBouncer PgBouncer. PgBouncer, . reuseport. .

PgBouncer, Bouncer, - .
PgBouncer, connection pool PgBouncer. , .
- PgBouncer, , c PgBouncer - .
PgBouncer TLS-. TLS- тАУ , , . . . , , . TLS handshake . PgBouncer, , TLS , . , . . , , .

, , , Odyssey тАУ , PgBouncer .
- , PgBouncer , . . pull request. . . , PgBouncer .
Odyssey PgBouncer . .

connection pooler, Odyssey.

Odyssey . Odyssey. Kiwi, Machinarium.

Kiwi Postgres. Postgres Proto3. Kiwi , , . libpq Postgres, , . connection pooler PostgresтАЩ .

Machinarium тАУ , .
Machinarium . тАУ , , thread . . тАУ , . , , .
, . Machinarium. тАУ , , , . sleep. , csw_worker MashinariumтАЩ, - 0 .
Machinarium - , .
, , PgBouncer. PgBouncer libevent, Machinarium тАУ libevent, connection pooling, .

Odyssey . main-, . . main-, , . . TCP-, , . - , , , .
, router, wait_read sleep, , . -. . , . . . . , , , , , . , , . , .
, , , , PgBouncer PgBouncer. . . , show stats, show clients, show pulls .

Odyssey production instances Postgres. . , PgBouncer, , . PgBouncer .

, . Odyssey production- , Postgres profession Odyssey. , production , . . , , .

. Odyssey, Odyssey TLS-. TLS- . .
Odyssey , , . connection pooler , , TLS-, , connection pooler, , TLS-.
, , .

, , , 20 000-30 000 TLS-, pooler TLS- . TLS handshake . - TLS handshake, , 3 30 000 TLS handshake, .
accept , . . , -, , , handshake -.

, , , Postgres , GSSAPI.
, Postgres , -, TLS-, GSSAPI.
PSQL GSSAPI. PgBouncer, Odyssey 12 Postgres . , , . .

Pooler , GSSAPI, , . TLS-.
Odyssey . 1.0 storages, , storage . . , . , walsender, : ┬л ?┬╗. : ┬л, basebackup┬╗ ┬л, , walsender ┬╗.
, break inEnhaced. 1.1, , , , , . . . , . , .

тАУ connection pooler. Connection pooler . . poolerтАЩ , 1 000 .
Odyssey , , 1 000 , 1 000 , . , . PgBouncer , , OLTP-. pooler , .
, , . , , , , 4- . , PgBouncer, .

, тАУ ML. PgBouncer, Odyssey тАУ . , . .
pooler , . - . . ML-, . , .

, , . , , , .
, , , . , connection pooler, . , Python - . , , . .
PgBouncer , тАУ , . TLS handshake, 15 , PgBouncer . . , 1.0. , , .

client_max_routing TLS handshakes. , TLS-.

, , .

Odyssey , , TLS-. listen.
Odyssey тАУ , . , , .
Listen , .

Storage тАУ . , remote, local. Local тАУ , . . , PgBouncer PgBouncer.

, тАУ database user, , . , , . .
, Postgres тАУ client_fwd_error. ┬лno┬╗, Bouncer. . . - , , Bouncer. ┬лyes┬╗, , Postgres.
Pool_cancel pool_rollback тАУ , , , , cancel .
Application_name_add_host тАУ Bouncer, , ip- application_name .
, , quantiles quantiles .

? Bouncer . , . 10 % , , , - . 10 % .
тАУ , . 0,99 , 99 % 1,273 . , - , - - , - cron-. . , , тАУ .

Odyssey. PgBouncer.
Utilization тАУ Odyssey. 4 , , Odyssey 4- . 400 %, , , .
Saturation Errors тАУ , Odyssey, , . . - , .

Odyssey , online restart. PgBouncer PgBouncer тАУ PgBouncer. , , Odyssey .
reload Odyssey , , Odyssey , . , reload , restart , .
Odyssey , , тАУ IPv4 IPv6 - PgBouncer Odyssey PgBouncer , Odyssey IPv6. , , IPv4 , . , , . , IPv4 , , .

Odyssey Open Source . . . , PgBouncer source-port, , - , . - , .
, SCRAM .
merge pause resume. , . . , . - pooler. , . , 11 12, 13 Postgres.

! . . Odyssey? . . hba , Postgres pg_hba.conf . .? GitHub , , .
, .
ip, hostname . ., . . , .
iptables .
, iptables тАУ , . Odyssey тАУ Bouncer, , , pg_hba .
. Issue GitHub.
, .
-. , .
, !
! metrics endpoint, Prometheus .
, Prometheus. , . : , . , , . тАУ , . . Prometheus - , ? .
, Prometheus - , , , . endpoints metrics , PrometheusтАЩ. , , .
?
Zabbix . , , , , Bouncer , . endpoint .
. . Odyssey http-?
-, . , Bouncer.
. .
?
тАУ , . .
. - Prometheus, , , , ?
тАУ Odyssey , - , , , . , , . - ? , .
. тАУ , . , . . . - , , . , , . , .
, , ┬лconnection pooler┬╗. - . , . .
, .
, .
, . , , , , , , . , pooler, . , . ? 2 . pooler? , pooler .
.
.
! . , - Prometheus, . , , - , , Prometheus, Cloudwatch, , ?
Odyssey?
call Odyssey. , . , , , . , , .
show stats. ?
- , .
, exporter Prometheus.
exporter ?
Exporter, .
. . , Postgres Odyssey : ┬л ?┬╗. Odyssey , . exporter - http . , Odyssey. Postgres CentOS . , . Exporter тАУ . . , , C, - , , Go. . ?
! ? ?
? , . . open source. , . -, . GitHub. . , .
, ?
GCC Clang.
. ?
C99.
, - ? ? , ?
20 000 . 10 000 тАУ . . . - , , , , , - .
? 500 MB , - , - . , , .
10 000 , ?
, , . . . 10 000 , тАУ ? . . TLS handshake тАУ 100 . 100 , 10 . . 10 , 100 . , - . 100 тАУ . 10 . TLS handshake тАУ .
Odyssey.conf max clients. ? , instance Odyssey per_worker? ? . . user1 , , 50 Odyssey, user2 , , 100. ?
, . . , TLS handshake, , . . . , . TLS - , , . max clients тАУ . , .
max clients 20 000 20 000 TCP . 20 001- , : ┬л┬╗ TLS handshake. pool size. pool size ┬л1┬╗, , , , , - . , 5300: too many clients for this pool, . . sorry, .
. . wait - pool size?
Database. database user. user pool size. Postgres. Postgres : ┬лtoo many clients┬╗. Odyssey . , round trip postmaster. Postmaster , . , , pool size. pool size.
! . Bouncer : MD5 hash. , MD5 hash?
.
. . ?
, . . include .
, ?
, . Storage , listen , . . GitHub : ┬л , . . - , ┬╗. , . , - . , , . .