
Π Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΠ½Π΄ΡΠ΅ΠΉ ΠΠΎΡΠΎΠ΄ΠΈΠ½ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ ΡΠ° Π²Π·Π΅Π»ΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΠΏΠΈΡΠ° ΠΎΡ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° PgBouncer ΠΏΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ» Π·Π° Π²ΡΡΠ·ΠΊΠΈ. , ΠΊΠ°ΠΊ ΡΠ° Π³ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π»ΠΈ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΏΡΠ»Π° Π·Π° Π²ΡΡΠ·ΠΊΠΈ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π² Π½ΠΎΠ²ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ: Π²Π°ΠΆΠ½ΠΎ Π΅ Π·Π° Π½Π°Ρ Π½Π΅ ΡΠ°ΠΌΠΎ Π΄Π° ΠΏΠΎΠΊΡΠΈΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ Π½ΡΠΆΠ΄ΠΈ, Π½ΠΎ ΠΈ Π΄Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ. .
ΠΠΈΠ΄Π΅ΠΎ:


ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ! ΠΠ°Π·Π²Π°ΠΌ ΡΠ΅ ΠΠ½Π΄ΡΠ΅ΠΉ.

Π Π―Π½Π΄Π΅ΠΊΡ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° open source Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π Π΄Π½Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠ° Π½ΠΈ Π΅ Π·Π° ΠΏΡΠ»ΠΎΠ²Π΅ΡΠ΅ Π·Π° Π²ΡΡΠ·ΠΊΠΈ.

ΠΠΊΠΎ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΡΠ» Π·Π° Π²ΡΡΠ·ΠΊΠΈ Π½Π° Π±ΡΠ»Π³Π°ΡΡΠΊΠΈ, ΠΌΠΎΠ»Ρ ΠΊΠ°ΠΆΠ΅ΡΠ΅ ΠΌΠΈ. ΠΠ½ΠΎΠ³ΠΎ ΠΌΠΈ ΡΠ΅ ΠΈΡΠΊΠ° Π΄Π° Π½Π°ΠΌΠ΅ΡΡ Π΄ΠΎΠ±ΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠΌΠΈΠ½, ΠΊΠΎΠΉΡΠΎ Π΄Π° ΡΠ΅ ΡΡΠ²ΡΡΠ΄ΠΈ Π² ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ°ΡΠ° Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ°.
Π’Π΅ΠΌΠ°ΡΠ° Π΅ Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ½Π°, Π·Π°ΡΠΎΡΠΎ Π² ΠΌΠ½ΠΎΠ³ΠΎ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΡΠ»ΠΎΠ²Π΅ΡΠ΅ Π·Π° Π²ΡΡΠ·ΠΊΠΈ ΡΠ° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΈ Π·Π° ΡΡΡ Π΄ΠΎΡΠΈ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° Π·Π½Π°Π΅ΡΠ΅. ΠΡΠΊΠΎΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅, Π½ΠΎ Π² Postgres Π½Π΅ΡΠ°ΡΠ° Π½Π΅ ΡΡΠΎΡΡ ΡΠ°ΠΊΠ°. Π Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ ΡΠΎΠ²Π° (Π½Π° HighLoad++ 2019) ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π° Π΄ΠΎΠΊΠ»Π°Π΄ Π½Π° ΠΠΈΠΊΠΎΠ»Π°ΠΉ Π‘Π°ΠΌΠΎΡ Π²Π°Π»ΠΎΠ² Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π² Postgres. Π Π°Π· ΡΠ°Π·Π±ΠΈΡΠ°ΠΌ, ΡΠ΅ ΡΡΠΊ ΡΠ° Π΄ΠΎΡΠ»ΠΈ Ρ ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΡΠ° Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ, ΠΈ ΡΠΎΠ²Π° ΡΠ° Ρ ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ²Π°Ρ Ρ ΠΏΠΎ-ΡΠ΅Π΄ΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΡΡΡ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΡΠ΅ΡΡΡΡΠ½Π°ΡΠ° ΡΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ. Π ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ½ΠΎ, Π² ΡΠΌΠΈΡΡΠ», ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Π½Π΅ ΡΠ° ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΈ.

Π Π―Π½Π΄Π΅ΠΊΡ ΠΈΠΌΠ° Postgres. Π Π―Π½Π΄Π΅ΠΊΡ.ΠΠ±Π»Π°ΠΊΠ° ΠΆΠΈΠ²Π΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΡΠ³ΠΈ Π½Π° Π―Π½Π΄Π΅ΠΊΡ. Π ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠ΅ΡΠ°Π±Π°ΠΉΡΠ° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ ΠΌΠΈΠ»ΠΈΠΎΠ½ Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π° Π² Postgres.

Π ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π΄ΠΎΡΡΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ»ΡΠ³ΠΈ β ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° primary Π½ΠΎΠ΄Π° Π½Π° Π²ΡΠ·Π΅Π»Π°, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΄Π²Π΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ (ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π° ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°), ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ°.

ΠΡΠ΅ΠΊΠΈ Π²ΡΠ·Π΅Π» Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π΅ Postgres, Π½Π° ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ²Π΅Π½ Postgres ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΠΈ ΠΏΡΠ» Π·Π° Π²ΡΡΠ·ΠΊΠΈ. ΠΡΠ»ΠΎΠ²Π΅ΡΠ΅ Π·Π° Π²ΡΡΠ·ΠΊΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° fencing ΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΡΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.

ΠΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ» Π·Π° Π²ΡΡΠ·ΠΊΠΈ?

Π Postgres Π΅ ΠΏΡΠΈΠ΅ΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ½Π° ΠΌΠΎΠ΄Π΅Π» ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π΅Π΄Π½ΠΎ Π²ΡΡΠ·ΠΊΠ° β ΡΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ, Π΅Π΄ΠΈΠ½ Π±Π΅ΠΊΠ΅Π½Π΄ Postgres. Π Π² ΡΠΎΠ·ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠ΅ΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π΅ Π΄ΠΎΡΡΠ° ΡΠΊΡΠΏΠΎ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ.

ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π² ΠΊΠΎΠ΄Π° Π½Π° Postgres ΠΈΠΌΠ° ΠΌΠ°ΡΠΈΠ², Π½Π°ΡΠ΅ΡΠ΅Π½ procArray. Π’ΠΎΠΉ ΡΡΠ΄ΡΡΠΆΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ. ΠΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° procArray ΠΈΠΌΠ°Ρ Π»ΠΈΠ½Π΅ΠΉΠ½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΉΠΊΠΈ ΠΏΡΠ΅Π· ΡΠ΅Π»ΠΈΡ ΠΌΠ°ΡΠΈΠ² Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ. Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ° Π±ΡΡΠ· ΡΠΈΠΊΡΠ», Π½ΠΎ ΠΏΡΠΈ Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ Π²Ρ ΠΎΠ΄ΡΡΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π²ΡΡΠ·ΠΊΠΈ ΡΡΠ°Π²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠΊΡΠΏΠΎ. Π ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠΈΡΠΊΠΎ ΡΡΠ°Π½Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠΊΡΠΏΠΎ, Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠ»Π°ΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΡΠΎΠΊΠ° ΡΠ΅Π½Π° Π·Π° Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π²ΡΡΠ·ΠΊΠΈ.

Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ 3 Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°:
- ΠΠ° ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
- ΠΠ° ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
- Π ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ , Ρ. Π΅. Π²ΡΠ΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ.
ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, Π²Π³ΡΠ°Π΄Π΅Π½ΠΎΡΠΎ pooler Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅ Π² ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΡΠΈΡΡΠ΅Π»ΠΈΡΠ΅ Π½ΠΈ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° PostgreSQL Professional ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΡΡ Π²ΡΡΡ Ρ Π½Π΅Π³ΠΎ. ΠΠΎΠ³Π° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΊΠ°ΠΆΠ΅. Π Π²ΡΡΡΠ½ΠΎΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ ΠΈΠΌΠ° Π΄Π²Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π’ΠΎΠ²Π° Π΅ pool Π½Π° ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ proxy pool.

Application-side pool Π΅ Π½Π°ΠΉ-ΠΏΡΠΎΡΡΠΈΡΡ Π½Π°ΡΠΈΠ½. ΠΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π½Π°ΡΠΈΠ½ Π·Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈΡΠ΅ Π²ΠΈ Π²ΡΡΠ·ΠΊΠΈ Π² ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.

ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΆΠ΅Π»Π°Π΅ΡΠ΅ Π΄Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°ΡΠ΅ Π±Π΅ΠΊΠ΅Π½Π΄Π°, ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ.

Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΡΡΠ·Π½Π°Π²Π°ΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΎΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π·ΠΎΠ½ΠΈ Π½Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡ, Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠΎΠ²Π΅. Π ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Ρ client side pooling Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠΈΡΠ»Π°. ΠΠΎΠ»Π΅ΠΌΠΈ β ΡΠΎΠ²Π° Π΅ ΠΎΠΊΠΎΠ»ΠΎ 10 000 Π²ΡΡΠ·ΠΊΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠ΅Π΄Π΅Π»ΡΡ, ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ.

ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ°Π²Π° Π΄ΡΠΌΠ° Π·Π° proxy poolers, ΠΈΠΌΠ° Π΄Π²Π° poolers, ΠΊΠΎΠΈΡΠΎ ΡΠΌΠ΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ°. Π’Π΅ Π½Π΅ ΡΠ° ΡΠ°ΠΌΠΎ poolers. Π’Π΅ ΡΠ° poolers + ΠΎΡΠ΅ ΡΡΡΠ°Ρ ΠΎΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ. Π’ΠΎΠ²Π° Π΅ ΠΈ .
ΠΠΎ, Π·Π° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, ΡΠ°Π·ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π½Π΅ Π΅ Π½ΡΠΆΠ½Π° Π½Π° Π²ΡΠΈΡΠΊΠΈ. Π ΡΡ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠΎΠ²Π°, ΡΠ΅ poolers ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ°ΠΌΠΎ ΡΠ΅ΡΠΈΠΉΠ½ΠΎ pooling, Ρ. Π΅. Π΅Π΄ΠΈΠ½ Π²Ρ ΠΎΠ΄ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ, Π΅Π΄ΠΈΠ½ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
ΠΠ° Π½Π°ΡΠΈΡΠ΅ ΡΠ΅Π»ΠΈ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ, Π·Π°ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ PgBouncer, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° transaction pooling, Ρ. Π΅. ΡΡΡΠ²ΡΡΠ½ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Ρ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΌΠΎ Π·Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ°.

Π ΠΏΡΠΈ Π½Π°ΡΠΈΡΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ β ΡΠΎΠ²Π° Π΅ Π²ΡΡΠ½ΠΎ. ΠΠΎ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Π·Π°ΠΏΠΎΡΠ²Π°Ρ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΡΠ΅ Π΄Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΠΈΡ, Π·Π°ΡΠΎΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈ Π²ΡΡΠ·ΠΊΠΈ ΡΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΈ. ΠΡΠΈΡΠΊΠΈ ΠΈΠ΄Π²Π°Ρ ΠΎΡ loopback ΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΠΈΡΡΠ° ΡΡΠ°Π²Π° ΡΡΡΠ΄Π½ΠΎ.

Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ application_name_add_host. Π’ΠΎΠ²Π° Π΅ Π½Π°ΡΠΈΠ½ΡΡ ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° Bouncer Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ IP Π°Π΄ΡΠ΅Ρ Π² application_name. ΠΠΎ application_name ΡΠ΅ Π·Π°Π΄Π°Π²Π° Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π²ΡΡΠ·ΠΊΠ°.

ΠΠ° ΡΠΎΠ·ΠΈ Π³ΡΠ°ΡΠΈΠΊ, ΠΊΡΠ΄Π΅ΡΠΎ ΠΆΡΠ»ΡΠ°ΡΠ° Π»ΠΈΠ½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΡΠ΅Π°Π»Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, Π° ΡΠΈΠ½ΡΡΠ° - Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²Π»ΠΈΠ·Π°Ρ Π² Π±Π°Π·Π°ΡΠ°. Π ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° application_name, ΠΊΠΎΠΉΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠ°ΠΌΠΎ Π·Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°, Π½ΠΎ Π½Π΅ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π±Π΅Π·ΠΏΠ»Π°ΡΠ΅Π½.

ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π² Bouncer Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈ Π΅Π΄ΠΈΠ½ pool, Ρ.Π΅. Π±ΡΠΎΡΡ Π½Π° Π²ΡΡΠ·ΠΊΠΈΡΠ΅ Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π±Π°Π·Π°.

ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π²ΠΎΠ΄ΠΈ ΡΠΎΠ²Π°? ΠΠΌΠ°ΡΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½Π° ΡΡΠ»ΡΠ³Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° C++, ΠΈ Π½Π°Π±Π»ΠΈΠ·ΠΎ ΠΌΠ°Π»ΠΊΠ° ΡΡΠ»ΡΠ³Π° Π½Π° Node, ΠΊΠΎΡΡΠΎ Π½Π΅ ΠΏΡΠ°Π²ΠΈ Π½ΠΈΡΠΎ ΡΡΡΠ°ΡΠ½ΠΎ Ρ Π±Π°Π·Π°ΡΠ°, Π½ΠΎ Π½Π΅ΠΉΠ½ΠΈΡΡ Π΄ΡΠ°ΠΉΠ²ΡΡ ΠΏΠΎΠ»ΡΠ΄ΡΠ²Π°. Π’ΠΎΠΉ ΠΎΡΠ²Π°ΡΡ 20 000 Π²ΡΡΠ·ΠΊΠΈ, Π° Π²ΡΠΈΡΠΊΠΎ ΠΎΡΡΠ°Π½Π°Π»ΠΎ ΠΈΠ·ΡΠ°ΠΊΠ²Π°. ΠΠΎΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΠΊΠΎΠ΄.

Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½Π°ΠΏΠΈΡΠ°Ρ ΠΌΠ΅ ΠΌΠ°Π»ΡΠΊ ΠΏΠ°ΡΡ Π·Π° Bouncer, ΠΊΠΎΠΉΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈ ΡΠ°Π·ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°, Ρ.Π΅. ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π½Π°Π΄ pool.

ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΈ ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° Postgres, Ρ.Π΅. ΡΠΎΠ»ΠΈΡΠ΅ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π΄Π° ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Ρ Ρ Π±ΡΠΎΠΉ Π²ΡΡΠ·ΠΊΠΈ.

ΠΠΎ ΡΠΎΠ³Π°Π²Π° Π³ΡΠ±ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π·Π°ΡΠΎ Π½ΡΠΌΠ°ΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΡΡΡ ΡΡΡΠ²ΡΡΠ°. PgBouncer Π½Π΅ ΠΏΡΠ΅Π΄Π°Π²Π° Π³ΡΠ΅ΡΠΊΠ° Π·Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°, ΡΠΎΠΉ Π²ΠΈΠ½Π°Π³ΠΈ Π²ΡΡΡΠ° ΡΡΡΠ°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅: ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΠΏΠ°ΡΠΎΠ»Π°ΡΠ° Π²ΠΈ ΡΠ΅ Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»Π°, ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΠΏΡΠΎΡΡΠΎ Π±Π°Π·Π°ΡΠ° Π΅ ΠΏΠ°Π΄Π½Π°Π»Π°, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅ΡΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄. ΠΠΎ Π½ΡΠΌΠ° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°. ΠΠΊΠΎ ΡΠ΅ΡΠΈΡΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π°, Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π·Π°ΡΠΎ.

Π ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ Π³Π»Π΅Π΄Π°ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ.

ΠΠ»Π΅Π΄Π°ΡΠ΅ Π² ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ Bouncer Π΅ Π΅Π΄Π½ΠΎΠΏΠΎΡΠΎΡΠ΅Π½. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΠ²ΡΠ°ΡΠ΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ Π² ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°. Π Π°Π·Π±ΠΈΡΠ°ΡΠ΅, ΡΠ΅ ΡΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΡΠ»ΠΈ Π·Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°, Π° Π²ΡΡΡΠ½ΠΎΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°ΡΠ΅ pooler.

Π‘ΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅ Π΄ΠΎ ΠΈΠ·Π²ΠΎΠ΄Π°, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΏΠΎΠ²Π΅ΡΠ΅ PgBouncer-ΠΈ.

ΠΠ°Π»ΠΊΠΎ Π΄ΠΎΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ Bouncer.

Π Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΡΠ°ΠΊΠ°, ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° TCP ΠΏΠΎΡΡΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Bouncers. Π Π²Π΅ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ TCP Π²ΡΡΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ Ρ round-robin.

Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π·Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅, Ρ.Π΅. Π²ΡΠΈΡΠΊΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°, ΡΡΠΊΠ°Ρ ΠΈΠΌΠ°ΡΠ΅ Π΅Π΄ΠΈΠ½ Bouncer, Π½ΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° idle Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ Bouncer-ΠΈ.

Π Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅, ΡΠ΅ ΡΠ΅Π·ΠΈ 3 Bouncers ΠΈΠ·ΡΠΆΠ΄Π°Ρ Π²ΡΠ΅ΠΊΠΈ ΡΠ²ΠΎΠ΅ ΡΠ΄ΡΠΎ Π½Π° 100 %. ΠΡΠΆΠ΄Π°Π΅ΡΠ΅ ΡΠ΅ ΠΎΡ Π΄ΠΎΡΡΠ° Bouncers. ΠΠ°ΡΠΎ?

ΠΠ°ΡΠΎΡΠΎ ΠΈΠΌΠ°ΡΠ΅ TLS. ΠΠΌΠ°ΡΠ΅ ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅. Π Π°ΠΊΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ benchmark Π½Π° Postgres Ρ TLS ΠΈ Π±Π΅Π· TLS, ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅, ΡΠ΅ Π±ΡΠΎΡΡ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΠΏΠ°Π΄Π° ΠΏΠΎΡΡΠΈ Ρ Π΄Π²Π° ΡΠ΅Π΄Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈ ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ TLS handshake ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ.

Π Π² Π³ΠΎΡΠ½Π°ΡΠ° ΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π΄ΠΎΡΡΠ° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈ Π²ΡΡΠ·ΠΊΠΈ. ΠΠΎΠ½Π΅ΠΆΠ΅ Π½Π°ΡΠΈΡΡ primary ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π° ΠΌΠ΅ΠΆΠ΄Ρ Π·ΠΎΠ½ΠΈ Π½Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡ, Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ Π΄ΠΎΡΡΠ° ΡΠΈΠΏΠΈΡΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡ. Π’. Π΅. ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΏΡΠΈΡΠΈΠ½Π° ΡΡΠ°ΡΠΈΡΡ primary Π΅ Π±ΠΈΠ» Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΈ ΡΡΠ»ΠΎΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π΅ Π±ΠΈΠ»ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΎ Π² Π΄ΡΡΠ³ Π΄Π°ΡΠ° ΡΠ΅Π½ΡΡΡ. ΠΡΠΈΡΠΊΠΈ ΡΠ΅ ΡΠ΅ Π΄ΠΎΠΉΠ΄Π°Ρ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ·Π΄ΡΠ°Π²ΡΡ Ρ TLS.

Π Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ TLS handshake ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΡΠΏΠ΅Π΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ·Π΄ΡΠ°Π²ΠΈ Π²Π΅ΡΠ΅ Ρ Bouncer, Π° Π΄Π° ΠΌΡ Π·Π°ΡΠ²ΠΎΡΠΈ Π³ΡΡΠ»ΠΎΡΠΎ. ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΉΠΌΠ°ΡΡΠ°, ΠΏΠΎΡΠΎΠΊΡΡ Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈ Π²ΡΡΠ·ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°Π½Π΅ Π½Π΅ΡΠ³Π°ΡΠΈΠΌ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ retry Π² Π±Π°Π·Π°ΡΠ° Π±Π΅Π· exponential backoff, ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΏΡΠΈΡΡΠΈΠ³Π°Ρ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ Π² ΠΊΠΎΡ Π΅ΡΠ΅Π½ΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ.

ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° 16 PgBouncer, ΠΊΠΎΠΈΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Ρ 16 ΡΠ΄ΡΠ° Π½Π° 100%.

Π‘ΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅ Π΄ΠΎ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΠΈΡ PgBouncer. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΠΏΡΠΈ Π½Π°ΡΠ΅ΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Ρ Bouncer. ΠΡΠ½ΡΠ½ΠΈΡΠ΅ Bouncers ΡΠ»ΡΠΆΠ°Ρ Π·Π° TCP handshake, Π° Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ Bouncers ΡΠ»ΡΠΆΠ°Ρ Π·Π° ΡΠ΅Π°Π»Π½ΠΎ ΠΏΡPolling, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ½ΡΠ½ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ.

Π ΡΠ°ΠΊΠ°Π²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ»Π°Π²Π½ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈΡΠ΅ 18 Bouncers ΠΏΠΎ Π΅Π΄ΠΈΠ½. ΠΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΊΠ°Π²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΅ Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ½ΠΎ. Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈ, DevOps ΠΈ Ρ ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° Π½ΠΎΡΡΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ Π·Π° ΡΠΎΠ·ΠΈ ΡΡΡΠ²ΡΡ, Π½ΡΠΌΠ° Π΄Π° ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ ΠΎΡ ΡΠ°ΠΊΠ°Π²Π° ΡΡ Π΅ΠΌΠ°.

ΠΠ° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠΏΡΠ»ΡΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈΡΠ΅ Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² open source, Π½ΠΎ Bouncer Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ PgBouncers Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΠΎΡΡ Π±Π΅ Π·Π°ΠΊΠΎΠΌΠΈΡΠ²Π°Π½Π° ΠΏΡΠ΅Π΄ΠΈ ΠΌΠ΅ΡΠ΅Ρ. Π pull request Ρ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π΅ Π±ΠΈΠ» Π½Π°ΠΏΡΠ°Π²Π΅Π½ ΠΏΡΠ΅Π΄ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ.

ΠΠ»ΠΈ ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ. Π Postgres ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ°, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠΈΡΠ΅ ΡΠ°Π΅Π½ ΠΊΠΎΠ΄ ΠΏΠΎ Π΄ΡΡΠ³ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π±Π΅Π· ΠΈΠ·Π»ΠΈΡΠ½Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ. ΠΠΎ Π½ΡΠΊΠΎΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ TCP-reset, Ρ.Π΅. ΠΏΡΠ΅ΠΊΡΡΠ²Π°Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅. ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Bouncer Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ? ΠΠΈΡΠΎ. Π’ΠΎΠΉ ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Ρ ΠΌΠ°Π»ΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΏΡΠ΅ΠΊΡΡΠ½Π΅ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Ρ Bouncer Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π½ΡΠΆΠ½ΠΎ Π΅ ΡΡΡΠΎ Π΄Π° Π·Π°Π²ΡΡΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ Π² Π±Π°Π·Π°ΡΠ°.
Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²Π΅Π½ΠΎ ΠΈ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π²Π»Π΅Π΅Π½ Π² upstream Π½Π° Bouncer-Π°.

Π’Π°ΠΊΠ° ΡΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅ Π΄ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ connection pooler, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°, ΡΠ΅ ΡΠ΅ ΠΏΠ°ΡΡΠΈ, Π² ΠΊΠΎΠΉΡΠΎ Π±ΡΡΠ·ΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΊΠΎΠΉΡΠΎ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ΅Π½.

ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ ΠΌΠ΅ ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π° Π·Π°Π΄Π°ΡΠ°. Π’ΡΡΠ±Π²Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΠΌΠ΅ Π΄ΠΎΠ±ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ Π²Ρ ΠΎΠ΄ΡΡΠΈ TLS-ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ.
ΠΠ° ΡΠΎΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΈΡ ΠΌΠ΅ ΠΎΡΠ΄Π΅Π»Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π½Π°ΡΠΈΡΠ° Machinarium, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π·Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΈ ΡΡΡΡΠΎΡΠ½ΠΈΡ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΠ°ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅Π½ ΠΊΠΎΠ΄. ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° libpq, ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅ Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΠΈ Π²ΡΡΠ½Π°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈ Π΄Π° ΠΊΠ°ΠΆΠ°Ρ: βΠΠ·Π²ΠΈΠΊΠ°ΠΉ ΠΌΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌ IO, Π½ΠΎ ΠΊΠΎΠ³Π°ΡΠΎ IO ΠΏΡΠΈΠΊΠ»ΡΡΠΈ, ΠΈΠΌΠ°ΠΌ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°β. Π ΡΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ΅ΠΏΠ΅Π½Π½Π° ΡΡ Π΅ΠΌΠ°. ΠΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΎΡ ΡΡΡΡΠΎΡΠ½ΠΈΡ. Π‘ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠ°ΡΠΎ βΠΠΊΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠΈΡ Π·Π°Π³Π»Π°Π²ΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ Ρ ΡΠ°Π·ΠΌΠ΅Ρ N, ΡΠ΅Π³Π° ΠΎΡΠ°ΠΊΠ²Π°ΠΌ N Π±Π°ΠΉΡΠ°β, βΠΠΊΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΠΏΠ°ΠΊΠ΅Ρ SYNC, ΡΠ΅Π³Π° ΠΎΡΠ°ΠΊΠ²Π°ΠΌ ΠΏΠ°ΠΊΠ΅Ρ Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°β. ΠΠΎΠ»ΡΡΠ°Π²Π° ΡΠ΅ Π΄ΠΎΡΡΠ° ΡΡΡΠ΄Π΅Π½ ΠΊΠΎΠ½ΡΡΠΈΠ½ΡΡΠΈΡΠΈΠ²Π΅Π½ ΠΊΠΎΠ΄, Π²ΡΠ΅ Π΅Π΄Π½ΠΎ Π»Π°Π±ΠΈΡΠΈΠ½ΡΡΡ Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ Π² Π»ΠΈΠ½Π΅ΠΉΠ½Π° ΡΠ°Π·Π²ΠΈΠ²ΠΊΠ°. ΠΠ°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΡΠ°ΠΊΠ°, ΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠ°ΡΠΈΠ½Π° ΠΎΡ ΡΡΡΡΠΎΡΠ½ΠΈΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΡΡ Π΄Π° ΠΎΠΏΠΈΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΡΡ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π² ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΠΊΠΎΠ΄. ΠΡΠΎΡΡΠΎ Π² ΡΠΎΠ·ΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΠΊΠΎΠ΄ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π²ΠΌΡΠΊΠ²Π°Ρ ΠΌΠ΅ΡΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° Π² ΠΎΡΠ°ΠΊΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΠΏΡΠ΅Π΄Π°Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄ΡΡΠ³Π° ΠΊΠΎΡΡΡΠΈΠ½Π° (green thread). Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π½Π° ΡΠΎΠ²Π°, ΡΠ΅ Π½Π°ΠΉ-ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡΡ ΠΏΡΡ Π² Π»Π°Π±ΠΈΡΠΈΠ½ΡΠ° Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π° ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΊΡΠΌ Π½Π΅Π³ΠΎ ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ.

Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠΌΠ°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ°Π²ΠΈ TCP accept ΠΈ Ρ round-robin ΠΏΡΠ΅Π΄Π°Π²Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²o ΠΎΡ workers TCP-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅.
ΠΡΠΈ ΡΠΎΠ²Π° Π²ΡΡΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΠΎΡ. Π ΡΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π±ΡΠ΄Π΅ cache-friendly.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π½ΠΈΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡ ΠΌΠ΅ ΡΡΠ±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² Π΅Π΄ΠΈΠ½ Π³ΠΎΠ»ΡΠΌ ΠΏΠ°ΠΊΠ΅Ρ, Π·Π° Π΄Π° ΠΎΠ±Π»Π΅ΠΊΡΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ TCP-stack.

Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΡ ΠΌΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΈΡ ΠΏΡΠ» ΠΏΠΎ ΡΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½, ΡΠ΅ Odyssey ΠΏΡΠΈ Π·Π°Π΄Π°Π΄Π΅Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ CANCEL ΠΈ ROLLBACK Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, Ρ.Π΅. Π°ΠΊΠΎ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ ΠΎΡΠ°ΠΊΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, Odyssey ΡΠ΅ ΠΊΠ°ΠΆΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, Π΄Π° Π½Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π° ΡΠ΅Π½Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ.
Π, ΠΏΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ, Π½ΠΈΠ΅ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡΡΠ° Π·Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° application_name_add_host. ΠΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΈΠ΅ Π½ΡΠΌΠ°ΠΌΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΏΡΠ΅ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½ΡΠΆΠ½ΠΈ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°.

Π Π°Π±ΠΎΡΠΈΠΌ Π² ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ΅ Π½Π° Yandex.Cloud. Π Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ managed PostgreSQL ΠΈ ΠΈΠΌΠ°ΡΠ΅ Π·Π°Π΄Π°Π΄Π΅Π½ connection pooler, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π½Π°Π²ΡΠ½, Ρ.Π΅. Π΄Π° ΡΠ΅ ΠΎΡΠ΄Π΅Π»ΠΈΡΠ΅ ΠΎΡ Π½Π°Ρ, Π°ΠΊΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΡΠ΅, ΡΡΠ΅Π· Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ. Bouncer Π½ΡΠΌΠ° Π΄Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅ ΠΏΠΎΡΠΎΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΈΡΠ½Π°ΡΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π½Π°Π²ΡΠ½.

Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ.

ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π½Π°Π²ΡΠ½. Π ΠΎΠ±Π»Π°ΠΊΠ° ΡΠΎΠ²Π°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΅ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°ΡΠΎΡΠΎ ΡΠΎΠ³Π°Π²Π° Π²Π°ΡΠΈΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΡΠ²ΡΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ΅Π±Π΅ ΡΠΈ. ΠΠΎ Π² ΡΠ²ΠΎΠΈΡΠ΅ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ, Π°ΠΊΠΎ ΡΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠ΅Π· connection pooler Π² Odyssey, ΡΠΎΠ²Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π Odyssey ΠΈΠΌΠ°ΠΌΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Ρ PgBouncer. ΠΠΌΠ°ΠΌΠ΅ ΡΡΡΠ°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π°, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΡΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΠΊΠΎ Π½Π΅ΡΠΎ Π»ΠΈΠΏΡΠ²Π°, ΠΈΠ·ΠΏΡΠ°ΡΠ΅ΡΠ΅ pull request ΠΈΠ»ΠΈ ΠΏΠΎΠ½Π΅ issue Π² GitHub, ΡΠ΅ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° PgBouncer Π²Π΅ΡΠ΅ Ρ ΠΈΠΌΠ°ΠΌΠ΅.

Π, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΈΠΌΠ°ΠΌΠ΅ error forwarding. Π©Π΅ Π²ΡΡΠ½Π΅ΠΌ Π³ΡΠ΅ΡΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π΅ ΡΡΠΎΠ±ΡΠΈΠ»Π°. Π©Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π°ΡΠΎ Π½Π΅ Π²Π»ΠΈΠ·Π°ΡΠ΅ Π² Π±Π°Π·Π°ΡΠ°, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ, ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²Π»Π΅Π·Π΅ΡΠ΅.

Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½Π°, Π² ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ Π²ΠΈ Π΅ Π½ΡΠΆΠ½Π° 100%-Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ PgBouncer. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ Π΄ΡΡΠΆΠΈΠΌ ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΊΡΠΎ Bouncer, ΠΏΡΠΎΡΡΠΎ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠΌΠΈ Π·Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° Odyssey.

ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ βPause / Resumeβ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° Π΄Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Postgres, ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π½Π° ΠΏΠ°ΡΠ·Π° Π² connection pooler, Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ pg_upgrade ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° Π³ΠΎ ΠΏΡΡΠ½Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ. ΠΡ ΡΡΡΠ°Π½Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΡΠΊΠ°Ρ Π±Π°Π·Π°ΡΠ° ΠΏΡΠΎΡΡΠΎ Π΅ Π·Π°Π±Π°Π²ΠΈΠ»Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π½ΠΈ Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° ΠΎΡ Ρ ΠΎΡΠ° ΠΎΡ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°. Π’Ρ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½Π°, Π½ΠΎ ΡΠΊΠΎΡΠΎ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ Π±ΡΠ΄Π΅. (ΠΠ΅ΡΠ΅ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½Π°)

β Π²Π΅ΡΠ΅ Π΅ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½Π°
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π΅Π΄Π½Π° ΠΎΡ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² PgBouncer Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° SCRAM Authentication, ΠΊΠΎΡΡΠΎ Π½ΠΈ Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° ΠΎΡ ΡΠΎΠ²Π΅ΠΊ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Π² Π―Π½Π΄Π΅ΠΊΡ.ΠΠ±Π»Π°ΠΊ. Π Π΄Π²Π΅ΡΠ΅ ΡΠ° ΡΠ»ΠΎΠΆΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΠΈ Π²Π°ΠΆΠ½Π°.

ΠΠ°ΡΠΎΠ²Π° ΠΈΡΠΊΠ°ΠΌ Π΄Π° ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΎΡ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ Odyssey, ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ ΠΈ Π²ΠΈΠ΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΊΠΎΠ΄.
ΠΠΌΠ°ΠΌ ΠΈΠ·Ρ ΠΎΠ΄Π½Π° Π±Π°Π·Π° Odyssey, ΠΊΠΎΡΡΠΎ ΡΠ°Π·ΡΠΈΡΠ° Π½Π° Π΄Π²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Kiwi Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° Postgres. Π’.Π΅. Π½Π°ΡΠΈΠ²Π½ΠΈΡΡ proto 3 Π½Π° Postgres ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, Ρ ΠΊΠΎΠΈΡΠΎ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡ. Π’Π΅ ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Kiwi.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Machinarium Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΠΎΡΠΎΡΠΈ. ΠΠ°Π»ΡΠΊ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΎΡ ΡΠΎΠ·ΠΈ Machinarium Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π°ΡΠΌΠ΅Π±Π»Π΅Ρ. ΠΠΎ Π½Π΅ ΡΠ΅ ΡΡΡΠ°Ρ ΡΠ²Π°ΠΉΡΠ΅, ΡΠ°ΠΌ ΡΠ° ΡΠ°ΠΌΠΎ 15 ΡΠ΅Π΄Π°.

ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° Odyssey. ΠΠΌΠ° ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, Π² ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΊΠΎΡΡΡΠΈΠΈΠ½ΠΈ. Π ΡΠ°Π·ΠΈ ΠΌΠ°ΡΠΈΠ½Π° ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ΡΠΎ Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈ TCP-ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈ.
Π ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ ΡΠ΅ Π΄Π²ΠΈΠΆΠ°Ρ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° crone-Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ° Π½ΡΠΆΠ½ΠΈ Π² ΠΏΡΠ».

ΠΠ° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Odyssey ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ Π½Π° Postgres. ΠΡΠΎΡΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ install-check ΠΏΡΠ΅Π· Bouncer ΠΈ ΠΏΡΠ΅Π· Odyssey, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π½ΡΠ»Π΅Π² div. ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΡΡΠ°, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π΄Π°ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½ Π² Bouncer ΠΈ Π² Odyssey.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°Ρ ΡΠ²ΠΎΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅. Π ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Odyssey.

ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π·Π°ΡΠ°Π΄ΠΈ Π½Π°ΡΠ°ΡΠ° ΠΊΠ°ΡΠΊΠ°Π΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½ΠΈ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ: Postgres + Odyssey, PgBouncer + Odyssey, Odyssey + Odyssey, Π·Π° Π΄Π° ΡΠΌΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ, ΡΠ΅ Π°ΠΊΠΎ Odyssey ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² Π½ΡΠΊΠΎΡ ΡΠ°ΡΡ ΠΎΡ ΠΊΠ°ΡΠΊΠ°Π΄Π°ΡΠ°, ΡΠΎΠΉ ΡΡΡΠΎ ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΠΊΡΠΎ ΠΎΡΠ°ΠΊΠ²Π°ΠΌΠ΅.
ΠΡΠ°Π±Π»ΠΈ

ΠΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Odyssey Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ. Π Π½Π΅ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡΠ΅ΡΡΠ½ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ°, ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠ΅ΡΡΠ΅ΠΊΡΠ½ΠΎ. ΠΠ΅, Ρ.Π΅. Π΄Π°, Π½ΠΎ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΠΎΠΉΠ΄ΠΎΡ Π° Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΡΡΠ΅Π»ΠΈ ΠΎΡ PostgreSQL Professional ΠΈ ΠΊΠ°Π·Π°Ρ Π°, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ. Π’Π΅ Π½Π°ΠΈΡΡΠΈΠ½Π° Π±ΡΡ Π° ΠΏΡΠ°Π²ΠΈ, Π½ΠΈΠ΅ Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅. ΠΠΎ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π° Π·Π° Π½Π°Ρ.

ΠΠΎΡΠ»Π΅ ΠΎΡΠΊΡΠΈΡ ΠΌΠ΅, ΡΠ΅ Π² connection pooler ΠΈΠΌΠ° Π²Ρ ΠΎΠ΄ΡΡΠΈ TLS-ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈ TLS-ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ. Π Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡΡΠ° ΡΠ° Π½ΡΠΆΠ½ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ ΠΈ ΡΡΡΠ²Π΅ΡΠ½ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ.
Π‘ΡΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π½Π° Bouncer ΠΈ Odyssey ΠΏΡΠ΅ΠΈΠ·ΡΠΈΡΠ°Ρ ΡΠ²ΠΎΡ pcache, Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΈΠ·ΡΠΈΡΠ°Ρ ΠΎΡ pcache, Π·Π°ΡΠΎΡΠΎ Π½Π°ΡΠΈΡΡ ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌ Odyssey Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ. Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π° Π·Π° Π½Π°Ρ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π½Π΅ ΡΠ΅ ΠΏΡΠΎΡΠ²ΠΈ Π²Π΅Π΄Π½Π°Π³Π°. ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΠ΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ, Π½ΠΎ ΡΠ»Π΅Π΄ 20 000 Π²Ρ ΠΎΠ΄ΡΡΠΈ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΡΠ°Π½Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½.

Pluggable Authentication Method β ΡΠΎΠ²Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ Linux ΡΡΠ΅Π΄ΡΡΠ²Π°. Π PgBouncer ΡΡ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΡΠ°ΠΊΠ°, ΡΠ΅ ΠΈΠΌΠ° ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΏΠΎΡΠΎΠΊ Π·Π° ΠΎΡΠ°ΠΊΠ²Π°Π½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΎΡ PAM ΠΈ ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΏΠΎΡΠΎΠΊ PgBouncer, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΡΠ΅ΠΊΡΡΠΎΡΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΈΡΠΊΠ° ΡΠ΅ Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ°Ρ Π² ΠΏΠΎΡΠΎΠΊΠ° PAM.
ΠΠΈΠ΅ Π½Π΅ Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΌΠ΅ ΠΏΠΎ Π΅Π΄Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠ° ΠΏΡΠΈΡΠΈΠ½Π°. ΠΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΡΠΈ. ΠΠ°ΡΠΎ Π΄Π° Π½ΠΈ Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ²Π°?
Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ PAM-Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π½Π΅ PAM-Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ, ΡΠΎ Π³ΠΎΠ»ΡΠΌΠ° Π²ΡΠ»Π½Π° ΠΎΡ PAM-Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π·Π°Π±Π°Π²ΠΈ Π½Π΅ PAM-Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡΡΠ°. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅. ΠΠΎ Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π΅ΠΌΠ΅ΡΠ΅ Ρ ΡΠΎΠ²Π°.

ΠΡΠ΅ Π΅Π΄Π½Π° ΡΡΡΠ΄Π½ΠΎΡΡ Π±Π΅ΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΠ΅ΠΌΠ° Π²ΡΠΈΡΠΊΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ. Π ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π³ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π° Π½Π° worker pool, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ TLS handshake.
Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ°, Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΊΠΎΠ³Π΅ΡΠ΅Π½ΡΠ½Π° Π²ΡΠ»Π½Π° ΠΎΡ 20 000 ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ΅ΡΠΈ. Π Π½Π° ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° libpq ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π΅ Π΄Π° ΠΎΡΡΠΈΡΠ° ΡΠ°ΠΉΠΌ-Π°ΡΡΠΈΡΠ΅. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ°ΠΌ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ΠΎ 3 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²Π»ΡΠ·Π°Ρ Π² Π±Π°Π·Π°ΡΠ° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²Π»ΡΠ·Π°Ρ Π² Π±Π°Π·Π°ΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΠΊΡΠΈΡΠΎ Ρ Π½Π΅Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»Π΅Π½ retry.
ΠΠΈΠ΅ ΡΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅ Π΄ΠΎ ΠΈΠ·Π²ΠΎΠ΄Π°, ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ°Ρ ΠΌΠ΅ ΡΡ Π΅ΠΌΠ°ΡΠ° ΠΎΡ PgBouncer, Ρ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ throttling Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ TCP-ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌΠ΅.
ΠΠΊΠΎ Π²ΠΈΠ΄ΠΈΠΌ, ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌΠ΅ Π²ΡΡΠ·ΠΊΠΈ ΠΈ ΡΠ΅ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π΅ ΡΡΠΏΡΠ²Π°Ρ Π΄Π° ΡΠ΅ Ρ Π΅Π½Π΄ΡΠ΅ΠΉΠΊΠ½Π°Ρ, ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π³ΠΈ Π² ΠΎΠΏΠ°ΡΠΊΠ°, Π·Π° Π΄Π° Π½Π΅ ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π°Ρ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ. Π’ΠΎΠ²Π° Π΄ΠΎΠ²Π΅ΠΆΠ΄Π° Π΄ΠΎ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΡ Ρ Π΅Π½Π΄ΡΠ΅ΠΉΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ Π½Π΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ Π²ΡΡΠ·ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π΄ΠΎΡΠ»ΠΈ. ΠΠΎ ΠΏΠΎΠ½Π΅ Π½ΡΠΊΠΎΠΉ ΡΠ΅ Π²Π»Π΅Π·Π΅ Π² Π±Π°Π·Π°ΡΠ°, Π΄ΠΎΡΠΈ ΠΏΡΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½ΠΎΡΡ.
Roadmap
ΠΠ°ΠΊΠ²ΠΎ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π² Odyssey Π² Π±ΡΠ΄Π΅ΡΠ΅? ΠΠ°ΠΊΠ²ΠΎ ΡΠΌΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΠΌΠ΅ ΡΠ°ΠΌΠΈ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΡΠ°ΠΊΠ²Π°ΠΌΠ΅ ΠΎΡ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°?

ΠΡΠΌ Π°Π²Π³ΡΡΡ 2019 Π³ΠΎΠ΄ΠΈΠ½Π°.
Π’Π°ΠΊΠ° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°ΡΠ΅ ΠΏΡΡΠ½Π°ΡΠ° ΠΊΠ°ΡΡΠ° Π½Π° Odyssey ΠΏΡΠ΅Π· Π°Π²Π³ΡΡΡ:
- ΠΡΠΊΠ°Ρ ΠΌΠ΅ SCRAM ΠΈ PAM ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅.
- ΠΡΠΊΠ°Ρ ΠΌΠ΅ Π½Π°ΠΏΡΠ΅Π΄Π½Π°Π»ΠΈ ΡΠ΅ΡΡΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π½Π° standby.
- ΠΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ online-restart.
- Π Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠ°ΡΠ·Π° Π½Π° ΡΡΡΠ²ΡΡΠ°.

ΠΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ ΡΠ°Π·ΠΈ ΠΏΡΡΠ½Π° ΠΊΠ°ΡΡΠ° Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π°, ΠΈ ΡΠΎ Π½Π΅ ΠΎΡ Π½Π°Ρ. Π ΡΠΎΠ²Π° Π΅ Π΄ΠΎΠ±ΡΠ΅. ΠΠ°ΡΠΎΠ²Π° Π½Π΅ΠΊΠ° ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΡΡΠ°Π²Π° ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡΠ΅.

? Π£ Π½Π°Ρ Π΅ΡΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π΅Π· Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π±ΡΠ΄ΡΡ ΠΏΡΠΎΡΡΠΎ Π³ΡΠ΅ΡΡ Π²ΠΎΠ·Π΄ΡΡ . ΠΠ½ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ failover ΠΈ switchover. Π ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠ΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΈΡ Π·Π°Π½ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΎΠΉ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ, ΡΡ ΠΆΠ΅ ΡΠ°ΠΌΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ½Π°ΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ.

Π ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π² Postgres, Π·Π°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ Π²Π΅ΡΡΠΈΡ 10, ΠΈΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ ΠΏΡΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΈ session_attrs. ΠΠΎΠΆΠ΅ΡΠ΅ Π² ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π΄Π° ΠΈΠ·Π±ΡΠΎΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° ΠΊΠ°ΠΆΠ΅ΡΠ΅ Π·Π°ΡΠΎ ΠΎΡΠΈΠ²Π°ΡΠ΅ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ°: Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅. Π Π΄ΡΠ°ΠΉΠ²Π΅ΡΡΡ ΡΠ°ΠΌ ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ ΠΏΡΡΠ²ΠΈΡ ΠΏΠΎ ΡΠΏΠΈΡΡΠΊ Ρ ΠΎΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΌΡ Ρ Π°ΡΠ΅ΡΠ²Π° Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π½Π° session_attrs.

ΠΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΅, ΡΠ΅ ΡΠΎΠΉ Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΠ΅ΡΠΎ Π² ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ°. ΠΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°, ΠΊΠΎΡΡΠΎ Π΅ ΠΈΠ·ΡΠ°ΠΊΠ°Π»Π° Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π²Π°ΡΠΈΡ ΡΠ΅ΡΠ²ΠΈΡ. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°, ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ Π² Odyssey Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ.
Odyssey ΡΡΡΠ±Π²Π° Π΄Π° Ρ ΠΎΠ΄ΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½ΡΠΈ Π² Π±Π°Π·Π°ΡΠ° ΠΈ Π΄Π° ΠΏΠΈΡΠ° Π·Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΡΠΎ ΡΠ°Π·ΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡ primary. Π Π°ΠΊΠΎ ΡΠΎ Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π°Π»ΠΎ ΠΏΡΠ΅Π΄Π΅Π»Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ, Π½ΠΎΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ°Ρ, Π΄Π° ΡΠ΅ ΠΊΠ°ΠΆΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΠΈΡΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ Π΄ΡΡΠ³ Ρ ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° ΠΏΠΎ-Π±ΡΡΠ·ΠΎ Π΄Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΡΠΎ Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅.
Π’ΡΡΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π½Π°Π·ΠΎΠ²e ΡΡΠΎΠΊ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π·Π°ΡΠΎΡΠΎ ΡΠΎΠ²Π° Π΅ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄. ΠΠΎ ΡΠ΅ Π½Π°Π΄ΡΠ²Π°ΠΌ, ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΎΡΠ½Π΅ΠΌΠ΅ 2,5 Π³ΠΎΠ΄ΠΈΠ½ΠΈ, ΠΊΠ°ΠΊΡΠΎ Π½Π° ΠΊΠΎΠ»Π΅Π³ΠΈΡΠ΅ ΠΎΡ PgBouncer. Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° Π²ΠΈΠ΄Ρ Π² Odyssey.

. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ Π΄Π²Π° Π½Π°ΡΠΈΠ½Π°. ΠΡΡΠ²ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ SQL ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ "prepared". ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠ°Π·ΠΈ SQL ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΡΡΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·Π±ΠΈΡΠ°ΠΌΠ΅ SQL ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° Bouncer. Π’ΠΎΠ²Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΈΠ·Π»ΠΈΡΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ ΠΏΡΠ»Π΅Π½ ΠΏΠ°ΡΡΠ΅Ρ. ΠΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΡΠΊΠ° SQL ΠΊΠΎΠΌΠ°Π½Π΄Π°.
ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² proto3. Π ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈΠ΄Π²Π° Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½Π° ΡΠΎΡΠΌΠ°. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ, ΡΠ΅ Π½Π° Π΅Π΄Π½ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π΅ ΠΏΠΎΠΈΡΠΊΠ°Π» Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. Π Π΄ΠΎΡΠΈ Π°ΠΊΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡΠ° Π΅ ΠΏΡΠΈΠΊΠ»ΡΡΠΈΠ»Π°, Π²ΡΠ΅ ΠΎΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ²ΡΡΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠΎ ΡΡΠΊ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° ΡΠ°Π·ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³Π°, Π·Π°ΡΠΎΡΠΎ Π½ΡΠΊΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈ Π·Π° ΡΠΎΠ²Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠΎΡ ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π΅ ΡΡΠ·Π΄Π°Π» ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΈ Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΡΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠΈΡΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΡΠ·Π΄Π°Π»ΠΈ ΡΠ°Π·ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°, Ρ.Π΅. ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΡΠ·Π΄Π°Π»ΠΈ ΡΠ°ΠΊΠ°Π²Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ.
ΠΠ½Π΄ΡΠ΅Ρ Π€ΡΠΎΠΉΠ½Π΄ ΠΊΠ°Π·Π°, ΡΠ΅ Π°ΠΊΠΎ ΠΏΡΠΈ Π²Π°Ρ Π΄ΠΎΠΉΠ΄Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π²Π΅ΡΠ΅ Π΅ ΡΡΠ·Π΄Π°Π²Π°Π» ΡΠ°ΠΊΠ°Π²Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π² Π΄ΡΡΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, ΡΡΠ·Π΄Π°ΠΉΡΠ΅ Ρ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ. ΠΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ Π½Π΅ Π΅ ΡΡΠ²ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π² Π±Π°Π·Π°ΡΠ° Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π½ΠΎ ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΊΠΎΠΉΡΠΎ ΠΏΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π±Π°Π·Π°ΡΠ°, Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π°ΠΊΠΎ ΠΏΡΠΎΡΡΠΎ ΠΌΡ Π΅ Π΄Π°Π΄Π΅Π½ΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, Π² ΠΊΠΎΠ΅ΡΠΎ ΠΈΠΌΠ° ΡΠ°ΠΊΠ°Π²Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° Π·Π°ΡΠ²ΠΊΠ°.

Π ΠΎΡΠ΅ Π΅Π΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ PgBouncer. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΡΡΠ½Π΅ΠΌ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°. ΠΠΎ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΅ ΡΡΠ΅Π΄Π½Π° ΡΠ΅ΠΌΠΏΠ΅ΡΠ°ΡΡΡΠ° Π·Π° Π±ΠΎΠ»Π½ΠΈΡΠ°ΡΠ°: Π½ΡΠΊΠΎΠΉ Π΅ ΡΡΡΠ΄Π΅Π½, Π½ΡΠΊΠΎΠΉ Π΅ ΡΠΎΠΏΡΠ» - Π² ΡΡΠ΅Π΄Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΠ° Π·Π΄ΡΠ°Π²ΠΈ. Π’ΠΎΠ²Π° Π½Π΅ Π΅ Π²ΡΡΠ½ΠΎ.
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΡΠ΅Π½ΡΠΈΠ»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π±ΠΈΡ Π° ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΡΠ΅ ΠΈΠΌΠ° Π±Π°Π²Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π°Ρ ΡΠ΅ΡΡΡΡΠΈ, ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΏΠΎ-ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ².

ΠΠ°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ - ΠΈΡΠΊΠ°ΠΌΠ΅ Π²Π΅ΡΡΠΈΡ 1.0 (ΠΠ΅ΡΠ΅ Π΅ ΠΈΠ·Π»ΡΠ·Π»Π° Π²Π΅ΡΡΠΈΡ 1.1). Π€Π°ΠΊΡΡΡ Π΅, ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Odyssey Π΅ Π² Π²Π΅ΡΡΠΈΡ 1.0rc, Ρ.Π΅. release candidate. Π Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·Π±ΡΠΎΠΈΡ , ΡΠ° Π±ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡΠ°Π²Π΅Π½ΠΈ ΡΠΎΡΠ½ΠΎ Ρ ΡΠ°Π·ΠΈ Π²Π΅ΡΡΠΈΡ, ΠΎΡΠ²Π΅Π½ ΡΠ΅ΡΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ.
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π·Π° Π½Π°Ρ Π²Π΅ΡΡΠΈΡ 1.0? ΠΠΈΠ΅ ΠΏΡΡΠΊΠ°ΠΌΠ΅ Odyssey Π½Π° Π½Π°ΡΠΈΡΠ΅ Π±Π°Π·ΠΈ. Π’ΠΎΠΉ Π²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π½Π°ΡΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π½ΠΎ ΠΊΠΎΠ³Π°ΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ 1 000 000 Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΡΠΎΠ²Π° Π΅ Π²Π΅ΡΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΡΠ΅ΡΠ΅ΠΌ 1.0.
Π ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΡΠΈ ΠΏΠΎΠΈΡΠΊΠ°Ρ Π° Π²Π΅ΡΡΠΈΡ 1.0 Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π° ΠΈ ΠΏΠ°ΡΠ·Π° ΠΈ SCRAM. ΠΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΡΠ½Π΅ΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΡΠ΅Π΄Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΠΈΡΠΎ SCRAM, Π½ΠΈΡΠΎ ΠΏΠ°ΡΠ·Π°ΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ° Π²ΠΌΡΠΊΠ½Π°ΡΠΈ. ΠΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠΎΠ·ΠΈ Π²ΡΠΏΡΠΎΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ΅ΡΠ΅Π½ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ Π±ΡΡΠ·ΠΎ.

ΠΡΠ°ΠΊΠ²Π°ΠΌ Π²Π°ΡΠΈΡΠ΅ pull request-ΠΎΠ²Π΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΡΡΡ ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠΌΠ°ΡΠ΅ Ρ Bouncer. ΠΠ΅ΠΊΠ° Π³ΠΈ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ. ΠΠΎΠΆΠ΅ Π±ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π²ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ.
Π‘ ΡΠΎΠ²Π° ΠΌΠΎΡΡΠ° ΡΠ°ΡΡ ΠΏΡΠΈΠΊΠ»ΡΡΠ²Π°, Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΡΡΡ Π²Π°Ρ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ!
ΠΡΠΏΡΠΎΡΠΈ
ΠΠΊΠΎ Π·Π°Π΄Π°Π΄Π°ΠΌ ΠΌΠΎΠ΅ΡΠΎ application_name, ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π² transaction pooling Π² Odyssey?
Π Odyssey ΠΈΠ»ΠΈ Π² Bouncer?
Π Odyssey. Π Bouncer ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°.
Π©Π΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ΅Ρ.
Π Π°ΠΊΠΎ ΠΌΠΎΠ΅ΡΠΎ ΡΠ΅Π°Π»Π½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΡΠ΅ Π±ΡΠ΄Π΅ Π»ΠΈ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΎ?
Π©Π΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ΅Ρ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ Π² ΡΠΏΠΈΡΡΠΊΠ°. ΠΠ΅ ΠΌΠΎΠ³Π° Π΄Π° ΠΊΠ°ΠΆΠ° Π΄Π°Π»ΠΈ application_name Π΅ Π² ΡΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΡΡΠΌ Π³ΠΎ Π²ΠΈΠΆΠ΄Π°Π» ΡΠ°ΠΌ. Π©Π΅ Π·Π°Π΄Π°Π΄Π΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. Π‘ Π΅Π΄Π½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ ΡΠ°ΠΌ ΡΠ΅Ρ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π΅ Π·Π°Π΄Π°Π²Π°Π» ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ, ΠΠ½Π΄ΡΠ΅ΠΉ, Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄Π°! ΠΠΎΠ±ΡΡ Π΄ΠΎΠΊΠ»Π°Π΄! Π Π°Π΄Π²Π°ΠΌ ΡΠ΅, ΡΠ΅ Odyssey ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° Π²ΡΠ΅ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ Ρ Π²ΡΡΠΊΠ° ΠΈΠ·ΠΌΠΈΠ½Π°Π»Π° ΠΌΠΈΠ½ΡΡΠ°. ΠΠΎΠΆΠ΅Π»Π°Π²Π°ΠΌ Π²ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΡΠ΅ ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½. ΠΠ΅ΡΠ΅ ΡΠ΅ ΠΎΠ±ΡΡΠ½Π°Ρ ΠΌΠ΅ ΠΊΡΠΌ Π²Π°Ρ Ρ ΠΌΠΎΠ»Π±Π° Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΈΠ·ΡΠΎΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Odyssey Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Ρ.Π΅. master slave, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ»Π΅Π΄ failover Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ Ρ Π½ΠΎΠ²ΠΈΡ ΠΌΠ°ΠΉΡΡΠΎΡ.
ΠΠ°, ΠΌΠΈΡΠ»Ρ, ΡΠ΅ ΡΠΈ ΡΠΏΠΎΠΌΠ½ΡΠΌ ΡΠ°Π·ΠΈ Π΄ΠΈΡΠΊΡΡΠΈΡ. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°. ΠΠΎ Π½ΡΠΌΠ° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ . ΠΠΈΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ»Π΅Π΄ΠΈΠΌ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° Π΄Π°Π»ΠΈ ΡΡΡΠ²ΡΡΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π΄Π°Π»ΠΈ Π΅ ΡΡΠ°Π½Π°Π»ΠΎ failover, ΠΊΠΎΠΉ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° pg_recovery. ΠΠΌΠ°ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ°, ΡΠ΅ Π½Π΅ ΡΠΌΠ΅ Π½Π° ΠΌΠ°ΠΉΡΡΠΎΡΠ°. Π ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ ΠΎΡ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ? Π’.Π΅. ΠΈΠ΄Π΅ΡΡΠ° Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°, ΡΡ ΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π°. ΠΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΡΡΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π·Π½Π°ΡΡ C, ΡΠΎΠ²Π° Π΅ ΡΡΠ΄Π΅ΡΠ½ΠΎ.
ΠΡΠΏΡΠΎΡΡΡ Π·Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ΡΠΎ ΡΡΠ΅Π· ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°, Π·Π°ΡΠΎΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ°Π½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ Π»Π΅ΡΠ½ΠΎ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎ ΡΡΠΊ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ, Ρ.Π΅. ΠΊΠ°ΠΊ ΡΠΎΡΠ½ΠΎ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ, ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π΄ΠΎΠ±ΡΠ΅.
ΠΡΠΏΡΠΎΡΡΡ ΡΡΡΠΎ Π΅ Π·Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅. ΠΠΎΠ»ΡΡΠ°Π²Π° ΡΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ΅ΠΉΡΡΡΡ ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ. Π Π΅ ΡΡΠ½ΠΎ, ΡΠ΅ Π΄ΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΡΠ΅ Ρ ΠΎΠ΄ΠΈ ΠΏΠΎ-ΡΡΠ΄ΠΊΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄ΠΎ ΠΌΠ΅ΠΉΡΡΡΡΠ° Π·Π° Π²ΡΡΠ·ΠΊΠΈ, Π·Π°ΡΠΎΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ ΡΠ°Π·Π»ΠΈΠΊΠΈ. ΠΠ°Π·Π°Ρ ΡΠ΅, ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΠΈΡΠ΅ Π² Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°ΠΊΠΈΠ²Π°, ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ Π½Π° Π²Π°ΡΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ ΠΈ Π½ΡΠΌΠ° Π΄Π° Ρ ΠΎΠ΄ΠΈΡΠ΅ ΡΠ°ΠΌ, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΠ°. ΠΡΠΈ ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π΅ ΡΡΠ΅ Ρ ΠΎΠ΄ΠΈΠ»ΠΈ ΡΠ°ΠΌ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° Ρ ΠΎΠ΄ΠΈΡΠ΅, ΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π²ΠΈ Π½ΡΠΆΠ½ΠΈ, Π½ΡΠΌΠ° Π΄Π° ΡΠ° Π²Π΅Π΄Π½Π°Π³Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ. Π’.Π΅. Π°ΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Ρ ΠΎΠ΄ΠΈΠΌ Π΄ΠΎ ΠΌΠ΅ΠΉΡΡΡΡΠ°, ΡΠ°ΠΌ ΠΊΠ΅ΡΡΡ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½, Π° Π² ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° ΠΊΠ΅ΡΡΡ ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ·ΠΎΡΡΠ°Π²Π°.
ΠΠ°, ΡΠΎΠ²Π° Π΅ Π²ΡΡΠ½ΠΎ. Π pcache Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅, Π² real cache Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅, Π² ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΏΠ°ΡΡΠ½Π°ΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΈΠ·ΠΎΠ±ΡΠΎ Π½ΠΈΡΠΎ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ°.
Π ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΊΠ°ΠΊΡΠ² ΠΊΠ»ΡΡΡΠ΅Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°, ΡΠΎ Π΄ΠΎΠΊΠ°ΡΠΎ ΡΡ ΡΡΠ°ΡΡΠΈΡΠ°, Π² Π½Π΅Ρ Π²ΡΠΈΡΠΊΠΎ Π΅ Π»ΠΎΡΠΎ, Ρ.Π΅. ΡΡ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΡΠ²ΠΎΡ ΠΊΠ΅Ρ.
Π Π°Π·Π±ΡΠ°Ρ ΠΈΠ΄Π΅ΡΡΠ°. ΠΡΠ°Π²ΠΈΠ»Π½ΠΈΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π±ΠΈ Π±ΠΈΠ» Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΌΠ°Π»ΡΠΊ ΠΏΡΠΎΡΠ΅Π½Ρ Π·Π°ΡΠ²ΠΊΠΈ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ ΠΊΠ΅ΡΠ°. ΠΡΡΠ±ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΎΡΡΠ°Π²Π°ΠΌΠ΅ Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 10 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΎΡ ΠΌΠ΅ΠΉΡΡΡΡΠ°. Π ΡΠΎΠ²Π° ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π° Π½Π΅ Ρ Π΅Π΄ΠΈΠ½ Π·Π°ΠΌΠ°Ρ , Π° ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π·Π° Π½ΡΠΊΠΎΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ.
ΠΠ°, Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ ΡΠ΅ΠΆΠ΅ΡΡΡΠ°.
Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΠ±ΡΠ° ΠΈΠ΄Π΅Ρ. ΠΠΎ ΠΏΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π° ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅. ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠΌΠΈΡΠ»ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΠΌ. Π’ΠΎΠ²Π° Π΅ ΠΎΡΠ»ΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ, Π·Π° Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ.
Π nginx ΠΈΠΌΠ° ΡΠ°ΠΊΠ°Π²Π° ΠΎΠΏΡΠΈΡ Π±Π°Π²Π½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π² ΠΊΠ»Π°ΡΡΠ΅Ρ Π·Π° ΡΡΡΠ²ΡΡ. Π ΡΠΎΠΉ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ.
ΠΠ°, ΠΎΡΠ»ΠΈΡΠ½Π° ΠΈΠ΄Π΅Ρ, ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠΈΠ³Π½Π΅ΠΌ Π΄ΠΎ ΡΠΎΠ²Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
