HN 热帖|替换 Redis 的一场赛跑
3 月 21 日, Redis Ltd. 宣布了一项重大决定:Redis “内存数据存储”项目从 Redis 7.4 版本开始将以非自由的、源代码可用的许可证发布。这一消息并不受欢迎,但也并非完全意外。这次的变化的不同寻常之处是市面上已经有了多个 Redis 替代品可供选择(至少有四个选项可供选择),其中包括已经存在的 Redis 分支 KeyDB 和 Linux 基金会刚刚发布的新项目 Valkey 等。Fedora 和 openSUSE 这两个 Linux 发行版已经开始考虑移除 Redis 了,现在的问题是,Linux 发行版、用户和供应商会选择谁来替代 Redis。
Redis 简史
Redis 背后的故事有点复杂。因为 MySQL 无法满足需求,Salvatore Sanfilippo(就是鼎鼎有名的"antirez")决定为一个名为 LLOOGG 的实时日志分析器应用开发“一种不同的数据库”。他没有创建一个关系数据库,而是设计了一个简单的字典数据库,将键值对存储在内存中——它的名字是 "remote dictionary server" (远程字典服务器)的缩写。随着时间的推移,Redis 当然已经发展成熟,并积累了许多更多的功能。Redis 很快成为 NoSQL 运动的一部分,并于 2010 年 Sanfilippo 被 VMware 公司聘用来开发 Redis。他在 2013 年转移到了 VMware 的分拆公司 Pivotal,并继续参与该项目的开发。
大约在那个时候,Redis 在 Twitter 和 Pinterest 等知名用户得到采用,知名度开始提高,并开始出现在 Linux 发行版中。Redis 也打包在 12.04(2012 年 4 月)版本的 Ubuntu、18(2013 年 1 月)版本的 Fedora 和其他版本中。 2013 年 9 月, Amazon Web Service(AWS)的 ElastiCache 服务中支持了 Redis,这个合作使得双方的产品都增加了知名度。
2013 年初,一家名为 Garantia Data 的初创公司开始提供 Redis 服务,说自己是“开源 Redis”的更好替代品。Garantia 在 2013 年 11 月进行了第一轮融资,并提出更改公司名称为 RedisDB。遭到 Sanfilippo 的反对后,该公司在 2014 年初改名为 Redis Labs。Sanfilippo 在 2015 年加入了 Redis Labs,担任开源开发的负责人。他一直在 Redis Labs 工作到 2020 年 。
Redis Labs 在 2018 年为其在核心数据库之上提供功能的插件模块采用了一种新的许可证。公司选择了使用 Apache 许可证 2.0 版的修改版本,其中添加了一个称为 "Commons Clause" 的附加条款。这个条款限制了出售软件或收费服务。公司切换许可证的原因是云服务提供商通过销售基于他们没有开发的开源代码的服务来“利用开源社区”。当时,公司承诺 Redis “是 BSD 许可的,并且将永远保持 BSD 许可”。
不止 Redis Labs 一家公司开始尝试使用限制性许可证。特别是受风险投资支持的数据库公司开始采用新的许可证,以确保他们能够独家销售使用该软件的服务。MariaDB 在 2016 年为名为 MaxScale 的产品创建了商业源代码许可证(BSL),而 MongoDB 在 2018 年底推出了服务器端公共许可证(SSPL)。最终,Redis Labs 采用了一种双许可证方案,即 SSPL 和其自己的 Redis 源代码可用许可证(RSAL)。
在 2021 年中,Redis Labs 放弃了其名称中的 "Labs"。在宣布改名时,Redis 再次承诺开源,并表示公司的重命名“不会影响开源 Redis 的许可,它一直是并将继续是 BSD 许可的”。同时,他们还建立了一种治理模式,将 Redis 的“架构、设计或理念”的主要决策权交给社区的“核心团队”。如今,治理模式页面已经不再在 Redis 的网站上展示,只能在 Internet Archive 的 Wayback Machine 上找到。它列出了五名核心团队成员,其中三名来自 Redis(Yossi Gotlieb、Oran Agra 和 Itamar Haber),以及来自阿里巴巴的赵赵和来自 AWS 的 Madelyn Olson。
Redis 在 3 月 20 日宣布了一项重大决定:“所有未来版本的 Redis 将使用源代码可用许可证发布”,具体来说是 SSPL 和 RSAL。Redis CEO Rowan Trollope 写道,继续使用 BSD 许可证与公司成功推动 Redis 未来发展的能力 “不协调”。在这里,“未来版本”指的是 Redis 7.4 及以后的版本。该公告的常见问题解答部分说明,根据公司的安全政策,安全补丁将被回溯到之前版本,并采用原始的三条款 BSD 许可证。
云计算与开源
对于像 SSPL 和 Redis 的 RSAL 这样的限制性许可证的支持者试图将换许可证这件事定位为巨头云厂商如 AWS 和开源之间的战斗,而使用限制性许可证是唯一合乎逻辑的替代方案,云厂商是唯一的输家。在 2019 年,当时的 Redis Labs CEO Ofer Bengal 被引述说,Redis 采用了 Redis 模块的源代码可用许可证后,有“许多不同的观点”,但与云服务提供商竞争是必要的:
一些人谴责了这个[许可证更改]。但在最初的噪音平息后 —— 尤其是在一些其他公司提出类似的概念后 —— 社区现在理解必须改变开源的想法,因为它不再适应这个“云厂商使用其垄断地位采用任何成功的开源项目,却不对其做任何贡献”的时代。
在 3 月 20 日的公告中,Trollope 写道“云厂商将只有在同意与 Redis、Redis 代码的维护者的许可条款后,才能提供 Redis 7.4”,但是,“对于 Redis 开发者社区来说,一切都不会改变,他们将继续享受双重许可下的宽松许可”。
“宽松许可”这个词有误导性。Redis 能够为 7.4 及以后的版本采用非自由许可证方案,是因为外部开发者已经在宽松的 BSD 许可下授予了他们的贡献。SSPL 和 RSAL 的条款与开源社区中对“宽松”这个词的理解并不相符。
很难将云厂商不贡献代码的说法与实际对 Redis 代码库的提交相吻合。通过对自 7.0.0 版本发布以来的提交进行快速审查,使用 gitdm 工具显示了在这段时间内有 967 次提交:
腾讯的王斌斌对该项目的提交贡献了近 25%。一些没有明确的雇主身份的贡献者很可能是 Redis 的员工,但很明显该公司并不是不依赖外部开发者单打独斗的。(注意,省略了一些贡献度较低的贡献者。)
改变分销模式
上面的代码提交示例表明,外部的代码贡献多少并非是修改许可证的关键原因。Redis 是一家风投支持的公司,自 2011 年以来在多轮融资中已经筹集到了 3.5 亿多美元的资金。这家公司及其投资者似乎已经预判出,他们可以安全地从开源转向商业化,尝试获取更多的收入。
如果以 MongoDB 的结果为参考的话,这种预判是有可能实现的。MongoDB 在 2017 年上市,并在一年多后转向 SSPL。不久,主要的 Linux 发行版停止打包该数据库,因为它不再符合他们的许可证标准。但是,那个时候 MongoDB 已经定位自己是平台模型,鼓励开发者(及其雇主)使用并付费使用 MongoDB 及其附带的服务模型。分发一个源代码可用的 MongoDB 版本可以被视为一种亏损领导者策略,以免费的产品接触到该公司并不关心开源的开发者。
注:亏损领导者(也称领导者)是一种定价策略,即以低于市场成本的价格出售产品,以刺激其他利润更高的商品或服务的销售。在这种促销/营销策略下,“领导者”是指任何受欢迎的商品,即以低价出售以吸引顾客的商品。
Redmonk 创始人 Stephen O'Grady 在 2017 年写道:
随着开发者在技术选择和方向上的控制力量不断增强,即使在专有替代品在技术上更优越的情况下,开源软件由于其极大的可访问性而具有巨大的市场优势。在一个可立即下载的合适的选择 A 和由销售人员限制的理论上更优越的选择 B 之间做出选择实际上并不是一个选择。
Grady 也指出的,“与基于服务的替代品相比开源通常并不便利”,如果便利性是最采购的重要的因素,开源就有问题。尤其是当像 MongoDB 这样从专有供应商那里学到“锁定客户对业务有好处”。
锁定对业务真有好处吗?MongoDB 一直在增长,并在上一个财政年度收入了 16.8 亿美元。同比增长了 30% 以上,其 Atlas 数据库服务的收入也增长了 30% 以上,这表明很多公司宁愿付费使用该服务,也不愿自己尝试托管它。尽管如此,该公司仍在亏损——同期亏损了超过 3.45 亿美元。
但是,投资者可能更关心的是股价而非实际利润。MongoDB 上市时的股价大约为每股 33 美元,现在已经超过了每股 350 美元。如果 Redis 可以产生类似的结果,投资者会很高兴。
分支和替代品
O'Grady 去年写道,风险投资支持的企业似乎已经达成了一个脱离开源的共识。特别是在他们并未被其他商业利益、基金会和其他有意参与的行业参与者"积极反对"的情况下。然而,Redis 可能对行业情绪估计不准。
开源社区对于采用特定许可证的项目进行分支发展是有可能的,这些分支也很容易被一些大型公司认可。Hashicorp 去年为其项目采用 BSL 时,其 Terraform 项目的一个分支在几天内出现,并被 Linux 基金会以 OpenTofu 的名字接纳。3 月 28 日,Linux 基金会宣布它正在支持 Valkey,这是 Redis 7.2.4 的直接分支,亚马逊云(AWS)、谷歌云、甲骨文、爱立信和 Snap 是这件事的支持者。
Valkey 分支在 Redis 许可证更改后的几天内就开始活跃起来了。Olson 写道,她和“许多前 Redis 贡献者”开始了一个 分支,使用的是原始的 BSD 三条款许可证,临时名称为 "placeholderkv"。Olson、Zhao、Viktor Söderqvist 和 Ping Xie 被列为维护者。根据 Olson 的说法,这并不是 AWS 对 Redis 的一个分支,而是 "我试图与社区保持连续性"。虽然考虑了 KeyDB,但它已经发散到“缺少社区习惯的很多功能”的程度。
KeyDB 分支是在 2019 年出于技术原因而创建的,不是许可证的原因。这个项目自称是“一个更快的 Redis 替代品”,由 John Sully 和 Ben Schermel 创建,他们希望有一个多线程版本,但无法说服 Redis 的维护者朝那个方向发展。Sully 和 Schermel 成立了一家公司,也叫 KeyDB,提供专有的企业版本。整个代码库在 KeyDB 被 Snap 收购时完全开源,使用 BSD 三条款许可证。
KeyDB 作为替代品的问题在于,自从分支以来,它并没有跟上 Redis 的步伐,仍然缺少 Redis 7 的许多功能。Sully 表示他没有太多时间处理“不直接影响 Snap”的问题,尽管该项目“当然欢迎外部的帮助,如果社区有兴趣帮助,我们当然可以引入其他的维护者”。3 月 22 日,Sully 表示他考虑"可能会"增加维护者,使 KeyDB 更接近 Redis 7。目前还不清楚 Valkey 是否会取代 KeyDB,但 Snap 的存在使得长期内来看这种可能性是增加的。
SourceHut 的创始人和首席执行官 Drew DeVault 也创建了一个基于 Redis 7.2.4 的分支,名为 Redict,但选择使用 LGPLv3。在他的公告帖中,他说选择许可证是“一种权衡多种考虑的有意识的选择”。DeVault 希望有一个 copyleft 的许可证,但“让用户尽可能容易地遵守”许可证,并简化与 Redis 模块的兼容或可以用来在 Redis 中执行操作的 Lua 插件的集成。他还指出,Redict 不会有贡献者许可协议(CLA),但会要求贡献者用开发者原创证书验证贡献。尽管与 SourceHut 有千丝万缕的联系,DeVault 选择了在 Codeberg 托管 Redict,“为在 Redis 的 GitHub 基础社区中的老用户提供一个舒适和熟悉的用户体验”。
另一个可能的竞争者是 3 月 18 日发布的微软的 Garnet。据称,2021 年微软研究部门就开始了开发。它是一个远程缓存存储,可以缓存和管理与 Redis 相同类型的数据,并与 Redis 序列化协议兼容。Garnet 是 MIT 许可的,用 .NET C# 编写,不打算直接替代。然而,它的 API 兼容性页面声称它是一个可以“不做修改就与许多 Redis 客户端兼容”的“足够接近的起点”。(但不是所有 Redis 客户端都可以兼容)一位用户试图将 NodeJS 应用程序切换到 Garnet,但发现 Redis 的 FLUSHALL 命令目前是不支持的。在项目的 Roadmap 上,也能看到增加对缺失 API 的支持的计划。
寻找替代品
再一次,Linux 发行版需要收拾这个烂摊子。Neal Gompa 在 Fedora 开发列表中发起了一场讨论,提到了 Redis 许可证更改以及从 Fedora 中移除 Redis 的需求。
Jonathan Wright 回复说 KeyDB 可能是一个替代品;在许可证更改之前,他一直在“不紧不慢地进行打包工作”。他后来说,KeyDB 可能是“倒退的一步,给那些想要替换 Redis 后续版本的人带来麻烦”。不过,他在 3 月 23 日写道,他已经推出了适用于 Fedora 和 EPEL 8 和 9 的测试版 build。
在 Valkey 发布之后不久,Wright 又说,他将在有标记发布的时候进行打包。还表示,他预计 Valkey 将在“大多数地方成为 Redis 的实际替代品”。
Gompa 也在 openSUSE 的 Factory 讨论列表中提出了这个问题。Dominique Leuenberger 回复了一个列表,显示有 18 个包依赖于 Redis 包,这些包都在 Tumbleweed 中。那时 Valkey 还未发布,他们在讨论中提到了 Redict 和 KeyDB 作为替代品的可能性。
对于社区发行版来说,需要寻找用来替代 Redis 的替代品并不是唯一的问题。Jacob Michalskie 指出了 openSUSE 项目中使用的几项服务将需要替换 Redis,其中包括 Pagure 代码托管软件(由 Fedora 创建并使用,用于 code.opensuse.org)和 Discourse 论坛软件。
Debian 贡献者 Guillem Jover 提出了一个包请求(Request for Package,RFP),提议将 KeyDB 作为 Redis 的潜在替代品。Jover 表示他不确定自己是否能够独自负责维护,但很乐意提供帮助。在与 Jover 的电子邮件交流中,他告诉我他的公司已经从 Redis 6 迁移到了 KeyDB,而且这次迁移非常顺利。根据 Jover 的说法,“与 Redis 7 相比,KeyDB 可能缺少一些功能,但我们没有发现影响,也没有感觉到我们错过了什么。”
Jover 认为现在来判断这些新的分支是否会继续得到维护还为时过早,而且 Redict 的 LGPLv3 许可可能对生态系统造成问题。在 Valkey 发布后的一封后续电子邮件中,他表示:“我认为我们可能会至少继续为 Debian 打包 KeyDB,如果它死掉了,总是可以从那里删除或进行过渡。”
前方的路
当然,现在预测哪一个或多个分支会获得显著的影响力还为时过早——但看起来 Valkey 很可能会成为一个可信赖的选择。一个具有广泛社区和行业支持的快速分支的可能性,应该让那些期望在放弃开源后能够顺利前进的供应商们警醒。
原文链接:https://lwn.net/SubscriberLink/966631/6bf2063136effa1e/
End
KubeBlocks 已发布 v0.8.0(KubeBlocks v0.8.0 发布!Component API 让数据库引擎组装更简单!)!KubeBlocks v0.8.0 推出了 Component API,让数据库引擎的组装变得更加简单。Addon 机制也有了重大改进,数据库引擎的 helm chart 从 KubeBlocks repo 中拆分出去,从此数据库引擎或者版本的变动已与 KubeBlocks 发版解绑。v0.8.0 还支持多版本的数据库引擎定义。Pika、Clickhouse、OceanBase、MySQL、PostgreSQL、Redis 等均有功能更新,快来试试看!
小猿姐诚邀各位体验 KubeBlocks,也欢迎您成为产品的使用者和项目的贡献者。跟我们一起构建云原生数据基础设施吧!
💻 官网: www.kubeblocks.io
🌟 GitHub: https://github.com/apecloud/kubeblocks
🚀 Get started: https://kubeblocks.io/docs/preview/user_docs/try-out-on-playground/try-kubeblocks-on-your-laptop
关注小猿姐,一起学习更多云原生技术干货。
评论