HN热帖|替换Redis的一场赛跑

news2024/12/30 1:20:05

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.Netty介绍及NIO三大组件

Netty网络编程Netty的底层是NIO(非阻塞IO),常用的多线程和线程池使用的是阻塞IO,其效率并不高。支持高并发,性能好高性能的服务端程序、客户端程序 NIO三大组件 一、Channel 读写数据的双向传输通道 常见的传输通道…

React Native框架开发APP,安装免费的图标库(react-native-vector-icons)并使用详解

一、安装图标库 要使用免费的图标库,你可以使用 React Native Vector Icons 库。 首先,确保你已经安装了 react-native-vector-icons: npm install --save react-native-vector-iconsnpm install --save-dev types/react-native-vector-ic…

深入理解数据结构第一弹——二叉树(1)——堆

前言: 在前面我们已经学习了数据结构的基础操作:顺序表和链表及其相关内容,今天我们来学一点有些难度的知识——数据结构中的二叉树,今天我们先来学习二叉树中堆的知识,这部分内容还是非常有意思的,下面我们…

Collection与数据结构 链表与LinkedList(二):链表精选OJ例题(上)

1. 删除链表中所有值为val结点 OJ链接 class Solution {public ListNode removeElements(ListNode head, int val) {if(head null){return head;}ListNode pre head;ListNode cur head.next;while(cur ! null){if(cur.val val){pre.next cur.next;}else{pre pre.next;…

天空卫士SASE 2.0:赋能您的数智安全

在这个以数据为核心的时代,企业的安全防线正面临着空前的挑战。随着对网络安全和数字化协作的需求不断攀升,企业如何在确保数据安全的前提下,维持业务的高效运转,成为了一个亟待解决的问题。企业管理者亟需一种集网络安全、云服务…

京东云16核64G云服务器租用优惠价格500元1个月,35M带宽

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽,配置为:16C64G-450G SSD系统盘-35M带宽-8000G月流量 华北-北京,京东云活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图: 京东云16核64G云服务器…

SD-WAN安全策略,保护企业网络的新边界

随着企业的数字化转型和网络架构的演变,SD-WAN(软件定义广域网)作为一种新兴的网络技术,正在逐渐取代传统的基于硬件的广域网架构。然而,随之而来的安全威胁也在增加,因此在部署 SD-WAN时,制定合…

用Unity制作正六边形拼成的地面

目录 效果演示 1.在Unity中创建正六边形 2.创建一个用于管理正六边形的类 3.创建一个用于管理正六边形地面的类 4.创建一个空对象并将游戏控制脚本挂上 5.设置正六边形碰撞所需组件 6.创建正六边形行为触发脚本并挂上 7.创建圆柱体——田伯光 8.创建圆柱体移动脚本 运…

BootsJS上新!一个库解决大部分难题!

不知不觉距离第一次发文章介绍自己写的库BootsJS已经过去一个月了,这个月里收到了许许多多JYM的反馈与建议,自己也再一次对BootsJS进行了改进与完善,又一次增加了很多功能,为此我想应该给JYM们汇报汇报这个月的工作进展。 BootJS仓…

SpringBoot Actuator和Spring boot Admin工具

目录 一、Spring Boot Actuator 1、简介 2、访问方式 3、端点 4、SpringBoot项目引入actuator 端点 ①health ②beans ③configprops ④env ⑤loggers ⑥heapdump ⑦threaddump ⑧metrics ⑨scheduledtasks ⑩mappings ⑪shutdown 定制端点 一、定制health端…

【Spring Cache】基于注解的缓存框架 简化redis代码

文章目录 一、介绍二、常用注解三、快速入门3.1 EnableCaching3.2 CachePut3.3 Cacheable3.4 CacheEvict 一、介绍 Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层…

产品经理与产品原型

点击下载《产品经理与产品原型》 1. 前言 互联网产品经理在向技术部门递交产品策划方案时,除了详尽的需求阐述,一份清晰易懂的产品原型设计方案同样不可或缺。一份出色的原型设计,不仅能促进前期的深入讨论,更能让美工和开发人员更直观地理解产品特性,进而优化工作流程,…

Java代码基础算法练习-求偶数和-2024.03.29

任务描述: 编制程序,输入n个整数(n从键盘输入,n>0,整数取值范围:0~1000),输出这n个 数当中的偶数和。 任务要求: 代码示例: package M0317_0331;import…

金三银四面试题(七):JVM常见面试题(1)

JVM会有许多零碎但是却很高频的基础考题。牢记这些,才能保证不在面试中落后于人。 说说对象分配规则 这也是之前面试腾讯时候被问到的问题:请介绍JVM如何分配对象? 对象优先分配在Eden 区,如果Eden 区没有足够的空间时&#xf…

软件测试基础理论、测试用例及设计方法、易混淆概念总结【软件测试】

一.软件测试基础理论 1.软件定义 软件是计算机系统中与硬件相互依存的一部分,包括程序、数据以及与其相关文档 的完整集合。 程序是按事先设计的功能和性能要求执行的指令序列; 数据是使程序能正常操作信息的数据结构; 文档是与程序开发、维…

TR2 - Transformer模型的复现

目录 理论知识模型结构结构分解黑盒两大模块块级结构编码器的组成解码器的组成 模型实现多头自注意力块前馈网络块位置编码编码器解码器组合模型最后附上引用部分 模型效果总结与心得体会 理论知识 Transformer是可以用于Seq2Seq任务的一种模型,和Seq2Seq不冲突。 …

开源免费软件推荐PhotoPrism:一款基于TensorFlow的开源照片管理工具,实现自动图像分类与本地化部署

引言: PhotoPrism,这款基于机器学习软件Google TensorFlow的开源照片管理工具,不仅实现了自动图像分类,更能够精准检测图片的颜色、色度、亮度、质量等属性。无论是全景照片还是地理位置信息,它都能轻松识别。更重要的…

k8s-jenkins安装与流水线

k8s-jenkins安装与流水线 一、环境安装1.创建目录2.后台启动服务3.浏览器访问4.修改密码 二、流水线1.新建流水线任务2.运行流水线3.安装插件4.安装Kubernetes CLI 三、总结 一、环境安装 如果使用的是阿里云Kubernetes集群 ,可以安装其 ack-jenkins应用。 5分钟在…

KVM:尝试安装windows2008

最终目的是在lxd部署windows2008镜像 WindowsServer2008镜像: cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso 镜像参考链接: https://discussion.scottibyte.com/t/migrate-a-hyper-v-windows-vir…

on-my-zsh 命令自动补全插件 zsh-autosuggestions 安装和配置

首先 Oh My Zsh 是什么? Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式。它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作。给我们一种全新的方式使用命令行。…