Redis之父终于回归了

科技   2024-12-15 23:59   北京  

12 月 10 日,Redis Labs CEO Rowan Trollope 在 Redis 博客上写到:欢迎回到 Redis,Antirez。Antirez 就是 Redis 创始人 Salvatore Sanfilippo。说明,Antirez 已经重回 Redis ,而且 Antirez 也在自己的社交媒体 X 上宣布了这一消息。

Trollope 在博客中写到:“我们非常激动地欢迎 Antirez 重返 Redis,他在 2009 年创建了 Redis,并一直主导该项目,直到 2020 年因专注于家庭和其他项目而暂时休息,我们很高兴他能重回 Redis,并担任 Redis 大使,期待他帮助我们继续建设社区。”

并且在后面附上了 Antirez 写的一篇题为《From where I left》的文章,在这篇文章中,Antirez 解释了为什么他在休息这么长时间后重返 Redis,以及回归后他想做什么,我们一起来看看。

我不是那种会对自己工作产生强烈依赖的人。当我决定离开 Redis 时,大约是在 1620 天前(大约 4.44 年),我再也没有看过 Redis 的源代码、提交记录或任何与 Redis 相关的东西。偶尔当我需要使用 Redis 时,我只会下载并编译它。我只需要输入 “make” 即可,看到经过多年后,构建 Redis 依然如此简单,我感到非常高兴

我的超脱并不是因为我讨厌过去的工作。虽然从长远来看,我的创意性工作越来越不重要,而 “处理项目” 的活动变得越来越多 —— 这是许多程序员能够做到的,但不是我的拿手好戏 —— 嗯,当我离开时,我仍然喜欢做 Redis 相关的事情。

但是,我并不认同大多数我这个年纪(我现在 47 岁)的人所持的观点:认为自己还年轻。我想做些新鲜的事情,特别是写作。我想更多地陪伴家人,帮助亲戚朋友。所以我需要休息一下。

但是,在 “写作的岁月” 中(顺便说一句,我仍然在写作),我时常回来写代码,作为一种从紧张写作中解脱出来的休息方式(值得一提的是,写作是我迄今为止发现的唯一一项比编程更费脑力的活动)。

在此期间,我做了几个嵌入式项目;探索了神经网络;构建了 Telegram 机器人,涉猎了各种技术实践。虽然偶尔的黑客活动令人兴奋,但长期来看,我感到缺乏一个明确的方向。每天,我内心都有一种紧迫感,驱使我渴望重返科技领域的核心。

同时,我注意到 Redis 社区出现了一定程度的分裂,这让我 —— 即使是作为一个旁观者 —— 也不禁感到担忧。

所以,我开始思考,或许我真的有机会在 Redis 生态系统中扮演一个关键角色。我能否成为重塑公司与社区关系的桥梁?我能否助力 Redis 核心再度成为新开发的焦点?

基本上,我设想自己成为一个 “布道者”—— 尽管我不太喜欢这个称呼,但你懂我的意思 —— 在公司与社区之间架起沟通的桥梁,同时,我也是可以进行编程演示、创造并阐释新模型、撰写文档、制作视频和博客文章的人。

至于新事物的设计,我计划从外界的工作中汲取灵感,从他们的困难中提炼智慧,将这些反馈融入设计思考,推动 Redis 的持续进化。

#01

为什么我回来
我的女儿现在 12 岁,她是我生命中不可或缺的一部分,用她的智慧、创造力和爱照亮了我的每一天。有一次,她说想在纽约庆祝她的生日。所有我们最终决定回到纽约。毕竟,我们前几年过的并不轻松,为何不借此机会放松一下呢?我女儿已经从一个小孩成长为一个少女。因此,在纽约市的时候,我想:也许现在正是时候可以尝试一份兼职工作了

我最近通过视频与新的 Redis CEO Rowan Trollope 见了面,我感觉我们能够携手优化公司与社区的关系,以及代码库的发展方向。于是,我给他发了一封电子邮件,询问他:“你认为我能以某种身份回归吗?”Rowan 对我的提议表示出了兴趣,我们很快就达成了一些共识。

#02

关于许可证
人们可能会好奇,为什么我会选择在这个时候回归,以及这背后是否有其他不为人知的原因或协议,或者是否涉及了一大笔金钱;是否有任何不寻常或不明确的因素。但有时候,事情其实非常简单:
  1. 是我主动联系了公司,而非公司来找我。
  2. 我的回归并没有巨额的薪资,我只是获得了一份正常薪资的工作。(但需要声明:我依然持有 Redis 的股票期权,数量不多也不少,和以前一样。)
  3. 对于 Redis 改变许可的问题,我并没有太大的异议;具体来说,我认为社区的分裂并不完全是由这个原因引起的。既然人们会问我关于这个重要问题的看法,我认为早点跟大家说清楚更好。

我一直在写开源软件。作为一名无神论者,我尊重他人的信仰自由,包括信仰上帝,如果这能帮助他们度过人生的艰难时刻的话,同时,我也坚信开源并非编写软件的唯一途径。在我参与创立的公司中开发 Redis 时,我与另一位创始人共同决定将软件代码保持封闭。

Redis 最终选择开源,是因为它并不被视为我们的核心产品。我们的初衷是不希望我们的服务被其他公司轻易复制,原因就这么简单。所以在这方面,我并不是极端主义者 —— 我只对软件设计抱有极端主义的态度。

此外,我对开源和许可的看法并不完全符合 OSI(开放源代码促进会)所定义的那样。在我看来,许可界定了你可以做什么和不能做什么的范围。同时,我确实对大型云服务提供商如何改变系统软件领域的激励机制感到担忧。Redis 并不是唯一一个改变许可的项目,实际上,它是众多项目中的最后一个。而且,我有一种感觉,近年来许多项目甚至没有启动,因为它们缺乏一个明确的潜在商业模式。

因此,Redis 的许可变更并非我的个人决定 —— 如果我来做选择,我可能会选择不同的许可?我不确定,毕竟,现在很容易在远离现场多年且没有商业压力的情况下重新审视这个问题。但总的来说,我能理解做出这个选择的原因。

如果你仔细阅读了 Redis 的新许可证,你会发现它虽然不是 BSD 许可证,但在大多数情况下,它仍然允许你以与以往相似的自由度使用 Redis。具体来说,只要你不将 Redis 作为一项服务来出售,你就可以像以前一样对其进行修改、重新发布,或者在你的盈利公司中免费使用它。

实际上,你甚至仍然可以将 Redis 作为服务出售,但前提是你必须将所有相关的编排系统也以相同的许可证发布 —— 尽管实际上没有人会这样做,这展示了许可证的 copyleft 特性。该许可证的措辞几乎与 AGPL 相同,只是针对 SaaS 的部分进行了一些调整。

因此,尽管它不符合 OSI(开放源代码促进会)的标准,但我并不认为 SSPL(服务提供者许可证)是一个封闭的许可证。

你可能会这么说:真正的问题在于,一些公司正在主导开源软件项目的发展。最终,这些项目的利益越来越与公司自身对齐,而不是与用户群体的需求对齐。我非常赞赏那些没有公司直接参与的项目(尤其是在没有外部公司资助的情况下),但你知道吗?在许多大型项目中,公司的参与实际上有助于减缓项目偏离正确轨道的过程。这一点在 Redis 的案例中确实有所体现。

#03

软件界的罗宾汉
让我们回到 Redis 初创的那段日子。

当 Redis 开始流行起来时,我想找一种方式来继续开发它。那是在 VMware 提供赞助之前。我开始思考可能的商业模式,你猜怎么着?我想到了一个闭源产品的想法,这个产品能以某种方式帮助人们运行 Redis。

令人惊讶的是,与这个想法相关的一个仓库至今仍然在线,能展示 15 年前的提交记录:https://github.com/antirez/redis-tools

在我早期的职业生涯中,我曾探索过采用某种开源核心模式。我还记得,我一度考虑过将新代码的 BSD 许可证推迟六个月发布,目的是为了为我们的付费用户创造一些优势。然而,现在我不再认为我会做出任何不公平的行为,或是采取任何不寻常的手段来对待我的用户。

如果没有 VMware 的及时赞助,以及后来 Redis Labs 提供的更多支持,我不可能成为今天的我 —— 开源软件界的罗宾汉。在这个过程中,我得到了合理的补偿,但这并非为了公司的利益,而是为了 Redis 社区的最大利益。我坚信,这比拥有自己的公司要好得多。

VMware 和后来的 Redis Labs 不仅仅是为我支付了费用。如果你查看了我们的代码仓库贡献历史,你会发现排名第二的贡献者是 Oran Agra(来自 Redis Labs),紧接着是 Pieter Noordhuis(来自 VMware)。

因此,从根本上来说,我认为 12 年专注于 BSD 代码编写,并完全致力于用户基础,是一项值得庆祝的事情。目前,对我来说最重要的是,社区分裂并非完全源于许可问题,或者至少,许可问题并非其主要原因。实际上,新的许可证能够解决部分问题:现在没有动机仅仅将核心代码维持在维护状态,而将新的开发工作转移到模块中。

有了新许可证,云服务提供商不再能够直接复制和粘贴 Redis 的代码库,并在不分享任何收益的情况下出售它(这要求真的过分吗?这本可以避免最近你所目睹的所有许可证切换,不仅仅是 Redis)。新许可证的实施,可以将焦点重新放回到 Redis 核心上,全球开发者手中将拥有新的、令人兴奋的功能。数十名因此得到良好补偿的人员,正在推动 GitHub 仓库中有用且文档完备的更新。这也是我期望帮助公司实现的目标,我将全力以赴。我们需要确保许可证的切换对用户基础和功能产生积极的影响:这正是我的目标。

#04

关于 AI、大模型和向量索引
不仅如此,Redis 正在积极开发向量功能,并广泛支持 AI 编程的应用。每天,我都会浏览 Hacker News,注意到许多技术人员对 AI 和最新技术发展持有抵触情绪。同时,我也观察到许多人并不愿意去深入尝试最新的 AI 模型(顺便提一下:Claude AI 真的很特别),他们往往将其视为几乎无用的技术。但是,我的看法与他们不同。我一直对神经网络充满热情。

早在 2003 年,我就编写了我的第一个神经网络库,并被其强大和酷炫的能力深深震撼。到了 2024 年底,我被这个领域取得的进步震惊了,那些几年前还看似科幻小说中的场景,如今已成为现实:Claude AI 最近成为了我的思维伙伴、编辑和编程搭档。

借助 AI,我能完成比以往更多的工作,而且质量更高。最近,我为一家意大利出版社撰写了一篇科幻短篇小说,得益于 Claude 对部分内容的批评,我重写了结尾,写出了更加好的作品(我并没有让 Claude 撰写任何一行故事或情节:正确使用优秀 AI 的方式并不是让机器去做你更擅长的事情)。

昨天,我需要评估使用 8 位量化向量进行点积计算的速度。我向 Claude 说明了我需要设计一个特定方式的基准测试,仅仅过了两分钟,我就能测试、修改它,并理解其性能是否符合预期。这基本上展示了 AI 并没有取代我的工作,而是加速了我的工作流程,或者通过提供反馈来改善我的工作。

我相信,无论 RAG(Retrieval-Augmented Generation)模型的流行程度如何,RAG 并不一定是最主要的应用,也不是最具未来性或最实用的,因为随着模型上下文的不断扩大,流行模型的注意力机制可能很快会变成线性复杂度的问题。

抱歉稍微偏离了主题,我的意思是,我相信学习嵌入技术将会长期存在,而向量搜索是 Redis 能够支持的一项功能,原因有几个:首先,向量索引是一种数据结构,特别是对于那些在内存中非常适用的较慢的数据结构。其次,我认为我找到了一个完美的 API 来暴露这些功能。

在我设计 Redis 的过程中,我总是处在矛盾中。一方面,我总是准备对那些看似完美契合项目需求的功能说 “不”—— 比如 Lua 脚本和哈希字段过期,顺便提一句,它们现在都已成为 Redis 的一部分。然而,与此同时,我也引入了 Lua 脚本功能 —— 在当时看来,这简直是疯了,居然要在 Redis 里面加入一个解释器?—— 还有发布 / 订阅功能,这个功能看起来似乎不太符合上下文。

接着是流式数据,甚至包括一些计算机科学书籍中未曾提及的合成数据结构,比如有序集合。因为对我来说,Redis 是否适合添加新功能,取决于两个关键因素:使用场景和内部设计的契合度。对我来说,Redis 就像是程序员的乐高积木,而不是一个简单的 “产品”。

#05

向量集
最近,我开始思考有序集合可以如何启发一种全新的数据类型,其中分数实际上是一个向量。在与 Rowan 交流中,我开始起草设计文档,并着手实现这个新数据结构的概念验证,从头开始实现 HNSWs(而不是依赖现有的库,因为我想要优化每一个细节),并以 Redis 的方式进行实现。

目前,我不确定这个项目将如何发展,因为我还处于编码的早期阶段,但如果这个提案被接受,或许最终我将再次贡献代码。我实现的模块(目前仅作为一个简单的模块存在,计划稍后合并到核心中)将实现直接操作嵌入的命令。让我给你们一个提示:

VSIM top_1000_movies_imdb ELE "The Matrix"  WITHSCORES
 1) "The Matrix"
 2) "0.9999999403953552"
 3) "Ex Machina"
 4) "0.8680362105369568"
 5) "Akira"
 6) "0.8635441958904266"
 7) "District 9"
 8) "0.8631418347358704"
 9) "The Martian"
10) "0.8608670234680176"
11) "The Bourne Ultimatum"
12) "0.8599717319011688"
13) "The Bourne Supremacy"
14) "0.8591427505016327"
15) "Blade Runner"
16) "0.8585404753684998"
17) "Metropolis"
18) "0.8572960793972015"
19) "Inception"
20) "0.8521313071250916"
你可以看到,VSIM、VADD、VCARD 等命令都是显而易见的。这些命令完全基于有序集合的思想,但引入了多维分数(即嵌入!)和 K-NN(K 最近邻)匹配功能。您觉得这个想法如何?当然,在这个基础上,还有许多实现技巧可以进一步提高效率。但目前,它仅仅是一个概念验证代码,我还需要一些时间来进一步完善它。我正在努力实现多线程处理、降维、量化以及更多功能。老实说,这个过程非常有趣。

如你所见,这里没有提到混合搜索,这是最近关于向量存储的流行词汇。再说一遍,这是 Redis 的方式:让开发者发挥作用,决定他们的权衡:毕竟他们知道自己在建模什么。你可以为每个键建立一个向量索引,就像程序员能够用有序集合做的那样,他们会发明有趣的拆分策略、新的架构、Lua 脚本、模式,以及所有需要的东西,来建模他们的使用场景。

当然,虽然通常与项目关联的可能是一个小字符串或文档 ID,但也没有什么能够阻止它变得更复杂,比如带有可以后续过滤的元数据(尽管我会抵制这种做法)。我只是认为,许多使用场景实际上并不真的需要复杂的服务器端过滤,而是可以通过预分区数据来建模。

我特别感兴趣的是,可能会增加一个 STORE 选项,将结果存储到有序集合中,而不是直接返回给用户,其中分数自然代表相似度。这一切对效率、可扩展性、使用脚本的能力等方面都产生了复杂而有趣的影响:我希望在接下来的一段时间里有机会更深入地探讨这些话题。

#06

所以,我回来了 🙂
说了这么多,归根结底就一句,我回来了。我觉得现在是时候向 Redis 社区表达我深深的谢意了,感谢他们多年来的支持与贡献。希望我们能够再次相聚,也许在这段旅程中还能增加些许新东西。

不过对于 Antirez 的回归,有人认为是 Redis 为了重新获得用户信任。

不管因为什么,X 上粉丝都对 Antirez 的回归表达了期待与欢迎。

编辑:万能的大雄

相关阅读:

21CTO
21CTO(21CTO.com),开发者的学习与服务平台。提供高品质文章、课程与训练营、招聘等产品。
 最新文章