Odyssey翻译成中文是奥德赛或奥狄赛,是古希腊最重要的两部史诗之一。今天讨论的Odyssey是先进的多线程PostgreSQL连接池和请求路由器,是享有“俄罗斯谷歌”之称的Yandex公司众多知名开源项目之一。
虽然PostgreSQL 应用最广泛的连接池PgBouncer是单进程的,但是效率非常高,并且是纯 C 语言开发的,比较小巧。不过其毕竟是单核的,扩展性受限,虽然单个进程能处理 5 万左右 QPS,但是超过后就需要扩展。通常可以创建多个 PgBouncer,再使用HAProxy或LVS进行负载均衡,但是使用起来还是不方便。
Odyssey可以满足纯连接池的需求,多线程、可扩展,其特性功能如下。
通过指定多个工作线程,Odyssey可以显著扩展处理性能。每个工作线程负责身份验证并代理客户端到服务器和服务器到客户端的请求。所有工作线程都共享全局服务器连接池。多线程设计在SSL/TLS性能中起着重要作用。
Odyssey会跟踪当前事务状态,并在客户端意外断开连接的情况下发出自动Cancel连接并执行 Rollback 放弃的事务,然后将服务器连接放回服务器池中以进行重用。此外,Odyssey会记住最后一个连接到服务器的客户端状态。
Odyssey允许将连接池定义为一对数据库和用户。每个定义的池可以具有单独的身份验证、池模式和限制设置。
Odyssey具有功能齐全的SSL/TLS支持和常见的身份验证方法。例如,md5及clear text客户端和服务器身份验证。另外,它允许分别阻止每个池用户。
Odyssey在客户端和服务器之间使用UUID作为连接的通用唯一标识符。任何日志事件和客户端错误响应都包含ID,可使用该ID来唯一标识客户端并跟踪操作。Odyssey可以将日志事件保存到日志文件中,并追加到系统日志中。
Odyssey 具有复杂的异步多线程体系结构,该体系结构由定制的协程引擎machinarium驱动。协程设计背后的主要思想是使用事件驱动的异步应用程序,该方式看起来是以同步过程方式来编写异步调用的,而不是使用传统的回调方法来实现的,便于新开发人员理解代码库,并为将来的开发轻松扩展体系结构。
目前,Odyssey 仅支持 x86/x86_64架构的类Linux系统,编译环境最小要求如下。
可使用如下命令编译、配置、安装Odyssey。
可以使用以下命令来配置Odyssey。
可使用以下命令来启动Odyssey。