eBPF实战教程八 | 如何让数据库系统运行得更快
在不久的将来,数据库系统有望通过新兴的eBPF技术实现性能上的显著提升。
虽然eBPF最初是为内核数据包过滤而创建的,但研究人员已发现这项技术的其他潜在用途,它提供了一个沙箱化的执行环境,用于在内核本身直接运行的事件驱动程序。其中的一种用途是可以在操作系统周围重新路由数据库操作,而长期以来一直是数据库的瓶颈问题。
数据库 vs 操作系统
数据库系统充斥着各种变通方法,例如内存管理,以应对操作系统的限制。“选择你最喜欢的系统,那里可能有类似的东西。”Pavlo说。因此,尽可能减少系统调用次数和其他技术,以及尽可能少地与内核交互,自然就成了研究构建更快数据库系统的发展方向。
一种早期方法是采用内核旁路技术,该技术将许多原本由内核处理的功能转移到数据库系统中,通常由英特尔的DPDK和SPDK等库处理。Pavlo表示,这种方法有其局限性。这种方法需要大量重复工作,调试可能很麻烦(ScyllaDB提供DPDK作为选项)。
绕过用户态
eBPF 提供了实现这一目标的秘诀。它允许用户使用 eBPF 库编写事件驱动程序,这些程序在内核空间本身中执行,并且可以通过跟踪点或中断从应用程序内部调用。通过这种方法,内核本身就可以执行最频繁的数据库操作。
Pavlo还提到,有些操作仍然必须在用户空间完成,例如密码验证。五年前构建这种eBPF程序是不可行的,但自那时以来,eBPF应用程序二进制接口(ABI)已经变得更加丰富和完善。
BPF-DB是一个完全事务性的数据存储,可以作为后端数据库(如Redis)的前端使用(“你可以把它看作是eBPF版的RocksDB”,Pavlo说)。它配备了一组可通过API访问的数据库操作符(BEGIN、SET、GET、COMMIT),并且数据存储在内核中的哈希表里。之后,数据会被推送到用户空间,以便提交到长期存储中。
在早期测试中,研究团队发现 BPF-DB 的吞吐量(每秒操作数)是 Redis 的两倍,与高性能 Redis 克隆版 Dragonfly 相当,同时还提供完整的事务功能。延迟也低于 Redis 和 Dragonfly。
“我们确实认为eBPF是摆脱操作系统中问题设计选择束缚的关键所在,它使我们能够将更多的复杂性注入内核,以实现我们所期望的功能。”Pavlo说道。
译自https://thenewstack.io/p99conf-how-ebpf-could-make-faster-database-systems/
1. eBPF专题一 | 手把手教你用eBPF诊断MySQL(含源码)
2️⃣在线试用 立即体验: