EloqKV--- 一款全新架构的高性能分布式 KV 数据库
EloqKV 由晨章数据自主研发的一款兼容 Redis API 的事务型分布式键值数据库。熟悉数据库领域的人可能会产生这样的疑问:“又一个键值数据库?”。接下来我们将介绍 EloqKV 的一些独特价值。
EloqKV 是我们基于突破性 Data Substrate 技术构建的首款产品。这一创新架构旨在为云时代打造高性能、模块化、可扩展、支持事务的数据库。EloqKV 与许多现有的键值存储一样,提供了卓越的性能,支持单个服务器节点每秒执行数百万次操作,并且延迟低于毫秒级。除此之外,凭借突破性的数据库架构,EloqKV 提供了一系列独特的功能。
全面支持 ACID 事务
许多 KV 为了实现低延迟,会将所有数据存在内存中。然而,这种方法势必会显著增加成本,因为即使是不常访问的数据(冷数据)也会占用昂贵的内存资源。此外,通常为了性能会牺牲数据的持久性,尽管在高速 SSD 上优化的预写日志(WAL)可以减轻写入成本,但由于分布式事务的高成本,大多数分布式键值存储要么完全放弃事务支持,要么仅提供有限的、部分的事务支持。
另一方面,EloqKV 采用了这样一种理念:ACID(原子性、一致性、隔离性、持久性)是不应被忽视的重要功能,但在不需要时也不应产生额外成本。EloqKV 支持基于配置参数选择是否启用 ACID。当 ACID 被禁用时,EloqKV 在读写路径中不会产生额外的操作,因此能够提供与非事务型键值数据库相媲美的性能。
即使作为一个完全符合 ACID 的数据库,EloqKV 也融入了多项创新技术将开销降至最低。例如,预写日志(WAL)记录的延迟主要受限于 fsync 写入到磁盘。在 EloqKV 中,WAL 服务可以横向扩展并独立运行,存储节点增加时,可以降低写日志的延迟(受物理限制的影响除外)。此外,EloqKV 还避免了分布式事务中代价高昂的两阶段提交协议。关于这项技术的具体细节,我们将在未来的文章或学术论文中详细介绍。
按需扩展
EloqKV 从一开始就把可扩展性作为设计理念。每种资源类型——内存、CPU cores、预写日志 和持久化存储——都可以独立扩展。这种全面的可扩展性在云时代尤为重要,因为不同类型的资源可以轻松地从云服务提供商处获取。
-如果工作负载对延迟敏感并且需要将所有数据存储在内存中,可以预留具有大内存容量的虚拟机。
-如果需要处理必须持久化的大量更新只需添加几个额外的 EBS 作为预写日志磁盘。
-如果数据量庞大,您可以使用 DynamoDB 或 S3 等云存储选项,让 EloqKV 透明地、低成本地存储那些不常访问的数据。
我们还在开发动态扩展功能,可以根据工作负载的变化随时添加或移除资源。这个功能很快就会发布,敬请关注。
易用性
EloqKV 完全兼容 Redis API,并支持 Redis 中大多数基本数据结构。这意味着现有的应用程序几乎可以直接使用 EloqKV 的高级功能。但 EloqKV 的易用性远不止于 API 兼容性,EloqKV 真正的用户友好性更多的体现在基础架构设计的选择上。
EloqKV 可以像其他现有的键值存储(如 Redis 和 DragonflyDB)一样,作为单节点键值存储进行部署。然而,EloqKV 从根本上设计为一个分布式系统,它可以轻松地在集群中部署,真正实现分布式系统所提供的高可用性和可扩展性——无需使用 sentinel 或特殊的集群模式。
得益于内置的集群感知和 ACID 支持,EloqKV 节点的集群模式与单节点 EloqKV 几乎完全一致。当连接到其中一个节点时,兼容 Redis 的客户端可以访问和修改集群中所有节点的数据。此外,MULTI 命令(即 Redis 事务)和 Lua 脚本可以在集群中运行,就像在单节点数据库上一样,避免了诸如 SLOTS 和"CROSSSLOT Keys"错误的问题。
性能和成本
性能和成本始终是评估数据库系统时的重要因素,许多数据库厂商也会发布文章或白皮书,声称其产品的性能优越。可以说,我们对性能优化投入了大量的思考和实践。我们致力于让 EloqKV 在功能相当的情况下实现一流的性能,从结果来看,我们基本上达成了这一目标。非常期待广大用户能够使用真实的工作负载对 EloqKV 的性能进行评估测试。我们也将在接下来的几篇文章中分享一些 EloqKV 的性能测试报告。
值得关注的一点是,EloqKV 的某些高级功能(例如,为了持久性启用日志记录、跨多个节点执行原子 MULTI 操作以及使用 SSD 存储冷数据以减少内存使用)会有超出预期的成本效益。
EloqKV 预览版本
我们在官网上发布了 EloqKV 的公共预览版。本次发布的版本支持两种存储:Apache Cassandra 和 RocksDB。Cassandra 是一种可分离的存储,可以在 EloqKV 不同的节点上运行以实现高可用性,而 RocksDB 则是嵌入式存储。当启动 EloqKV 时,存储的安装部署会自动完成。
EloqKV 可以部署为以下几种模式:
作为缓存:当日志记录和持久存储关闭时,EloqKV 作为高性能内存缓存运行,类似于主流缓存解决方案,其性能可与最先进的内存缓存解决方案相媲美。
作为内存数据库:通过启用日志记录和持久存储,EloqKV 提供了持久性,同时保持与缓存相同的快速读取性能。它将写入操作刷新到日志并应用于驻留在内存中的数据,同时在稳定存储中维护快照,确保在故障或重启后能够完全、一致地恢复数据。
作为大于内存的数据库:当分配的内存不足以存储所有数据时,EloqKV 基于 LRU 策略,将部分数据从内存踢出到持久化存储并根据需要检索。在这种模式下,EloqKV 可以作为许多 NoSQL 数据库的强大替代品。
作为全功能的事务性分布式数据库:当部署在云端时,EloqKV 可以配置为一个完全可扩展、高可用且具备 ACID 特性的数据库,能够作为主存储来托管主要数据。这一角色通常由昂贵的关系型数据库(RMDBS)担任。
EloqKV 因其独特的功能和能力在许多场景中都有非常高的价值,我们非常期待收到用户的真实反馈,希望 EloqKV 能够帮助用户降低开发难度,使用更少的资源达到更高的性能。同时我们也会继续努力完善产品并增加更多功能。如果您有任何问题或建议,欢迎随时联系。
在接下来的几篇文章中,我们将继续分享 EloqKV 在不同场景下的一些性能基准测试。
更多详情请留意 EloqKV 官网 https://www.eloqdata.com/download
版权声明: 本文为 InfoQ 作者【晨章数据】的原创文章。
原文链接:【http://xie.infoq.cn/article/eace479ca6a9830fc6fdabf3c】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论