【译文】取代 Redis 的竞赛

3 月 21 日,Redis Ltd 宣布,从 Redis 7.4 开始,Redis “内存数据存储 “项目将以非自由、源代码可用的许可证发布。这一消息虽然不受欢迎,但并不完全出乎意料。对于那些希望继续使用自由软件的人来说,至少有四个选择可以替代 Redis,其中包括一个已经存在的名为 KeyDB 的分叉项目和 Linux 基金会新宣布的 Valkey 项目。现在的问题是,Linux 发行版、用户和提供商将选择哪个(些)来取代它。

Redis 简史

Redis 的背景很复杂。Salvatore Sanfilippo(又名 “antirez”)启动这个项目的初衷是将其用作 “另一种数据库”,并将其用于名为 LLOOGG 的实时日志分析应用程序,因为 MySQL 无法满足他的需求。他没有创建关系型数据库,而是将该项目设计为一个简单的字典数据库,在内存中存储键值对–其名称是 “远程字典服务器(remote dictionary server) “的缩写。当然,经过多年的发展,Redis 已经日趋成熟,并积累了更多的功能。Redis 作为 NoSQL 运动的一部分迅速流行起来,2010 年,他受雇于 VMware,从事 Redis 的开发工作。2013 年,他转到 VMware 的分拆公司 Pivotal,继续从事该项目。

大约在那个时候,Redis 越来越受欢迎,TwitterPinterest 等都在高调使用它,它也开始出现在 Linux 发行版中。Ubuntu 12.04(2012 年 4 月)、Fedora 18(2013 年 1 月)等发行版都打包了 Redis。2013 年 9 月,亚马逊网络服务(AWS)的 ElastiCache 服务增加了对 Redis 的支持,这不仅利用了 Redis 的优势,还有助于提高 Redis 的受欢迎程度。

2013 年初,一家名为 Garantia Data 的初创公司开始提供 Redis 服务,并将自己定位为 “开源 Redis “的更好替代品。2013 年 11 月,Garantia 获得了第一轮融资,并将公司名称改为 RedisDB。在Sanfilippo的推动下,公司于2014年初更名为Redis Labs。Sanfilippo 于 2015 年加入 Redis Labs,担任开源开发负责人。他一直在 Redis Labs 工作,直到 2020 年卸任

2018 年,Redis Labs 为其在核心数据库基础上提供功能的附加模块采用了新的许可证。该公司选择使用经修改的 Apache 许可证 2.0 版本,并增加了一个名为 “共享条款”(Commons Clause)的附加条款。该条款限制销售软件或收取服务费。公司提出的理由是,云计算服务提供商 “利用了开源社区的优势”,销售基于他们并未开发的开源代码的服务。当时,该公司承诺 Redis “是 BSD,并将始终保持 BSD”。

该公司并不是唯一一家开始尝试使用限制性许可证的公司。特别是风险投资支持的数据库公司,开始采用新的许可证,以确保他们能够独家销售使用该软件的服务。MariaDB在2016年为一款名为MaxScale的产品创建了商业源许可证(BSL),MongoDB则在2018年底推出了服务器端公共许可证(SSPL)。最终,Redis Labs 为其模块确定了 SSPL 和自己的 Redis Source Available License(RSAL)双许可证方案

公司于 2021 年中期从名称中删除了 “实验室 ( Labs)”一词。在宣布更名的同时,Redis 再次承诺开放源代码,并表示公司更名 “不会影响开放源代码 Redis 的许可,Redis 一直并将继续采用 BSD 许可”。该公司还建立了一个管理模式,将有关 Redis “架构、设计或理念 “的重大决策交给一个社区 “核心团队”。我们预计该团队的任务将包括 Redis 本身的许可证。Redis网站上已经没有管理页面,但在互联网档案馆的Wayback Machine上可以找到。该页面列出了由五名成员组成的核心团队,其中三名成员来自 Redis((Yossi Gotlieb, Oran Agra, 和 Itamar Haber),此外还有阿里巴巴的赵钊和 AWS 的 Madelyn Olson。

3 月 20 日,Redis 宣布 “Redis 的所有未来版本都将采用源代码可用许可证”,特别是 SSPL 和 RSAL。Redis 首席执行官 Rowan Trollope 写道,维持 BSD 许可证现在 “与我们将 Redis 成功推向未来的能力不符”。这里的未来版本指的是 Redis 7.4 及更高版本。该公告的常见问题解答(FAQ)称,根据公司的安全政策,安全补丁将在原有的三条款(three-clause) BSD 许可下回传到以前的版本。

云计算与开源

SSPL和Redis的RSAL等使用限制许可的支持者试图将这完全定位为AWS等巨型云提供商与开源之间的争斗,使用限制是唯一合理的选择,云提供商是唯一的输家。2019 年,Redis Labs 时任首席执行官 Ofer Bengal 被引述称,在 Redis 为 Redis 模块采用源可用许可证之后,”有很多不同的观点”,但这是与云提供商竞争的必要条件:

有些人谴责这种做法(许可证变更)。但在最初的喧嚣平息之后–尤其是在其他一些公司提出类似概念之后–社区现在明白,开源的最初概念必须得到修正,因为它已不再适合现代社会,在这个时代,云计算公司利用其垄断力量采用任何成功的开源项目,而不对其做出任何贡献。

在 3 月 20 日的公告中,Trollope 写道:”云服务提供商只有在与 Redis(Redis 代码的维护者)达成许可条款后,才能交付 Redis 7.4″,但 “Redis 开发者社区将继续享有双重许可下的许可”。

选择 “许可(permissive licensing) “一词有误导之嫌。Redis 之所以能在 7.4 及以后的版本中采用非自由许可方案,是因为外部开发者是根据 BSD 许可授权的。SSPL 和 RSAL 的条款与开源社区中 “许可(permissive) “一词的常见用法不符。

云提供商不做贡献的说法与 Redis 代码库的实际提交情况也很难吻合。使用 gitdm 7.0.0 版本发布以来的提交进行快速检查后发现,在此期间有 967 次提交:

按贡献者的公司排列
(未知) 331 34.2%
腾讯 240 24.8%
Redis 189 19.5%
阿里巴巴 65 6.7%
华为 50 5.2%
Amazon.com 50 5.2%
字节跳动 19 2.0%
网易 NetEase 13 1.3%

 

来自腾讯的朱斌斌(Binbin Zhu)负责了该项目近 25% 的提交。一些没有明确雇主的贡献者肯定是 Redis 的员工,但很明显,Redis 并非孤军奋战。(注:省略了一些个位数的贡献者)。

不断变化的分发模式

代码贡献显然不是重点。Redis 是一家由风险投资支持的公司,自 2011 年以来,已通过多轮融资获得了超过 3.5 亿美元的资金。该公司及其投资者似乎已经意识到,他们可以安全地摆脱开源,以获取更多收入。

如果 MongoDB 的业绩能说明问题的话,他们有理由相信情况确实如此。该公司于 2017 年上市,一年多后转入 SSPL。不久之后,主要的 Linux 发行版停止打包该数据库,因为它不再符合它们的许可标准。但那时,该公司已将目光投向一种平台模式,鼓励开发人员(及其雇主)使用 MongoDB 并以 “即服务 “模式支付 MongoDB 及其附属产品的费用。分发可获得源代码的 MongoDB 版本可被视为一种亏本策略,以吸引该公司打赌不关心开源的开发人员。

正如 Redmonk 创始人斯蒂芬-奥格雷迪(Stephen O’Grady)在 2017 年写道:

随着越来越多的开发者开始坚持对技术选择和方向的控制,即使在专有替代品在技术上更胜一筹的情况下,开源软件的可访问性也为其带来了巨大的市场优势。在可以立即下载的适当选项 A 和由销售人员把关的理论上更优越的选项 B 之间做出选择,实际上并不是一种选择。

但 Grady 指出,开源软件 “通常不如基于服务的替代品方便”,如果方便是最重要的因素,那么开源软件就有问题了。尤其是像 MongoDB 这样的供应商已经从专有供应商那里学到了 “锁定客户有利于业务发展 “的道理。

对业务有利吗?MongoDB 不断发展壮大,客户不断增加,上一财年的收入达到 16.8 亿美元。增幅超过 30%,其 Atlas 数据库服务收入增幅也超过 30%,这表明很多公司宁愿付费使用该服务,也不愿自己托管。尽管如此,该公司仍在亏损,同期亏损额超过 3.45 亿美元。

但是,与实际利润相比,投资者可能对股价更感兴趣。该公司上市之初的股价约为每股 33 美元,但现在已超过每股 350 美元。如果 Redis 能取得类似的业绩,投资者可能会很高兴。

三岔口和替代方案

正如 O’Grady 去年所写的那样,风险投资支持的供应商似乎已经达成共识,他们可以放弃开源。特别是如果它们没有 “受到其他商业利益、基金会和其他感兴趣的行业参与者的积极反对”。在这里,Redis 可能误判了业界的情绪。

去年,当 Hashicorp 在其项目中采用 BSL 时,其 Terraform 项目在几天内就出现了一个分叉,并被 Linux 基金会接受,命名为 OpenTofu。3 月 28 日,Linux 基金会宣布支持 Valkey,它是 Redis 7.2.4 的直接分叉,亚马逊网络服务(AWS)、谷歌云(Google Cloud)、甲骨文(Oracle)、爱立信(Ericsson)和 Snap 都是该项目的支持者。

Valkey fork 就在 Redis 许可证变更几天后诞生了。奥尔森(Olson )写道,她和 “多位前 Redis 贡献者 “已经开始使用原始的三条款 BSD 许可证创建一个分叉,并将 “placeholderkv “作为临时名称。Olson、赵、Viktor Söderqvist 和谢平被列为维护者。根据 Olson 的说法,这并不是 Redis 的 AWS fork,而 “只是我试图与社区保持连续性”。KeyDB也曾被考虑过,但它的分歧已经到了 “缺少社区所习惯的很多东西 “的地步。

KeyDB fork 于 2019 年创建,是出于技术原因,而非许可原因。John Sully、Eric Blenkarn 和 Ben Schermel 创建了这个项目,并将自己标榜为 “Redis 的快速替代品”,他们想要一个多线程版本,但无法说服 Redis 维护者朝这个方向发展。Sully 和 Schermel 创办了一家公司,也叫 KeyDB,提供专有的企业版本。2022 年,KeyDB 被 Snap 收购,整个代码库在三条款 BSD 许可下完全开源。

作为直接替代方案,KeyDB 的问题在于,自从 Redis 分叉以来,它一直没有跟上 Redis 的步伐。它仍然缺乏 Redis 7 中的许多功能,而且 Sully 表示,他几乎没有时间处理 “不直接影响 Snap “的问题,尽管该项目 “当然欢迎外部帮助,如果社区有兴趣提供帮助,我们当然可以指定额外的维护者”。3 月 22 日,Sully 更新了另一个问题,并表示他正在讨论 “可能 “增加维护者,以使 KeyDB 更接近 Redis 7。目前还不清楚 Valkey 是否会取代 KeyDB,但从长远来看,Snap 的参与似乎很有可能取代 KeyDB。

SourceHut 的创始人兼首席执行官 Drew DeVault 也基于 Redis 7.2.4 创建了一个名为 Redict 的分叉,但他选择使用 LGPLv3。他在公告中说,对许可证的选择是 “经过深思熟虑的,平衡了多方面的考虑”。DeVault 希望许可证既是版权许可(copyleft),又能 “让用户尽可能容易地遵守 “许可证,并简化与 Redis 兼容模块或 Lua 插件的集成,这些模块或插件可用于在 Redis 中执行操作。他还指出,Redict 将没有贡献者许可协议(CLA),但会要求贡献者用开发者身份证书来验证贡献。尽管与 SourceHut 有联系,DeVault 还是选择在 Codeberg 上托管 Redict,以便 “为熟悉基于 GitHub 的 Redis 社区的任何人提供舒适、熟悉的用户体验”。

另一种竞争者是微软于 3 月 18 日发布的 Garnet根据公告,微软研究院自 2021 年以来一直在开发 Garnet。它是一种远程缓存存储,可以缓存和管理与 Redis 相同类型的数据,并与 Redis 序列化协议兼容。Garnet 获得了麻省理工学院的授权,用 .NET C# 编写,并不打算直接替换 Redis。不过,其 API 兼容性页面声称,它可以 “被视为一个足够接近的起点”,可以 “不经修改地与许多 Redis 客户端一起工作”。很多,但不是全部。例如,一位用户试图将 NodeJS 应用程序切换到 Garnet,但发现 Redis 的 FLUSHALL 命令目前不受支持。为缺失的 API 添加支持已列入项目路线图

争夺替代品

Linux 发行版又一次陷入了混乱。Neal Gompa 在 Fedora 开发列表上发起了一场讨论,指出许可证变更以及需要从 Fedora 中移除 Redis。Jonathan Wright 回答说,KeyDB 可能是一个替代品;在许可证变更之前,他一直在 “松散地进行打包工作”。他后来说,KeyDB 对于那些希望替换 Redis 后续版本的人来说,将是 “一种倒退,而且会带来麻烦”。尽管如此,他还是在 3 月 23 日写道,他已经为 Fedora 和 EPEL 8 和 9 推送了可供测试的构建版本。

在 Valkey 发布后不久,Wright 写道,一旦有标记发布,他将尽快打包。Wright 还说,他 “预计 Valkey 将在大多数地方成为 redis 的(事实上的)替代品”。

Gompa 也在 openSUSE 的 Factory 讨论列表上提出了这个问题。Dominique Leuenberger 在回复中列出了 18 个依赖 Tumbleweed 中 redis 软件包的软件包。最初的讨论提到了 Redict 和 KeyDB 作为可能的替代品,但 Valkey 尚未公布。

对于社区发行版来说,需要找到替代 Redis 的软件并不是唯一的问题。Jacob Michalskie指出,openSUSE项目正在使用的几项服务都需要Redis的替代品,包括用于code.opensuse.orgPagure代码托管软件(Fedora也创建并使用了该软件)和Discourse论坛软件。

Debian 的贡献者 Guillem Jover 为 KeyDB 提交了一份软件包申请(RFP),作为 Redis 的潜在替代品。Jover 说,他不确定自己是否能独当一面,但很乐意提供帮助。在与 Jover 交换电子邮件时,他告诉我,他的公司已经从 Redis 6 迁移到 KeyDB,而且是 “平稳过渡”。根据 Jover 的说法,”与 Redis 7 相比,KeyDB 可能缺少一些功能,但我们既没有发现我们错过了任何功能,也没有觉得我们错过了什么”。

Jover 说,现在判断较新的分叉是否会继续得到维护还为时过早,而且 Redict 的 LGPLv3 许可 “也可能会对生态系统造成问题”。在 Valkey 发布后的后续邮件中,他说:”我认为我们可能会进一步打包 KeyDB,至少是 Debian 的 KeyDB,如果它死掉了,可以随时移除或从 Debian 过渡出去。

前进之路

当然,现在预测一个或多个分叉是否会获得巨大的吸引力还为时尚早,但 Valkey 很有可能成为一个可靠的替代方案。在社区和行业的广泛支持下迅速分叉的可能性,应该会让那些期望在放弃开源后能一帆风顺的供应商有所顾虑。

本文文字及图片出自 The race to replace Redis

余下全文(1/3)
分享这篇文章:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注