á áŞáááą ááľáĽ áŁá ááľáŹ áŚáŽá˛á á¨áááááľ áááłáá á˛ááľá PgBouncer á¨ááá ἠáááľá áĽáá´áľ áĽáá°áá°áą ááááááłáá˘
áŞá˛áŽ
á°áá ááá˝áá! áľá á ááľáŞá ááá˘
á Yandex ááľáĽ á¨áááľ ááá á¨ááἠááłáá˝á áĽáááááᢠáĽá áᏠáľá á¨áááááľ ááá áááááśá˝ áááľ á áá.
á áŠá˛áŤá á¨áááááľ ááááá áĽáá´áľ áĽáá°áá°áá áŤáá á¨á፠ááááŠáᢠá á´áááŤá áľá-á˝áá ááľáĽ áááľá¨áľ áŤáá áľ áĽáŠ á´áááŤá áá áááááľ á áĽáááľ áĽááááá.
áááą á áŁá á¨á°ááłá°á áá ᣠááááŤáąá á áĽá á¨ááἠááłáá˝ ááľáĽ á¨áááááľ áááłá á áĽáŽááἠáá áĽá áľááą ááá áĽááłá á áŤáľáááááľáᢠá áĽáááĽ, á ááá áŚáł á ááłááľ á ááĽáŽá˝ á á, ááá áá á Postgres ááľáĽ áĽáá°á፠á áá°áŤá. áĽá á áľáአ(á ááááľ++ 2019) á Postgres ááľáĽ áá ááá˝á áľááááááľ á ááŽáá áłáááŤáá á¨áá¨á ááᣠá áᢠáĽá áĽá áĽáá°á°á¨áłááľáŁ áĽáŤáááťá¸áá á áľááá áŤááአá°áá˝ áá°áá ááĄáŁ áĽá áĽááá á¨á ááłá¨ áá¨áĽ áĽá á¨ááĽá¨áľ á á ááá áá á á°áŤáŤá á áŁá á áá á áá á¨áľáááľ á˝ááŽá˝ áŤáá áá¸á á°áá˝ áá¸áᢠáĽá á á ááłááľ áŚáłáá˝ á˝ááŽáš ááá˝ áľáááá á áŁá á áľá¸á᪠ááá áá˝áá.
Yandex Postgres á ááᢠáĽá ᨠYandex á áááááśá˝ á Yandex.Cloud ááľáĽ áááŤáᢠáĽá á ááľáľááŹáľ ááľáĽ á˘áŤááľ á ááľ áááŽá áĽáŤááá˝á á á°á¨ááľ á¨ááŤááá á ááŤáł petabytes ááἠá ááá˘
áĽá áááá á áááááśá˝ áľáááá á°á¨ááá á¨á á á ááá áĽááááŁáá - áá á¨ááľááá ááááľ áá áá ááľááá ááááľ áá ᣠá¨á°ááá°á áááľ á ááá˝ (á¨á°ááłá°á áĽá áŤáá°ááłá°á) ᣠááľáŹ ᣠá¨ááŁáĽ áĽáŤááá˝á á ááŁááą ááá˘
áĽáŤááłááą á¨áááľá°á ááľááá ááááľ Postgres ááᣠá áá áá á¨ááľáľááŹáľ áĽá á¨ááľáľá áľáááśá˝ á á°á¨á᪠á¨áááááľ áááł á°áááᢠConnection pooler áá áĽá áĽá ááá áááá áĽá á áá áááá.
á¨áááááľ áááł áá ááá áááľáá?
Postgres á¨áłáłá¤á áá á˛á°áŤ á¨áá°áąá áá´á ááá ááᢠáá áááľ á ááľ áááááľ á ááľ áá°áľ áá, á ááľ Postgres backend. áĽá á áá ááᣠááľáĽ áĽá á¨á°ááŤáŠ áá¸ááŤáá˝ á á, áá á áá°ááŤáŠ áááááśá˝ á¨á°áᨠáááľá¨á á áŁá ááľ áá.
á á°á¨ááŞá á¨ááľáľááŹáľ áŽáľ procArray á¨ááŁá áľááľá á ááᢠáľá á ááłá¨ áá¨áĽ áááááśá˝ áá°á¨áłá áá¨á ááá. áĽá ááá áááľ ááťáá á¨ááŽáŤáŹá ááááŁá áŞáŤ áľáá° áááŽá˝ á¨ááľáá ááľáĽáľáĽááľ á áá¸á ᣠáĽááą á á á ááá á¨á ááłá¨ áá¨áĽ áááááśá˝ áá áá°áŤáᢠá áŁá ááá ááŁá áá°áľ ááᣠááá áá áĽá áᢠáŁáá¸á á¨á ááłá¨ áá¨áĽ áááááśá˝ áááŽá˝ áľáá˝ á¨á áá ááľ ááááᢠáĽá áááŽá˝ áľáá˝ á¨á áá ááľ á˛ááᣠááĽá á¨á ááłá¨ áá¨áĽ áááááśá˝ á áŁá á¨áá°á áá áááá áá˝ááá˘
3 ááá á¨áá˝á áá´áá˝ á á-
- á áááá¨áťá á áŠá.
- á áá¨á ááą á áŠáá˘
- áĽá á ááŤá¨á, áááľá, ááá á áááľ áĽááŽá˝.
áĽáá° á áááłá°á áá á áĽáŽ á¨á°á°áŤá áááł á á áá áá á ááááŁáľ áá ááᢠá PostgreSQL ááŽáá˝áá áŤá áá°ááťá˝á áá áá á á áĽááá áŤá°áááłáᢠááź áĽáá°ááłá ááá°áá á á áľá¸á᪠ááᢠáĽá á áĽáááą, á ááá´ááľ áááá¨áĽ áááľ áááľááá˝ á áá. áĽááá á¨áá°áá áŞáŤ-áá áááł áĽá á°áŞ áááł áá¸áá˘
á¨áá°áá áŞáŤ-áá áááł ááá ááááľ áá. áĽá ááá áááľ ááťáá á¨á°áá á áááá˝ ááááľ áá°áĄááłáᥠá áááŽáá˝ á¨ááá አáááááśá˝áá á áŽáľ ááľáĽ áĽáá° á ááŤáł á°ááá áááááśá˝ á¨áá¨á ááą áá áŤá ááĄá˘
á¨ááá á¨á á˝áá á á ááľ á¨á°áá°á ááĽáĽ áá á¨áááŁáá áá á ááááŤáľ ááááá, áá° áĽá áááŁá áá˝áá˝ áá°ááŤáľ ááááá.
á¨á፠áĽá á°á¨á᪠á°á°áŤá˝ááľ ááá˝áŁ á ááŤáł á¨áá¨á ááá¨áá˝ áĽááłáááľ áááááŁáᢠáĽá á¨á°áá áá áá á¨ááááľ á ááŤá¨áĽ áá° áĽá ááĽáŽá˝ áááŤá. áľááááš áá° 10 á¨áá á áááááśá˝ áá¸áᢠáá á áá°á áááľ áá ፠á¨áá˝á á áá áá.
áľá ááŽáᲠáááááľ á¨á°ááááá áĽá ááá ááŤá°áá á¨áá˝á áááľ ááá°áŽá˝ á áᢠáááłáá˝ áĽáť á áá°ááᢠáĽááą áááłáá˝ + á¨á áá áĽáŠ á°ááŁáŤáľ áá¸áᢠáá
áá á ááŤáłáá áááł, ááá á°á áá á á°á¨á᪠á°ááŁá á ááááá. áĽá áááłáá˝ á¨ááá áá ááááľá áĽáť ââáá°áááᣠáááľá á ááľ áᢠá°áá áᣠá ááľ á᪠á°áá á áá° áłáłá¤áá˘
áá ááĽá ááááá˝ á áŁá á°áľáá á áá°áá, áľááá á¨ááĽááľ áá°áŁá°áĽá á¨áá°áá á¨áá PgBouncer áĽáá áááá, áááľá á¨á áááá áááááśá˝ á¨á°áá á áááááśá˝ áá á¨ááááąáľ áááĽááą áá áĽáť áá.
áĽá á áĽá á¨áĽáŤ áŤá, áá áĽáááľ áá. áá áĽááľ á˝ááŽá˝ á á.
á˝ááŽáš á¨ááááŠáľ ááá ááá áááááá á˛ááá ááᣠááááŤáąá ááá áᢠáááááśá˝á á áŤáŁá˘áŤá áá¸áᢠááá á°á á°áááś áᣠáĽá áĽáá°ááá ááá áááá áá¨áłá°á á áľá¸á᪠ááááá˘
á áĽááἠá áááŹá˝á_áľá_á áľáľ_ááľáľá áá áá áľá˝ááá ᢠáá á Bouncer á áŠá á¨á áá á áľáŤáťá áá° áá°áá áŞáŤ_áľá ááá¨áá á¨ááŤáľá˝á ááááľ ááᢠáá á áááŹá˝á_áľá á á°á¨á᪠áááááľ á°áááĽáŻáá˘
á áá ááŤá ááᣠá˘áŤá ááľáá áĽááá°á áĽáŤááá˝ á ááá áľáŁ áĽá á°ááŤáá ááľáá áá° áłáłá¤á á¨áá አáĽáŤááá˝ áŁáá áľá˘ áĽá áá ááŠááľ á áľááá á¨áá°áá áŞáŤ_áľá áááľ áá ᣠáá á ááá¨áłá°á áĽáť á¨ááŤáľáááá áá á ááŤá˝ áá á áá°ááá˘
á á°á¨ááŞá, Bouncer ááľáĽ á ááľ áááł ááá°áĽ á áá˝áá, áááľá á á ááľ á¨á°áá°á á°á áá á¨ááἠááł áááááśá˝ áĽááľ, á á ááľ á¨á°áá°á á¨ááἠááł.
áá áá° áá áááŤá? á C++ á¨á°áá á¨á°áŤá á áááááľ á áá áĽá á á á áŤá˘áŤá áŤá áľáá˝ á áááááľ á ááľááá ááą áá ááá á áááľ á áľá᪠ááá á áá¨á ááą á¨ááá°áŤ ááá áá ážáአá áĽáˇáᢠ20 áááááśá˝á áá¨ááłá áĽá ááá ááá áá áĽáá. á¨áĽááľá áŽáľ áĽááłá á¨á°ááá° ááá˘
áĽáᣠá áĽáááĽáŁ áá á á ááĽá á¨ááŤáá áľáá˝ áááľá°á á Bouncer áťááᣠáááľá á°áá áá˝á áá° áááłá ááá°áĽá˘
áá áá á Postgres á áŠá ááľá¨á ááťá áááá, áááľá, á áá¨á ááą ááľáĽ áŤááľá áááá˝ á áááááśá˝ áĽááľ áááľáĄ.
áá ááá á¨á áááአáá ááá áááááľ áĽáá°ááááľ á¨áá¨áłáľ á˝ááł áŤáŁá. PgBouncer á¨áááááľ áľá á°áľ á ááĽáá, áááá á°ááłáłá áá¨áá ááááłá. áĽá áĽááľá áá¨áąáľ á áá˝áá: ááááŁáľ á¨ááá ááá á°áááŻá, ááááŁáľ á¨ááἠááłá á áá á ááś ááá áá˝áá, ááááŁáľ á¨áá á˝áá á á. ááá áá ááá ááááľ ááá፠á¨áá. á ááľ ááá áá áááľá¨áľ áŤáá°áťá ááá áááá áĽáá°ááá˝á á áłááá.
á á ááľ á¨á°áá°á ááĽáĽ áá á¨áá°áá áŞáŤáá ááŤáá˝ áááá¨áłá áĽá á áááŹá˝á áĽá¨á°áŤ áĽááłááá áááá¨áłá.
á¨áá áááá¨áą áĽá Bouncer áá á-áá áááá áááá¨áąá˘ áá á á áááááą ááááľ ááľáĽ áľáá ááἠáá. á á ááľ áááľ á°áŠá ááľáĽ á¨ááἠááłáá ááááŤáľ áĽá¨á°ááá áĽáá°áá á áááááŁáᣠáĽá áááłáá áááá áŤáľáááááłáá˘
á°á¨á᪠PgBouncers áŤáľááááá á¨áá áá°áá°á፠áá á°áá°ááá˘
Bouncer áľáá˝ á°áľá°áŤáááá˘
áĽá áĽá Bouncers ᨠTCP áá°áĽá áĽáá°áá á áá áá áĽáá˛ááą á á°á¨áᢠáĽá áľááá° áááá ááĽ-áŽá˘á á áá áá á ááŤá¨áá¸á á¨ááᥠᨠTCP áááááśá˝á á áŤáľ-á°á áŤáľá°ááááá˘
áá áá°áá áá˝ ááá˝ ááᣠáá áááľ á ááľ Bouncer áŤáá áááľááᣠááá áá Bouncersá á áááľ ááŤá¨á áŤá áľáŤ ááľ áááááśá˝ áááŤá¨áĽ á ááĽá á˘
áĽá á á°áá°á á á˝á áľ áĽááá 3 Bouncers áĽáŤááłááłá¸á á 100% á ááłáŤá¸áá áĽáá°áá á ááŤáľá°áá áá˝ááᢠá áŁá áĽááľ Bouncers áŤáľáááááłáᢠááá?
ááááŤáąá TLS á áá ᢠá¨á°áá°á ᨠáááááľ á áá ᢠáĽá Postgresá á¨TLS áá áĽá áŤááą áŤáá¨ááŠáľ á¨á°áá°á¨áą áááááśá˝ ááĽá ááľá ፠á¨áá á áááľ á á°á á°á¨á°áá˝ á áá á áá á áááˇá ᣠááááŤáąá á¨á˛á¤áá¤áľ áá¨áŁá ἠá¨á˛áአááĽáśá˝á áľááá áá˘
áĽá á¨áá á¨áᢠáááááśá˝ ááá á á áááá áľ áá á¨áá¨ááááľá á áŁá áĽááľ ááľá˘áŤá á°ááŁáŤáľá áá¨áľ áá˝ááᢠá¨áĽá áá á á°ááááľ ááá˝ ááŤá¨á áááŤá¨á áľááá˝áᣠá¨áᢠáááááśá˝ ááá á á áŁá á¨á°ááá° áááł ááᢠáŤá áááľ á áá ááááŤáľ á¨áľáŽá áá áŚáł á áááá, ááá áááľ áá° áá á¨ááἠááá¨á á°ááłá. ááá á á°ááłáłá áá áá˛á¤áá¤áľ á°áá ááááľ áááŁáá˘
áĽá áĽá ááĽá áŤáá á¨á˛á¤áá¤áľ áá¨áŁá ἠá Bouncer á°áá áááľ áááá áá˝ááᣠáá ááŽáŽáá áá¨áááᢠá áá ááĽá፠ááááŤáľáŁ á¨áᢠáááááśá˝ ááá á áŤáá°áłá¨á ááá áá˝ááᢠáŤá ááá á¨áá ááĽááľ áá° áá°á¨áą áĽáá°áá á¨áá¨áŠáŁ á á°áŁáᨠááá á ááľáĽ á°áááá á áááĄáá˘
16 áŽáŽá˝á á 16% á¨ááá á¨100 PgBouncers ááłá áĽáá á áá˘
áá° ááá´á PgBouncer á°áá°ááᢠáá Bouncer áá á áĽá áááľ áá áá°á¨áľá áľ á¨áá˝á ááἠáá á áá. á¨áĽá ááŤá Bouncers á TCP á¨áĽá áá¨áŁá ἠáĽá á áá áááá, áĽá ááľáŁá Bouncers ááŤá áááááśá˝á á¨áá á á áá áááá áłá°á ááľáááá áááł áĽá á áá áááá.
á áá áá á ááľáĽ, ááľááł áłáá ááľááá ááťáá. áĽááá á áá 18 Bouncers á ááľ á á ááľ áĽáá°áá ááľááá áá˝ááᢠáá áĽáá˛á ááááąá áá á ááá¨áľ á áŁá á¨áŁáľ ááᢠSysadminsᣠDevOps áĽá ááá á áááá á°á áŤá á¨áá á°áá˝ á áá ááá áľ á áŁá á°áľá°á á ááááá˘
ááá ááťáťáŤááťá˝á áá° áááľ ááá á¨ááŤáľá áááľááᣠááá áá Bouncer á á°áἠá áá°áááᢠáááłáᣠá á ááľ áá°áĽ áá á ááŤáł PgBouncersá á¨ááľáŹáľ á˝ááł á¨á ááľ áá á ááľ á°áá˝ááᢠá¨á ááŤáł á ááłáľ á ááľ á¨áá áŁá ᪠áá á¨ááłáĽ áĽáŤá áá áá˘
ááá á ááľ á°á¨á᪠ááłáᢠá Postgres ááľáĽáŁ áŤáá áľááá áá¨áá፠ááľá˘áŠá áá° áá áááááľ á ááá á áá°áľ áá áŤá áĽáŤáá áá°á¨á áá˝ááᢠááá áá á ááłááľ á°áá áá˝ á ááá ᨠTCP áłáá ááľáááá áááŤá, áááľá á¨á ááłá¨ áá¨áĽ áááááąá áŤáááŁá. Bouncer áá áŤá°ááá? ááá á áŤá°áááᢠáĽáŤááá ááá¸á áááĽáá. á áľáá˝ áĽáŤááá˝ á¨ááἠááł á¨áá አáĽá á á áŁá áĽá áááááśá˝á á¨á°áá á ᣠáááááąá ᨠBouncer ááá¨áĽ áĽáť á á á áááá ᣠáĽáá˛áá á áá¨á ááą ááľáĽ áĽá¨á°áŠ áŤááľá áĽáŤááá˝ áá ááá áŤáľáááááłáá˘
áá á°áľá°áŤááá áĽá áá á˝áá áá áá° Bouncer á á¨áľ á áá°ááá°áá˘
áĽá áľááá áĽá á¨áŤáłá˝áá á¨áááááľ áááá áĽáááááá áá°áá áá°áá°á፠áá á°áá°áá ᣠáĽáąá á¨ááłáĽá ᣠá¨ááá á ᣠá˝ááŽá˝ á ááĽááľ á¨ááľá°áŤá¨áá áľ áĽá á áĽááἠᣠáŁááĽá-áá ááá á áá áľá˘
ááá˛-ááááá áĽáá° áá á°ááŁá á ááá á°ááᢠá¨áᢠTLS áááááśá˝á áááľ á á°áἠáááŁá á ááťá á ááĽáá˘
áá áá áááľá¨á ááşááŞá¨á á¨ááŁá á¨á°áᨠá¤á° ááá ááľ áááááľ áá á¨áĽáᣠáĽáąá á¨ááľááá áááááľá á¨áá˝á áááłáá˝ áĽáá° á á°á á°á¨á°á áŽáľ ááááá˝ áłáľáŚ á¨á°á°áŤ ááᢠá¨libpq ááá áŽáľ á¨á°ááá¨áą áá¤áąá ááááąáá á¨áá˝á áĽá âá áá á°ááááᢠá áá áá áá á áጠá ááᣠáá á áጠá˛ááľ ááŽá°á°áŠ áá á¸áá ááá¨ááᢠáĽá áá áŁááĽá á°á¨á áĽá áľ áá. á¨á ááłá¨ áá¨áĽ áááááľ á áĽáááá áá á áľá´áľ áá˝á ááááťá. áĽáá° âá¨áá á ááľ á¨áá á ááŹáľ áŤáľá á¨á°áá áአá áá N áŁááľ áĽá¨á á á አááâᣠâá¨SYNC ááŹáľ á¨ááŠá á áá á¨áá¤áľ á˛á áłáł áŤáá ááŹáľ áĽá¨á á á አááá˘â áá¤áą áá° ááľáá á ááľ á¨á°áá¨á¨ áááľá áá¤áą á áŁá á áľá¸ááŞáŁ á°ááŤá áŽáľ ááᢠáĽá áŤá°á¨ááá á¨áľá´áľ áá˝á ááá ááŽááŤááá°áá á¨áááááąá áá ááááľ á á°ááá°á á¨ááľ áŽáľ ááá áááááᢠá áá á áľááá áŽáľ ááľáĽ á¨á ááłá¨ áá¨áĄ áá áá¨áá á áá áŁá á á¨á áááá á á°á á°á¨á°á ááá¨áĽ áŤááŁá¸áá áŚáłáá˝ ááľááŁáľ áĽáť áá, á¨á áááá á ááľ áá° áá áŽáŽá˛á (á á¨ááá´ áá) á ááá. áá á ááŤá¨áĽ á áá ááľáĽ á áŁá á¨áá á ááá ááááľ á á°á¨áłáłá á¨ááťá áĽá á¨áá á áááŤáá˝á á¨áá¨áá áá á°ááłáłá áá.
á áá¤áąáᣠTCP á¨ááá á áĽá áἠáŽá˘á ᨠTPC áááááľá ááĽá á°áŤá°áá˝ á¨ááŤáľá°ááá á ááľ áá á ááá˘
á áá á ááŁá áĽáŤááłááą á¨á°áá á áááááľ áááá á á ááľ ááŽá°á°á áá áá°áŤáᢠáĽá áá áá¸ááŤ-á°áľáá áááľá¨á áŤáľá˝áááłá.
áĽá á á°á¨ááŞáŁ á¨áľáááąá TCP ááá áááľáłááľ á¨áľááá˝ ááŹáśá˝á áľáĽáľáĽ áá° á ááľ áľáá ááŹáľ á áľááš á áťá˝áááá˘
á á°á¨ááŞáᣠOdyssey á˛ááá á¨ááľááá áááááľ áĽáá˝áľ á˛áŤááĽá á°áá áĽá ROLLBACK ááá áá˝áá áááľá ááá áĽáŤá á¨ááá áĽá á¨áá áŚá˛á´á á¨ááἠááłáá áĽááłáááá áááá¨ááᢠááľ ááĽáśá˝á ááŤáŁáá á¨áá˝ááá áĽáŤá ááááľ.
áĽá á á°áťá áá á á¨á°ááłáłá á°áá á áá áááááśá˝á áĽáááĽáááᢠáá á áááŹá˝á_áľá_á áľ_ááľáľá áłáá ááŤáá áŤáľáááłáᢠáá á¨ááťá á¨áá áááááŤáá˝ á¨ááŤáľááááľá áááŞáŤáá˝ á á°á¨á᪠áĽáá°áá ááľááá á¨ááĽáá.
á Yandex.Cloud ááááśá˝ áĽáá°áŤáá. áĽá á¨áá°áłá°á PostgreSQLá á¨á°á áá áĽá á¨áááááľ áááł á¨á°áŤá áá° áá ááááŤáłá ááŁááľá ááá á áá˝ááᣠáááľáᣠá¨áááᣠááááŤáłá ááŁááľá á áá áá áá°ááᢠBouncer á ááááŽá á áĽááľ áá°áľ áá á ááá áá˘
áá á ááááŽá á ááŁááľá á¨áááá ááłá ááá˘
á á°á¨ááŞáᣠáá° áá áá áŤáá ááŤáŁáľ áľáá á ááᢠá ááááľ ááľáĽ, á áĽáááĽ, áá á¨áááťá áá, ááááŤáąá á¨á፠áááľá°á áľááŤáą áĽá áá¨á áá°áĽááłá. ááá áá á áĽááľá áááśá˝ ááľáĽáŁ á áŚá˛á˛ ááľáĽ áŁáá á¨áááááľ ááá á áŠá á áŤáá ááŁááľ á¨áááᣠáá ááťááá˘
áŚá˛á´á á¨PgBouncer áá áá ááá á°áľáá á¨áá ááľáľá á ááᢠáááá á°ááłáłá áľáááá˝á á¨ááŤááľ á ááľ á áááľ áŽááśá á ááᢠá¨áá ááá á¨á áᣠá¨ááá°áľ áĽáŤáá ááá á˘áŤááľ á˝áá á GitHub áá ááአáĽá á áľááááášá áľáááá˝ áĽáááááᢠáá ᨠPgBouncer áŽááśá áá á°ááŁá ááľááá á ááá˘
áĽá á áĽáááĽáŁ á¨ááľá°ááá áľá á°áľ á ááᢠá áá¨á ááą á¨á°ááá áá áľá á°áľ áĽáááá°áááᢠá áá¨á ááą ááľáĽ ááá áĽááłáá°áŤá°áą áá¨á áá°áá°ááłá, áĽá áĽááľá á áĽáą ááľáĽ áŤáá°áŤá°áą áĽáť á áá°áá.
á¨PgBouncer áá 100% á°áłááááľ áŤáľáááááľ áá áŁá ᪠á°á°ááááᢠá á áľá°ááá áá áááá áá áĽáá° Bouncer á áááľ áŁá ᪠ááłá¨áľ áĽáá˝áááá˘
áááľ
áľá áŚá˛á´á ááá áŽáľ áĽááľ áááľá˘
áááłáᣠâPause/Resumeâ áľáááá˝ á áᢠá áĽáááá áá á¨ááἠááłáá ááááá áŤááááá. Postgresá áááá á¨ááá á áááááľ ááá ááľáĽ áŁáá áľ áááᣠpg_upgrade áŤáľááᣠá¨á፠á¨ááá áľ áááĽáᢠáĽá á¨á°áá áá áá á¨áá¨á ááą á ááá áĽá¨ááá° áŤá áááľááᢠáá á°ááŁá á¨áá á á¨á°áĄ á áᥠá°áá˝ áá áŤááĄááᢠáĽáˇ áá á áááááá˝á ᣠáá á á áᥠááá ááá ááááᢠ(ááľááá á¨áááá)
á á°á¨ááŞá, á PgBouncer ááľáĽ áŤááľ á á˛áľ áŁá áŞáŤáľ á ááą á SCRAM áá¨áá፠áľáá áá, áĽáąá á Yandex.Cloud ááľáĽ á¨ááá°áŤ á°á áŤááŁá. áááąá ááľáĽáľáĽ á°ááŁáŤáľ áĽá á áľááá áá¸á.
áľááá á áá áľáá˝ áŽáľ ááťá á¨ááá áŚá˛á´á á¨á°á°áŤáá ááááá áĽáááááá˘
á áááľ áá á¤á°-ááťáááľ áá á¨ááá¨áŽá á¨áŚá˛á˛ ááá áá á¨áľ á áááľá˘ á¨áŞá á¤á° ááá ááľ á¨ááľáľááŹáľ áááĽááľ ááŽáśáŽá áľáá ፠ááᢠáááľáᥠᨠPostgres á¤á°á ááŽáś 3 á¨ááľ áĽá á¨áá áŤá á¨áááááĄáľ áá°á á áááááśá˝ ááᢠá áŞá á¤á°-áá˝áááľ ááľáĽ áá°áá áŤá.
á¨ááşááŞá¨á á¤á°-áá˝áááľ á¨áá áá°áá á፠á¤á°-áá˝áááľ ááᢠá¨áá Machinarium áľáá˝ ááŤá á áľáĽá°áŁ ááá á°á˝ááᢠáá á áľá°ááᥠᣠ15 ááľááŽá˝ áĽáť á áá˘
á¨áŚá˛á´á áĽá áááᢠáŽáá˛áá˝ á¨áá áŠá áľ áá áá˝á á áᢠáá áá˝á áᢠᨠTCP áááááśá˝á ááá á áĽá á á áŤá°áá˝ ááŤá¨á á áá°áŤá¨áľ áá°áá áŤáá˘
á¨á ááŤáł á°áá áá˝ á°ááŁáŁáŞ á á ááľ á°áŤá°á ááľáĽ áá°áŤ áá˝áá. ááá áá á°áá áŽááśá áĽá á¨ááŽá áľáŤáá˝á á áááá á á áŠáŹá ááľáĽ á¨ááááá áááááśá˝á áá°ááá.
áŚá˛á´á á¨ááá°áá áá°á ááá á¨ááľáľááŹáľ á¨áá¨áŤ áľáĽáľáĽá á áá áá ááᢠááŤá-áźáá á Bouncer á áŠá áĽá á áŚá˛á˛ á áŠá áĽááŤááłááᣠnull div áĽáááááᢠBouncer áĽá Odyssey ááľáĽ á áľááá á°ááłáłá á¨ááŤáá á¨áá á áá¸áľ áá á¨á°áŤáŤá á ááŤáł áá¨áŤáá˝ á áá˘
á á°á¨ááŞá, á¨áŤáłá¸á áá°á áŤáá¸á áĽá á á˝á¨ááŤáŞáá˝ á á. áĽá áá°áááťá¸áá áŚá˛á˛á áááá°á˝ áĽáá áááá.
á á°á¨ááŞá áŁá áŤáľáŹáľ á ááááŤá˝á ááááŤáľ á¨á°ááŤáŠ á áá áŚá˝á ááá¨á á ááĽáᥠPostgres + OdysseyᣠPgBouncer + OdysseyᣠOdyssey + Odyssey á áŤáľáŹáľ ááľáĽ áŤááľ áááá˝ ááľáĽ áŚá˛á´ á¨á°á ááá á ááá áĽáá°áá°áŤ áĽááá á ááááᢠáĽáá°ááá áĽáá.
Rake
áŚá˛á˛á á áááľ ááľáĽ áĽáá áááá. áĽá ááá ááá áá°áŤá áŤáአááľáá á ááááᢠá áá°ááᣠáááľáᣠá áᣠáá áááá á áá°ááᢠáááłáᣠá áááľ áá ááá ááá á áá á°ááˇááŁá¨á፠ᨠPostgreSQL ááŽáá˝áá á¨áᥠáá°ááťá˝á áᥠáĽá á¨ááľáłááť ááá°áľ áĽááłááĽá áááŠáᢠáĽááą á áĽááἠáá áŠáŁ á áľá°áŤáááá¸áᢠáá ááá áá á.
á¨á፠á¨áááááľ áááá áᢠTLS áááááśá˝ áĽá á᪠TLS áááááśá˝ áĽááłááľ á°áá°áá áłáᢠáĽá áááááśá˝ á¨á°áá á á°áá°ááŹáśá˝ áĽá á¨á áááá á°áá°ááŹáśá˝ áŤáľáááá¸ááá˘
ᨠBouncer áĽá Odyssey á áááá á°áá°ááŹáśá˝ á áá˛á¸á áľáá ááá áŁáᣠááá áá á¨á°áá á á°áá°ááŹáśá˝ á¨áá˛áŹ áĽáá°áá ááá ἠá áŤáľáááá¸ááᣠááááŤáąá á¨áĽá scalable Odyssey á áá¨á¨áť áá áá á°áá°ááŹáľ á ááá ἠá¨áľáááľ á ááťá¸á ááľáĽ áľáááᣠááᢠáá ááĽá á áľá°áááá, ááááŤáąá ááááá áĽá áá á ááá°á°á áľá. ááááŞáŤ áá ááľááŤá á áá ááአá¨ááŻáᣠááá áá á¨20 áᢠá á ááľ áá áááááśá˝ á áá áá á˝áá áĽáŤáąá á áłááˇáá˘
áá°áŤ á¨áá˝á á¨áá¨áá፠áá´ á áĽáŽááἠá¨ááááľ ááłáŞáŤáá˝á á áá áá á¨áá¨ááἠá˝ááł ááᢠá PgBouncer ááľáĽ ᨠPAM ááá˝ ááá á á á¨á°áᨠáá áĽáá˛áá áĽá á¨á ááá áááááľ á¨ááŤáááá áĽá á PAM ááľá ááľáĽ áĽáá˛áአá¨áá áá áá ᨠPgBouncer áá á á á˘
áá áá á°ááŁáŤá áŤá°á¨ááá á á ááľ ááá ááááŤáľ á áá°ááᢠáĽá ááŽá˝ á ááᢠáá ááá áŤáľááááá?
áá á áá¨á¨áť á˝ááŽá˝ áááĽá áá˝áá ᨠPAM áá¨áá፠áĽá á¨PAM áŤááá áá¨áá፠áŤááľáŁ áľáá á¨PAM áá¨áá፠á¨PAM áŤááááá áá¨áá፠á áĽá á ááŤááá¨á áá˝ááᢠáŤááľá°áŤá¨ááá¸á áááŽá˝ á ááą áá ááᢠáá ááľá°áŤá¨á á¨ááá áá á ááľá¨á áá˝áá.
ááá áá°á á°á፠áááá áᢠáááááśá˝ á¨ááá á á ááľ áá á áá. áĽá á¨á፠áá° á°áŤá°á áááł ááááŤá, á¨á˛á¤áá¤áľ áá¨áŁá ἠáá¨áááá.
á¨áłá˝áá ááľááᣠá¨20 á¨á ááłá¨ áá¨áĽ áááááśá˝ áἠá¨áá áááľ áŤáá ááá ááá ááᢠáĽá á á°áá áá á áŠá libpq á¨áá ááĽááŤáá˝á áŞáááľ ááľá¨á ááááŤáᢠá ááŁáŞááľ 000 á°á¨ááľ áááľááá˘
ááá á á ááľ áá á¨ááἠááłáá ááľááŁáľ áŤááťá, áá° áłáłá¤á ááľááŁáľ á áá˝áá, ááááŤáąá áá áá ááá áŁááá áľáá ááá¨á áá¸áá áá˝áá.
áĽá á¨á°áá ááá áľá ᨠTCP áááááśá˝ áĽááľ á áááá áĽá áąá ᨠPgBouncer ááľá°áá áá°áá áá°áá°á፠áá á°áá°ááá˘
áááááśá˝á áĽá¨á°áá áá áááá á¨á°ááá¨áľá ᣠáá á áá¨á¨áť ááá¨áŁá ἠáá á¨ááá¸á ᣠá¨á˛áአááĽáśá˝á áĽááłáŤáŁáá áá¨á ááľáĽ áĽááľáááŁá¸ááá ᢠáá áá°á¨áąáľ áááááśá˝ áá á á ááľ áá áá¨áŁá ἠáááá áá˝áá á¨áááá áĽáááł áááŤáᢠááá áá á˘áŤááľ á ááľ á°á áá° áłáłá¤á áááŁáᣠáááą á áŁá á¨áŁáľ á˘áááá˘
á á¨ááá
áá°ááľ á áŚá˛á˛ áá áá¨áľ ááááá? áĽáŤáłá˝áá áááłá°á áá ááá áá áĽá á¨áá á á¨á°áĄ áá áĽáá áĽááá?
á¨áŚááľáľ 2019 áááŽá˘
á¨áŚá˛á´á ááá° áŤááł á ááá´ áá áá á áááľáááĄ-
- SCRAM áĽá PAM áá¨ááἠáĽááááááá˘
- á¨ááŁáĽ áĽáŤááá˝á áá° á°á áŁáŁáááľ ááľá°ááá áĽááááááá˘
- á¨ááľáá áá áłáá áááá áĽáááááá˘
- áĽá á á áááአáá áá ááł á¨ááá á˝ááłá˘
á¨áá ááá° áŤááł áááš á¨á°á ááá áá áĽáá á áĽá á áá°ááᢠáá á°áá áĽáŠ ááᢠáľááá á¨áá¨áá áĽáááŤá áĽá á°á¨á᪠áĽáá¨ááá˘
á ááá á°á¨á, á Postgres, ᨠ10 áááŽ, á ááááá áľ áá session_attrs á áááá˝ ááťáá. á áááááą ááľáĽ áŤááľá áááá á¨ááἠááł á áľá°áááá˝ ááááá áĽá ááá áá° áłáłá¤á áĽáá°áááą áááá áá˝áá-ááá ááá ááá ἠáĽáťá˘ áĽá ášáአáŤáą á áááአááľáĽ á¨ááááŞáŤáá á áľá°ááá ááááŁá ᣠáĽáąá á áŁá á¨ááá°áá ᣠáá á á¨ááá-á áľá°áá ááľáááśá˝ áŤáááá˘
ááá áá á¨áá á ááŤá¨áĽ á˝áá á¨ááŁááľ áááá¨áľá á ááááŁá አáá. áá áááááľá á°ááŁáááľ áááá¸á áá áŤá á áá°áá á¨áᨠá á áááááľ áá˝ááᢠá¨ááŁáĽ áá ááá˝á á áĽááľ áá ááá áĽáá˛ááá áááááľáŁ áŚá˛á´ ááá ἠá ááá˝áá áľ áá áĽááłááŽáĽ ááťáá áá°áá á ááĽáá˘
Odyssey á¨áá áá° áá áá° áłáłá¤á á áááľ áĽá á¨ááá á¨ááŁááľ áááľ áá á¨á á áá áľ. áĽá áá°áĄ áĽá´áą áá á¨á°á¨á°áŁ á á˛áľ áĽáŤááá˝á áá° áłáłá¤á á ááááąáŁ áá°áá áá áĽáá°áá áááááśá˝á áááá áĽááłáá áľ áááአáĽá ááááŁáľá áĽáŤááá˝á áááľáá¸á áá á áľá°ááá ááá¨áĄá˘ áá á¨áá¨á ááą á¨ááŁááľ áááá¨áľá á ááĽááľ áĽáá˛áááľ áĽá á áĽáŤá áááááľ áĽáá°áá áĽáá˛áááľ áŤáľá˝áááá˘
ááľáá ፠áá áá°áĽ ááľá áľ á áľá¸á᪠áá, ááááŤáąá áááľ ááá áá. ááá ááᣠá¨PgBouncer áĽáá° áŁáá°á¨áŚáź 2,5 áááľ áłááá á°áľá á á°ááááᢠá áŚá˛á˛ ááľáĽ áá¨áľ á¨ááááá áŁá ᪠áá ááá˘
ááá áá á ááŽáś3 áá á áááĽááľ ááŽáśáŽá á°á¨á á¨á°ááá ááá፠á áᢠáĽáá áá á¨á°ááá ááá፠áĽá¨á°áá ᨠáŤáá áá¨á á á°ááᨠááá á˛áᣠáá áŚáł áá. áĽá á á ááłááľ á¨á áááá áááááľ á°áá áá á¨á°ááá ááááŤáá˝á áĽáá˛ááĽá áá á¨áá áá°áá áĽáá˝áááᢠáĽá ááĽááą á˘ááá á ááá á á áááአáĽá á á°áá áá ááŤá¨á áŤááá áááááľ áá á á á ááĽáá˘
ááá áá áĽáá á áááአááľáĽ á ááááŁáŁáľ ááá áŤá, ááááŤáąá á ááľ á°á á°áá áá á¨áá á¨á áá ááááľ á¨á°ááá ááááŤáá˝á áá¨áłáľ áĽááłááĽááľ áĽá áá áá á¨á áááá áááááľ á áá áŠáľ á°áá áá˝ ááŤá¨á áŤááá á¨á áááá áááááľ áááŤáľ áŤáľáááááłá, áááľá, áĽáá°áá á áááľ á¨á°ááá ááá፠á¨áá á¨á.
á ááľáŹáľ ááŹáááľ á áá á¨á áááá áááááľ ááľáĽ áĽáá°áá áŤá á¨á°ááá ááá፠á¨áá ᨠá°áá á áá° áĽááľá á˘áᣠááĽáą ááá áŠá˘ ááá áá á¨á°áá áá ááá á áá¨á ááą ááľáĽ áá ááá˝á áááá áľáá˝ áľá á°áľ áááľáá ááá áá á¨áłáłá¤á áá ááľá°ááĽá áááá á ááŽáśáŽáá á¨áá˝áá ááᢠáĽááł á ááťá á ááá á¨á ááłá¨ áá¨áĽ áááááľ á˘á°á á ááš ááᢠáĽáá˛á áŤá á¨á°ááá áĽáŤá á á.
áĽá ááá°áá á á¨áááŁá á ááľ á°á¨á᪠áŁá áŞ. á áá á¨PgBouncer áá á¨ááľáá ááľáľá á ááᢠá ááŤáŠá á¨áĽáŤá ááľáá¸á፠áá ááááľ áĽáá˝áááᢠááá áá á ááŤá áá á ááľááłá ááľáĽ áŤáá á ááŤá á¨áááľ áá á áá: á ááłááśáš áááááá˝, á ááłááśáš áááľ áá¸á - á á ááŤá ááá á°á á¤áá áá. áĽáááľ á áá°áá.
ááĽáľá á¨ááŤáŁáá áááá áá ááá˝ áááŤá¸áá á¨áá áá áĽá ááľáľáá á¨á áá á°ááŁáááľ áŤáá áááľá¨á áááá°ááłááá˝ áľááá áá°áá á á ááĽáá˘
á áŁá á áľáááá ááá áľáŞáľ 1.0 áĽááááá (áľáŞáľ 1.1 á áľááľá á°ááá)ᢠáĽáááłá áá Odyssey á áá á 1.0rc áľáŞáľ ááľáĽ áá, áááľá á¨áááá፠áĽáŠ. áĽá áĽá á¨áá¨áááłá¸á á˝ááŽá˝ áá á¨ááľáłááť ááá°áľ á áľá°áá á áľááá á á°ááłáłá áľáŞáľ á°áľá°áŤáááá á˘
áľáŞáľ 1.0 áá áá áááľ áá? áŚá˛á˛á áá° áá á¨áłá˝á áĽá¨áááĽá ááᢠááľáááá á áĽá á¨ááἠááł áá áĽá¨á°áŤ ááᣠááá áá á á°á¨ááľ 1 áĽáŤááá˝ ááĽáĽ áá á˛á°ááľ áá á¨á°áááá áľáŞáľ áá áĽá áá 000 á°áĽá áá ፠á¨áá˝á áľáŞáľ áá áááľ áĽáá˝áááá˘
á áá á á¨á°áĄ ááľáĽ áŤá á ááŤáł á°áá˝ áľáŞáľ 1.0 áá ááł ááá áĽá SCRAM á á ááááᢠááá áá áá áááľ ááŁáŠá áľáŞáľ áá° áááľ áááá áŤáľááááá áááľ ááᣠááááŤáąá SCRAMá áá áá ááł ááá áá á áá°áá°ááᢠáá ᣠááááŁáľ ᣠáá ááłá á ááĽááľ áááľá áŤááá á˘
á¨ááłáĽ áĽáŤáá á áĽá¨á á á አááᢠᨠBouncer áá áá á˝ááŽá˝ áĽááłáááľ ááľááľ áĽáááááᢠáĽáááŤááŁá¸áᢠááááŁáľ áĽááľá á¨áááááľá á ááłááľ á°ááŁáŤáľá áá°áá á áĽáá˝ááá.
áá á¨á ááá áá¨á¨áť áá áĽááá°á ááłáἠáĽáááááᢠá áá°áááá!
áĽáŤááá˝
á¨áŤá´á áá°áá áŞáŤ_áľá áŤááááᣠá áŚá˛á˛ ááľáĽ á¨ááĽááľ áá°áŁá°áĽá á¨áᎠá áľááá áá°áááá?
áŚá˛á´á áááľ Bouncer?
á áŚá˛á˛ ááľáĽ. á Bouncer ááľáĽ ááŁáá.
áľáĽáľáĽ áĽáá°áŤáá.
áĽá á¨áĽá áĽááá°á áááááľ á ááá˝ áááááśá˝ áá á˘ááľá áá°áááá?
á áááአááľáĽ á¨á°áá¨ááŠáľá áááá áááŞáŤáá˝ áĽáá°áŤáá. app_name á áá áááá ááľáĽ áĽááłá ááá á áá˝ááᢠáĽá፠áŤá¨ááľ áááľáááᢠáááá á°ááłáłá áááŞáŤáá˝ áĽáááááá. á á ááľ áĽáŤá, áľáĽáľáĄ á á ááŹá áá áľ á á°áá áá á¨á°áŤááá áá áŤá°ááá.
á ááľáŹ ááŞáááą áĽááá°áááá! áĽáŠ áááŁ! áŚá˛á´ á á¨á°ááá á ááĽááľ áĽá á ááĽááľ áĽáŤá°á á áááŁáą á°áľá°á ááᢠá áá ááá á áĽáááááᢠOdyssey á á ááľ áá á¨á°ááŤáŠ á¨ááἠááłáá˝ áááľá á¨áá áŁá፠áá áĽáá˛ááá áĽá á¨á°áłáŤááľ á áá á áŤáľ-á°á á¨á á˛áľ ááł áá áĽáá˛ááá áá°á á˛á á¨áĽá áłáł-ááá áááááľ áĽáá˛ááááľ á ááááá˘
á áᣠáá áá ááááľ áŤáľáłáá°á áááľááᢠá áá áĽá áá¨ááťáá˝ á áᢠááá áá á ááŤá¨áá¸á ááá áááŤá¨á á¨áá. á áĽá á áŠá á áááአá ááá á á áááľ áĽááłá áá áá áĽá á áááłáŤáľ áá¨á°áąá áá¨áłáľ á ááĽáᣠáá pg_recovery áĽá áá áŤáᢠáá° ááłá áĽááłáááŁá á ááľ á°á¨ááá á¨á á á á¨áá¨áłáľ áá´ á ááᢠáĽá á¨áľá á°áśáš áĽáá°ááá áĽáá¨áłáá ááááľ áá? áááľá ááłáĄ á áľá°áłá˝ áá áĽá¨á°ááŤá¨á áľ ááᢠá°á¨á᪠á áľá°áŤá¨áśá˝á ááťáᢠC á¨ááŤáá á°áŤá°áá˝ áŤááᾠ፠á áŁá áĽáŠ ááá˘
á á ááá˝ áá á¨áááŤáľ ááłá ááĽáá áľáŠá¨áľ á¨ááľáĽ ááᣠááááŤáąá á¨á°áŁá áľáĽáľáŚá˝á ááá á ááá°áá áŞáŤ ááá˘áá˝ á á°áťá áá á ááá ááľá¨á áĽááááááᢠáá áĽáá á°á¨á᪠á áľá°áŤá¨áśá˝á áĽááááá, áááľá á áľááá áĽáá´áľ ááľá¨á áĽááłááĽá, áĽáá´áľ á áĽáŠ áááł áĽáá°áá°áŤ.
áĽáŤáá áľá á ááá˝á ááá ááᢠáá áĽá áĽá á ááá˝ áĽááłáááľ ááá áᢠáĽá ááááááśá˝ á¨ááłá áŤáá° á á°á°ááá áá° á áá áĽáá°áááą ááá˝ áá, ááááŤáąá ááŠááśá˝ áááŤá¸á áá˝áá. á¨áá¨áá ááŠááľ áááľáá á¨ááŤá¨áŤ ááá áá˝áá áĽá áĽáľáŞá°áá áľá¨áľ áá°á፠á áááąá áĽááá ᢠá á°ááłáłá áá, áá¨á á áá áá°á፠áŤáááą áĽá á¨á፠áááľ á¨áááŠ, á áľáááá áá¨á áá˛áŤáá á áááá. áááľá ᣠáŤáááá¨áĽ áá° ááłá á¨ááááľ á¨áá ᣠáĽá፠áŤáá áá¸á፠áááá ᣠáá á á á á ááľáĽ áá¸ááŤá áľáá˝ áááŤáá˘
á á áĽáááľ áá. áá˛áŹá á¨ááááá¸á á¨ááἠáĽááłáá˝ á áááŠáľá, áĽááá°áá áá¸á፠áľáááááľ á á¨á´ááá˝ áá¨á á ááá¨áá, áĽá áśáš á¨á°á°áá°á áá ááá˝ á áááŤá¸áá, ááá ááá á áááá.
áĽá á ááľ ááááľ áááľá°á á˛ááááľ áĽá áĽá፠á á˛áľ á á á˛á¨áአᣠá¨á፠á˛ááá ᣠááá ááá á ááľáĄ ááĽá áá ᣠáááľá áá¸ááŤáá áá¨ááŤáá˘
ááłáĄá ááŁáᢠáľááááá á ááŤá¨áĽ á ááááŞáŤ á áá áá áľáá˝ ááśá áá ááá˝á ááľáŹáľ áá ᣠáá á áá¸ááŤáá áŤááááᢠá áááľáŁ á¨10 á°á¨ááľ áŁáá áá áá ááľáĽ ááłáá áá° áá á¨ááááá áľ áááł á ááᢠáĽá áá áááł á á ááľ áááľ ááľáĽ á áá°áŤá°á°á, áá áá ááłááľ á°áá áá˝ á á°ááá á.
á á ááĽá°áľ áá¨ááŠá˘
áá áĽáŠ ááłáĽ ááᢠáá ááááŞáŤ áá áá ááááľ áá°áá á á ááĽáᢠá ááááŞáŤ ááĽááľ á ááĽá, áĽá á¨á፠áĽáá´áľ ááĽáŤáľ áĽááłááĽá áĽááľáŁáá. áá áŤáá˝áá áááááľ á áŁá áĽáŠ áŁá ᪠ááá˘
Nginx áá
á ááŤá á ááᢠslowly start
áá áááአá áááľá°áᢠáĽá áááąá ááľ á ááľ áá¨ááŤá.
á áᣠáĽáŠ ááłáĽáŁ áá° áĽáą áľáááľ áĽááááŤááá˘
ááá: hab.com