Scalable PostgreSQL connection pooler
Go to file
Marc Rechté a3e7ed6232 Fix again code formatting issue. 2021-02-18 15:42:37 +01:00
.github/workflows better (#239) 2020-12-01 17:33:57 +05:00
cmake Allow link to dynamic libpq (.so). Builds OK on ArchLinux. 2021-02-09 13:57:07 +01:00
debian Debian package infrastructure 2017-08-21 15:18:28 +03:00
docker fix scram build & tests, also make makefile a little bit more clear && better (#259) 2021-01-12 12:06:27 +05:00
docker-build Makefile build targets + quantileins memfree fix + online restart condition recheck (#261) 2021-01-14 11:54:16 +05:00
docs Set theme jekyll-theme-minimal 2020-11-30 14:19:18 +05:00
documentation Add compression toggle to config, cmake && Add dependencies to BuildDebian (#234) 2020-11-23 16:55:42 +05:00
modules fix formatting & apply fmt target in MAkefiel (#251) 2020-12-28 16:22:53 +05:00
run-clang-format@de6e8ca07d added style check to travis (#158) 2020-06-04 22:35:44 +05:00
scripts Makefile build targets + quantileins memfree fix + online restart condition recheck (#261) 2021-01-14 11:54:16 +05:00
sources Fix again code formatting issue. 2021-02-18 15:42:37 +01:00
stress fix formatting & apply fmt target in MAkefiel (#251) 2020-12-28 16:22:53 +05:00
test fix local database conection stuck & tests (#262) 2021-01-14 15:40:01 +05:00
third_party do not hold repilation connections while online restart + drop conn rate logic (#266) 2021-01-23 18:49:54 +05:00
.clang-format change formatting (#250) 2020-12-28 15:43:31 +05:00
.gitignore fix local database conection stuck & tests (#262) 2021-01-14 15:40:01 +05:00
.gitmodules added style check to travis (#158) 2020-06-04 22:35:44 +05:00
.travis.yml fix scram, use postgresql 13 in build & tests (#223) 2020-10-26 10:00:17 +05:00
AUTHORS Implement SHOW POOLS command 2018-12-24 17:37:40 +05:00
CMakeLists.txt Makefile build targets + quantileins memfree fix + online restart condition recheck (#261) 2021-01-14 11:54:16 +05:00
LICENSE odyssey: update LICENSE and AUTHORS 2018-05-21 17:39:43 +03:00
Makefile introduse pool client idle timeout in session pooling mode 2021-02-12 02:30:03 +05:00
README.md Allow link to dynamic libpq (.so). Builds OK on ArchLinux. 2021-02-09 13:57:07 +01:00
cleanup-docker.sh change formatting (#250) 2020-12-28 15:43:31 +05:00
docker-compose-test.yml fix coveirty issues + remove legacy (#224) 2020-10-26 17:29:05 +05:00
odyssey-dev.conf add pool idle in transaction setting 2021-02-12 13:03:06 +05:00
odyssey.conf add pool idle in transaction setting 2021-02-12 13:03:06 +05:00
tsan-decoder t-digest for latencies (#147) 2020-05-28 11:12:10 +05:00

README.md



Odyssey

Advanced multi-threaded PostgreSQL connection pooler and request router.

Project status

Odyssey is production-ready, it is being used in large production setups. We appreciate any kind of feedback and contribution to the project.

Coverity Scan Build Status

Design goals and main features

Multi-threaded processing

Odyssey can significantly scale processing performance by specifying a number of additional worker threads. Each worker thread is responsible for authentication and proxying client-to-server and server-to-client requests. All worker threads are sharing global server connection pools. Multi-threaded design plays important role in SSL/TLS performance.

Advanced transactional pooling

Odyssey tracks current transaction state and in case of unexpected client disconnection can emit automatic Cancel connection and do Rollback of abandoned transaction, before putting server connection back to the server pool for reuse. Additionally, last server connection owner client is remembered to reduce a need for setting up client options on each client-to-server assignment.

Better pooling control

Odyssey allows to define connection pools as a pair of Database and User. Each defined pool can have separate authentication, pooling mode and limits settings.

Authentication

Odyssey has full-featured SSL/TLS support and common authentication methods like: md5 and clear text both for client and server authentication. Additionally it allows to block each pool user separately.

Logging

Odyssey generates universally unique identifiers uuid for client and server connections. Any log events and client error responses include the id, which then can be used to uniquely identify client and track actions. Odyssey can save log events into log file and using system logger.

Architecture and internals

Odyssey has sophisticated asynchronous multi-threaded architecture which is driven by custom made coroutine engine: machinarium. Main idea behind coroutine design is to make event-driven asynchronous applications to look and feel like being written in synchronous-procedural manner instead of using traditional callback approach.

One of the main goal was to make code base understandable for new developers and to make an architecture easily extensible for future development.

More information: Architecture and internals.

Build instructions

Currently Odyssey runs only on Linux. Supported platforms are x86/x86_64.

To build you will need:

  • cmake >= 3.12.4
  • gcc >= 4.6
  • openssl
  • postgresql-server-dev-13
  • pg_config utility is in the PATH
git clone git://github.com/yandex/odyssey.git
cd odyssey
make local_build

Adapt odyssey-dev.conf then:

make local_run

Alternatively:

build/sources/odyssey odyssey-dev.conf

Configuration reference

Service
Logging
Performance
System
Global limits
Listen
Routing
Storage
Database and user
Architecture and Internals