资讯动态

Dragonfly 官方 FAQ 全解读:许可证模型、生产可用性与性能基准的真实答案

发布时间:2026/9/10 20:23:16 来源:尧图企业网站定制
Dragonfly 官方 FAQ 全解读许可证模型、生产可用性与性能基准的真实答案【免费下载链接】dragonflyA modern replacement for Redis and Memcached项目地址: https://gitcode.com/GitHub_Trending/dr/dragonflyDragonfly 是一款宣称Redis 与 Memcached 的现代替代品的内存数据存储其官方 FAQ即仓库中的 docs/faq.md集中回答了社区最关心的五个问题许可证是否开源、能否用于生产、为何测不到宣传的 400 万 QPS、单机垂直扩展与 Redis Cluster 横向扩展之争以及命令覆盖度。本文以该 FAQ 为骨架结合仓库中的 LICENSE.md、README.md 与源码实现逐条展开帮助你在选型评估、性能基准与生产落地时做出有依据的判断。FAQ 一Dragonfly 的许可证模型是什么它算开源吗FAQ 给出的官方答案是Dragonfly 采用 BSL 1.1Business Source License商业源码许可证它属于 source available源码可得许可证并非严格意义上的开源许可证。具体细节记录在仓库根目录的 LICENSE.md 中几个关键条款值得逐条理解许可方LicensorDragonflyDB, Ltd.许可作品Licensed WorkDragonfly 本体及其软件组件、任何部分的修改变更日期Change Date2030 年 11 月 1 日。自该日起许可自动切换为 Apache License 2.0——也就是说代码会先 BSL、后 Apache附加使用授权Additional Use Grant你可以把许可作品用作自己产品/服务的一部分前提是它不是一个内存数据存储in-memory data store产品/服务同时你不能把许可作品以服务Service形式提供、分发或对外可用。这里对Service的定义非常宽泛任何面向第三方而非你自己的员工和承包商的 SaaS、PaaS、IaaS 等商业化托管服务只要与许可方产品构成竞争都在禁止之列。用 FAQ 的原话概括其意图代码可以免费使用、自由修改只要你不出售与 Dragonfly 直接相关、或与内存数据存储直接相关的服务。对于仅在自己业务内部使用 Dragonfly 的开发者这基本没有限制对于想包装 Dragonfly 卖托管服务的商业公司则需要购买商业许可。FAQ 还解释了选择 BSL 而非传统开源许可如 AGPL的原因BSL 被认为是比 AGPL 更宽松的许可同时仍允许项目方保留对自己软件的商业服务权益。官方明确提到这是跟随 Elastic、Redis、MongoDB、Cockroach Labs、Redpanda Data 等公司的行业趋势用于保护为所构建软件提供服务和支撑的权利。这是项目方的一个商业立场声明不构成对任何其他产品的评价。FAQ 二Dragonfly 能用于生产环境吗FAQ 的回答分两个层面许可层面只要你不把 Dragonfly 作为托管服务managed service提供给第三方就可以自由地将其用于生产环境。代码成熟度层面官方说明 Dragonfly 的代码由单元测试和回归测试覆盖但同时坦承——和任何新软件一样总有一些难以测试和预测的使用场景。因此官方的明确建议是在考虑生产使用之前先在 Dragonfly 上运行你自己的特定用例几天用真实流量验证后再切换。仓库的测试资产可以佐证测试覆盖这一点并非空话C 侧有大量*_test.cc单元测试与回归测试例如 string_family_test.cc、zset_family_test.cc、hset_family_test.cc、list_family_test.cc 等分布在 src/server 目录Python 集成测试集中在 tests/dragonfly覆盖了 ACL、集群、复制、快照、TLS 配置、发布订阅等场景如 acl_family_test.py、replication_test.py、snapshot_test.pyHelm Chart 侧还有 golden 测试 golden_test.go。对评估者来说FAQ 的建议可以落成一个可执行的验收流程先在隔离环境压测自己的读写模式与 TTL 策略再以只读或灰度流量运行数日观察内存、延迟与快照行为最后再全量切换。FAQ 三为什么我们压测不到宣传的 4M QPSFAQ 承认这是用户最常见的质疑并给出了基准实验的可复现前提这是全文最有工程价值的一段压测工具使用memtier_benchmark作为负载生成器实例规格AWS 网络增强型实例c6gn.16xlarge内核较新的 Linux 内核版本。FAQ 明确说明在其他实例上 Dragonfly 可能达不到这个吞吐但在 16~32 vCPU 的实例上仍然预期可以达到 100 万 QPS。也就是说4M QPS 是特定高网络带宽实例上的上限结果而不是所有环境下的承诺值。这一说法与 README.md 的基准章节相互印证在c6gn.16xlarge上Dragonfly 相比 Redis 单进程实现了 25 倍吞吐提升并突破 380 万 QPS而在管线模式--pipeline30下SET 可达 1000 万 QPS、GET 可达 1500 万 QPS。README 中给出的基准命令形如memtier_benchmark --ratio ... -t threads -c 30 -n 200000 --distinct-client-seed -d 256 \ --expiry-range...从源码结构看Dragonfly 的垂直扩展能力来源于其共享无状态shared-nothing架构键空间被按线程切分为多个分片shard每个线程独立管理自己那一份字典数据从而能够线性利用多核 CPU。README 的 Background 一节指出线程与 I/O 管理由开源库 helio 驱动本仓库中的 helio 目录即为其子模块形态。FAQ 中换个实例就打折的现象恰恰说明基准吞吐受限于单机网络栈与 CPU 资源而这正是压测前需要评估的关键前提。给做基准测试的工程团队三个可操作建议依据来自 FAQ 与 README 的基准描述先核对实例规格是否接近c6gn.16xlarge高网络带宽、充足 vCPU使用memtier_benchmark并开启--distinct-client-seed保证负载分布均匀调大-t/-c直至客户端不再是瓶颈将 4M QPS 视为上限参考按自己的实例规模合理下调预期16~32 vCPU 实例以 100 万 QPS 作为合理预期值。FAQ 四垂直扩展 vs. 用 X 个 Redis 节点组成集群FAQ 正面回应了Dragonfly 只能垂直扩展Redis 集群也能达到相近吞吐的观点核心论点如下硬件利用率Dragonfly 优化了对底层硬件的利用既能在小至 8GB 内存的实例上高效运行也能垂直扩展到 128 核、2TB 内存的大型机器。这种弹性显著降低了在单节点上运行集群工作负载的复杂度节省硬件资源与成本运维成本更重要的是降低了管理多节点集群的总体拥有成本TCO语义一致性对比之下Redis 集群模式对多键multi-key操作和事务操作存在限制而Dragonfly 保持与单节点 Redis 相同的语义——多键原子操作不需要跨节点协调稳定性FAQ 指出用小实例做水平扩展在生产环境中可能引入不稳定因素官方的立场是大规模内存存储部署需要同时具备垂直与水平扩展能力而这对 Redis 这类内存存储难以高效实现。这一论点在源码层有直接支撑。Dragonfly 的事务框架基于学术界 VLLVLL: a lock manager redesign for main memory database systems论文设计见 README.md 的 Background 一节配合 shared-nothing 分片可以在不使用互斥锁或自旋锁的情况下组合出原子的多键操作。在多键命令注册时命令注册表会显式声明键位范围first key / last key 位置例如 main_service.cc 中CI{MULTI, ...}、CI{WATCH, -2, 1, -1, ...}等条目CommandRegistry会遍历这些元数据识别多键命令见 command_registry.h。这从实现层面解释了为什么 Dragonfly 能维持单节点语义而无需集群式键槽约束。需要补充的平衡观点不属于 FAQ 原文属于推理水平扩展在需要跨地域容灾、多租户隔离或超大单键空间时仍是必要手段因此 FAQ 的结论更准确的理解是垂直扩展优先、集群为辅而非集群无用。FAQ 五如果 Dragonfly 支持某个命令我就用它FAQ 的官方口径是Dragonfly 实现了约 190 个 Redis 命令官方认为这已经覆盖了市场上的主流需求但也坦诚这不是基于经验数据得出的结论。如果缺少你需要的命令可以为缺失命令开一个 issue或者为已有的 issue 投票官方会根据命令的流行度尽最大努力安排优先级。从源码看命令注册是按功能族family分组的。以 main_service.cc 的Service::RegisterCommands()为例命令来源包括核心服务命令QUIT、MULTI、EXEC、WATCH、EVAL/EVALSHA、PUBLISH/SUBSCRIBE等见 main_service.ccServerFamily、GenericFamily、ListFamily、StringFamily通过WITH_COLLECTION_CMDS编译开关引入的SetFamily、HSetFamily、ZSetFamily、StreamFamily通过WITH_EXTENSION_CMDS引入的GeoFamily、BitopsFamily、HllFamily、BloomFamily、CmsFamily、TopkFamily、CuckooFilterFamily、JsonFamily声明见 command_families.h通过WITH_SEARCH引入的SearchFamily以及集群、ACL 相关命令族。每个CommandId都携带 arity、键位、ACL 类别等元数据最终注册进CommandRegistry其size()即命令总数见 command_registry.h。从结构上看~190 个命令是编译期由多个 family 拼装出来的集合且部分功能族搜索、JSON、布隆过滤器、TopK、CMS、Cuckoo Filter是通过编译宏按需启用的——这一点可以推断同一份源码在不同构建配置下实际可用命令数会略有差异这也是 FAQ 用约 190 个而非精确数字的原因之一。对用户的实际建议评估命令覆盖度时不要只数总数而要对照自己的业务命令清单逐条验证对缺失的高优先级命令去官方 issue 区搜索投票而不是直接放弃选型。小结FAQ 五问背后的选型决策框架将五条 FAQ 串起来可以提炼出一个完整的选型决策框架决策问题官方答案要点仓库证据许可是否开源BSL 1.1源码可得但非严格开源2030 年 11 月 1 日后转 Apache 2.0LICENSE.md能否上生产许可上可以非托管服务建议先用自己的用例验证数日tests/dragonfly、src/server 各*_test.cc4M QPS 从何而来c6gn.16xlargememtier_benchmark 新内核的上限结果16~32 vCPU 实例预期 100 万 QPSREADME.md 基准章节为什么选垂直扩展硬件利用率高、TCO 低、保持单节点 Redis 语义、避免小实例集群的不稳定main_service.cc、command_registry.h命令覆盖够吗约 190 个 Redis 命令按 family 分组注册缺失命令可通过 issue 反馈/投票command_families.h、main_service.ccFAQ 的价值不在于给出绝对答案而在于划定了事实边界哪些是项目方的立场许可模型、扩展策略哪些是可复现的实验前提基准环境哪些是诚实的不确定性命令覆盖的流行度判断。结合本仓库的 README.md、LICENSE.md 与源码读者可以在这些边界内做出自己的工程判断。【免费下载链接】dragonflyA modern replacement for Redis and Memcached项目地址: https://gitcode.com/GitHub_Trending/dr/dragonfly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价