开发人员经常部署特定于数据库的网络代理,这样应用程序就可以透明地连接到代理,而不是直接连接到数据库管理系统 (DBMS)。这种间接连接通过连接池、负载平衡和其他特定于 DBMS 的优化提高了系统性能。这些代理不是简单地转发数据包,而是实现 DBMS 协议逻辑(即在应用程序层)来实现此行为。因此,现有的代理是用户空间应用程序,它们在请求到达网络套接字时处理请求并将其转发到适当的目的地。这种方法会导致效率低下,因为内核会在用户空间和内核空间之间反复复制缓冲区,并且相关的系统调用会增加 CPU 开销。本文介绍了用户旁路,这是一种通过利用支持自定义代码执行的现代操作系统功能来消除这些开销的技术。用户旁路通过 Linux 的 eBPF 基础设施将应用程序逻辑推送到内核空间。为了展示其优势,我们实现了 Tigger,这是一个与 PostgreSQL 兼容的 DBMS 代理,它使用用户旁路来消除传统代理设计的开销。我们将 Tigger 的性能与实际部署中广泛使用的其他最先进的代理进行了比较。我们的实验表明,Tigger 优于其他代理 — 在一种情况下,它实现了最低的事务延迟(最多减少 29%)和最低的 CPU 利用率(最多减少 42%)。结果表明,像 Tigger 这样的用户旁路实现非常适合 DBMS 代理的独特要求。
主要关键词