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

关注小猿姐,一起学习更多云原生技术干货。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS day1

1.总结keil5下载代码和编译代码需要注意的事项 需要与板子连通 配置完成后才点击下载 2.总结STM32Cubemx的使用方法和需要注意的事项 下载支持包 打开芯片配置界面 3.总结STM32Cubemx配置GPIO的方法

笔记本电脑上部署LLaMA-2中文模型

尝试在macbook上部署LLaMA-2的中文模型的详细过程。 (1)环境准备 MacBook Pro(M2 Max/32G); VMware Fusion Player 版本 13.5.1 (23298085); Ubuntu 22.04.2 LTS; 给linux虚拟机分配8*core CPU 16G RAM。 我这里用的是16bit的量化模型,…

Linux系统下使用ethtool命令定位网口位置的方法

多网口服务器安装Linux系统时我们会看到eth0、eth1、……网口过多,不好确定哪个口对应哪个eth,可以使用ethtool命令定位网口位置。 方法一 ethtool ethX 查看相应网口的详细信息 [rootMiNAS ~]# ethtool eth0Settings for eth0: Supported ports: [ …

在Windows上交叉编译STM32(环境搭建)

在Windows上交叉编译STM32 Keil 虽然好用,但是是收费的,不想破解怎么办~ 使用交叉编译工具! 交叉编译工具下载 官方交叉编译工具下载连接 下载解压好后将 bin 目录写入 PATH, 使用命令行检测是否安装成功。 Windows 安装 make …

wpsword求和操作教程

wpsword求和怎么操作: 1、首先,单纯的数据是无法求和的,所以我们必须要“插入”一个“表格” 2、接着将需要求和的数据填入到表格中。 3、填完后,进入“布局”选项卡。 4、然后打开其中的“公式” 5、在其中选择求和公式“SUM”并…

深入MNN:开源深度学习框架的介绍、安装与编译指南

引言 在人工智能的世界里,深度学习框架的选择对于研究和应用的进展至关重要。MNN,作为一个轻量级、高效率的深度学习框架,近年来受到了众多开发者和研究人员的青睐。它由阿里巴巴集团开源,专为移动端设备设计,支持跨平…

什么是超声波清洗机?六大超声波清洗机必读干货分享指南

传统的清洁方式往往难以满足高效、高质量的需求,这时,超声波清洗机就显得格外重要。但什么是超声波清洗机?为什么它能在众多清洁设备中脱颖而出?接下来,我们将通过六大必读干货,一探究竟,开启清…

RockChip Android8.1 Settings

一:Settings一级菜单 1、AndroidManifest.xml 每个APP对应都有一个AndroidManifest.xml,从该文件入手分析最为合适。 packages/apps/Settings/AndroidManifest.xml 根据<category android:name="android.intent.category.LAUNCHER" />可找到当前当前APP a…

MySQl on和where条件的区别?

MySQ L on和where条件的区别&#xff1f; on会生成临时表&#xff0c;不满足条件会置空 where 过滤数据&#xff0c;不满足的数据不会显示

JUC/多线程原理(三)

一、Monitor 原理 二、synchronized 原理 (一)、基础 synchronized 即使内部抛出异常也会释放锁 (二)、轻量级锁 轻量级锁的使用场景&#xff1a;如果一个对象虽然有多线程要加锁&#xff0c;但加锁的时间是错开的&#xff08;也就是 没有竞争 &#xff09;&#xff0c;那么…

游戏领域AI智能视频剪辑解决方案

游戏行业作为文化创意产业的重要组成部分&#xff0c;其发展和创新速度令人瞩目。然而&#xff0c;随着游戏内容的日益丰富和直播文化的兴起&#xff0c;传统的视频剪辑方式已难以满足玩家和观众日益增长的需求。美摄科技&#xff0c;凭借其在AI智能视频剪辑领域的深厚积累和创…

ISP-VPN实验

文章目录 ISP-VPN实验一&#xff0c;实验拓扑二、实验要求三、IP规划四、实验配置1、IP配置R1的配置R2的配置R3的配置R4的配置R5的配置 2、配置缺省路由3、认证与被认证配置4、HDLC封装5、构建MGRE和GRE6、整个私有网络基于RIP全网可达7、查看路由配置和PC端配置8、PC端pingR5的…

【爬虫开发】爬虫从0到1全知识md笔记第2篇:requests模块,知识点:【附代码文档】

爬虫开发从0到1全知识教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;爬虫课程概要&#xff0c;爬虫基础爬虫概述,,http协议复习。requests模块&#xff0c;requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…

[Python GUI PyQt] PyQt5快速入门

PyQt5快速入门 PyQt5的快速入门0. 写在前面1. 思维导图2. 第一个PyQt5的应用程序3. PyQt5的常用基本控件和布局3.1 PyQt5的常用基本控件3.1.1 按钮控件 QPushButton3.1.2 文本标签控件 QLabel3.1.3 单行输入框控件 QLineEdit3.1.4 A Quick Widgets Demo 3.2 PyQt5的常用基本控件…

C++多线程:创建多个线程与数据共享安全问题(四)

1、创建多个线程 多线程的调度由操作系统负责&#xff0c;线程执行的先后没有严格的顺序完全看操作系统和CPU的心情。 #include <iostream> #include <vector> #include <thread>void thread_print(int num) {std::cout << "线程编号 " &…

小程序UI设计规范,界面设计尺寸详解

作为互联网技术的重要组成部分&#xff0c;小程序在日常生活中发挥着越来越重要的作用。因此&#xff0c;了解和严格遵守小程序的 UI 设计标准非常重要&#xff0c;它不仅可以帮助我们在保证良好用户体验的同时优化小程序&#xff0c;还可以使我们的产品在竞争激烈的市场中占据…

Python 自学(九) 之异常处理,文件及目录操作

目录 1. try ... except ... else ... finally 排列 P231 2. write, read, seek, readline, readlines 基本文件操作 P245 3. os模块 基本目录操作 P249 4. os.path 模块 复杂目录操作 P250 5. os 模块 高…

什么是齐纳二极管?齐纳二极管1SMB5944BT3G参数详解+应用方案

关于齐纳二极管基本知识&#xff1a; 齐纳二极管&#xff0c;又称稳压二极管。利用PN结的反向击穿状态&#xff0c;电流变化范围大&#xff0c;电压基本不变。制作了具有稳压功能的二极管。这种二极管是一个高电阻半导体器件&#xff0c;直到临界反向击穿电压。在这个临界击穿…

numpy之linspace()函数使用详解

numpy之linspace()函数使用详解 linspace() 函数 作为序列生成器&#xff0c; numpy.linspace()函数用于在线性空间中以均匀步长生成数字序列。 Numpy通常可以使用numpy.arange()生成序列&#xff0c;但是当我们使用浮点参数时&#xff0c;可能会导致精度损失&#xff0c;这…

Linux(CentOS7)安装 MongoDB

目录 下载 上传 解压 创建mongodb.conf 创建数据文件夹和日志文件夹 启动服务 创建软链接 安装客户端 下载 上传 安装 下载 官方地址&#xff1a; Download MongoDB Community Server | MongoDBhttps://www.mongodb.com/try/download/community 上传 将下载好的 …