Π’Ρ‹ΡˆΠ΅Π» pgbalancer 1.0, балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ PostgreSQL Π½Π° основС ИИ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ REST API ΠΈ MQTT

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ выпуск pgbalancer, балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ PostgreSQL Π½Π° основС искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° с REST API ΠΈ MQTT. Pgbalancer обСспСчиваСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡƒΠ»Π° соСдинСний ΠΈ балансировку Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ для PostgreSQL, управляСтся ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTP ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ событий Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ создан ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΊ pgpool-II с ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹ΠΌΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΠΌΠΈ для ΡƒΠΌΠ½ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ запросов. Код написан Π½Π° языкС Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ PostgreSQL.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности ΠΈ особСнности:

  • ΠŸΡƒΠ» соСдинСний ΠΈ балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.
  • АвтоматичСскоС Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ стороТСвого Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° watchdog.
  • ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ работоспособности ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ запросов.
  • АутСнтификация SSL/TLS, PAM/LDAP.
  • Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с PostgreSQL 13-18.
  • ЯвляСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ pgElephant, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с pgraft для Raft-консСнсуса, поддСрТиваСтся ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ pgSentinel.
  • Балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π±Π°Π·Π΅ ИИ.
    • Алгоритмы машинного обучСния для ΡƒΠΌΠ½ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ запросов.
    • ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ подстраиваСтся Π² зависимости ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° запросов ΠΈ состояния рСсурсов сСрвСра.
    • ΠžΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ΡΡ состояниС Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ прСдсказываСтся балансировка запросов.
    • НастраиваСмыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ вСсов для скорости обучСния ΠΈ скорости ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ случайных событий.
    • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Prometheus ΠΈ Grafana.

    Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· REST API.

    • 17 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ HTTP/JSON для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ управлСния кластСром.
    • Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ сСрвСр API, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 8080.
    • АутСнтификация Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ JWT HMAC-SHA256.
    • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ статистик ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ состояния Ρ€Π΅ΠΆΠΈΠΌΠ° исполнСния.
    • ВрСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° ΠΌΠ΅Π½Π΅Π΅ 10 мс.

    ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° событий MQTT.

    • MQTT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ состояния ΡƒΠ·Π»ΠΎΠ², Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ состояния рСсурсов Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
    • МоТно Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΎΠΏΠΈΠΊΠΈ MQTT для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² событий.
    • Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Mosquitto, EMQX ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ MQTT-Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ.
    • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ автоматичСскоС ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… событиях ΠΈ прСдоставляСт транспортный ΠΊΠ°Π½Π°Π» для оркСстровки кластСра.
  • Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки bctl:
    • Π•Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ 10 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ Β«pcp_*Β».
    • 3 Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²Ρ‹Π²ΠΎΠ΄Π°: Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, JSON ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
    • Π’Ρ‹Π²ΠΎΠ΄ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† с ΠΎΠ±Ρ€Π°ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ для runtime-Π΄Π°Π½Π½Ρ‹Ρ… pgbalancer.
    • Π£Π΄Π°Π»Ρ‘Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π°.
  • GitHub Actions Workflow:
    • build-matrix.yml: Π‘Π±ΠΎΡ€ΠΊΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… (Ubuntu, macOS, Rocky Linux).
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° PostgreSQL 13-18.
    • DEB-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для Ubuntu 22.04/24.04, Debian 11/12.
    • RPM-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для Rocky 9, AlmaLinux 9, CentOS Stream 9.
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Autotools с ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ autoreconf
    • docs.yml: Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ GitHub Pages.



Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ