當前位置: 妍妍網 > 碼農

Redis 替代方案之戰!

2024-06-03碼農

【CSDN 編者按】 3月21日,Redis宣布,從Redis 7.4開始,"記憶體數據儲存"計畫將采用非免費的原始碼可用授權釋出。雖然這不是一個好訊息,但也並非完全出乎意料。其實Redis的替代方案有很多,對於希望繼續使用免費軟體的人來說,至少有四種選擇,包括名為KeyDB的現有分支以及Linux基金會新宣布的Valkey計畫。現在的問題是Linux發行版、使用者和提供商將選擇哪一個(或哪些)來取代Redis。

原文連結:https://lwn.net/SubscriberLink/966631/6bf2063136effa1e/

未經允許,禁止轉載!

作者 | Joe Brockmeier 責編 | 夏萌

譯者:彎月

出品 | CSDN(ID:CSDNnews)

3月21日,Redis宣布,從Redis 7.4開始,"記憶體數據儲存"計畫將采用非免費的原始碼可用授權釋出。雖然這不是一個好訊息,但也並非完全出乎意料。其實Redis的替代方案有很多,對於希望繼續使用免費軟體的人來說,至少有四種選擇,包括名為KeyDB的現有分支以及Linux基金會新宣布的Valkey計畫。現在的問題是Linux發行版、使用者和提供商將選擇哪一個(或哪些)來取代Redis。

Redis簡史

Redis的背景故事很復雜。該計畫的發起人是Salvatore Sanfilippo("antirez"),作為「一種不同型別的資料庫」,可與名為LLOOGG的即時日誌分析應用程式一起使用,因為MySQL不能滿足他的需求。他沒有建立關系型資料庫,而是設計了一個簡單的字典資料庫,將鍵值對儲存在記憶體中,Redis這個名字就是remote dictionary server的縮寫。多年以來,該計畫已發展成熟,並增加了許多其他功能。後來,Redis成為了NoSQL運動的一部份,2010年VMware聘請Salvatore Sanfilippo開發Redis。2013年,他轉到了VMware的子公司Pivotal,並繼續從事該計畫的開發。

當時,Redis的人氣越來越高,推特和Pinterest等知名公司都在使用,後來出現在Linux發行版中。Redis被打包到了Ubuntu 12.04(2012年4月)、Fedora 18(2013年1月)等發行版中。2013年9月,AWS的ElastiCache服務添加了對Redis的支持,Redis的受歡迎程度進一步增加。

2013年初,一家名為Garantia Data的初創公司開始提供Redis服務,並將自己定位為"開源Redis"的替代品。2013年11月,Garantia進行了第一輪融資,意欲將公司名改為RedisDB。在遭到Sanfilippo的反對之後,該公司最終於2014年初改名為Redis Labs。2015年,Sanfilippo加入Redis Labs,擔任開源開發的負責人,之後他一直在Redis Labs任職,直到2020年辭職。

2018年,Redis Labs在核心資料庫之上提供了一些附加模組,而這些模組采用了一種新的授權。他們選擇使用改版的Apache授權2.0,其中添加了一條Commons Clause附加條款。此條款限制了軟體或收費服務的出售。該公司選擇這種轉變的理由是,雲服務提供商銷售的服務使用了開原始碼,但這些程式碼並非出自他們之手,開源社群白白為他們做嫁衣。當時,Redis Labs承諾Redis「是BSD,現在是,將來也是。」

其實,Redis Labs不是唯一嘗試使用限制性授權的公司。尤其是風險投資支持的資料庫公司紛紛開始朝著采用新授權的方向邁進,為的是他們能夠獨家銷售使用自家軟體的服務。2016年,MariaDB為一款名為MaxScale的產品建立了商業原始碼授權(BSL)。2018年底,MongoDB推出了伺服器端公共授權(SSPL)。最終,Redis Labs的模組采用了SSPL和自家的Redis原始碼可用授權(RSAL)的雙重授權方案。

2021年中期,Redis Labs剔除了名稱中的"Labs",正式更名為Redis。在宣布新公司名時,Redis再次承諾開源,並表示公司的更名"不會影響開源Redis授權,他們將繼續采用BSD授權證"。另外,他們還制定了一套治理模型,其中提到將涉及Redis"架構、設計或理念"的決策權交由社群的"核心團隊"。大家都以為這個團隊的任命包括Redis本身的授權。如今Redis的網站上已經看不到這套治理方案了,但Internet Archive的Wayback Machine上還有存檔,該頁面上列出了核心團隊的五名成員,其中三名來自Redis(Yossi Gotlieb、Oran Agra和Itamar Haber),另外兩名分別是來自阿裏巴巴的Zhao Zhao和來自AWS的Madelyn Olson。

3月20日,Redis宣布"Redis未來的所有版本都將采用原始碼可用授權",包括SSPL和RSAL。Redis執行長Rowan Trollope寫道,如今維護BSD授權"與我們成功推動Redis未來發展的努力背道而馳"。此處,未來版本指的是Redis 7.4及之後的版本。聲明中的常見問題答疑稱,根據公司的安全政策,安全修補程式將回溯到之前版本,使用原始的三條款BSD授權。

雲與開源

SSPL和Redis的RSAL等使用限制性授權的支持者認為,這是一場僅限於雲服務巨頭(如AWS)與開源之間的戰鬥,使用限制是唯一合乎邏輯的選擇,而雲服務提供商是唯一的輸家。2019年,Redis Labs執行長Ofer Bengal表示:

有些人譴責「授權變更」。但在最初的喧囂平息後,特別是其他一些公司也提出了類似的概念之後,社群明白了最初的開源概念必須被修正,因為如今這個時代各大雲公司利用壟斷力量白占開源計畫的便宜,而不為開源做任何貢獻。

Trollope在3月20日的聲明中表示:「雲服務提供商只有在與Redis、Redis程式碼的維護者達成授權合約後,才能提供Redis 7.4」,但"對於繼續享受雙重授權的Redis開發者社群來說,一切都不會改變"。

"寬松授權"是具有誤導性的一個短語。Redis7.4及之後的版本能夠采用非免費授權方案,是因為外部開發人員已經根據寬松的BSD授權授權了他們的貢獻。SSPL和RSAL的條款與開源社群中"寬松"一詞的常見用法不相容。

另外,看看Redis儲存庫的送出就會發現,雲服務提供商沒有為開源做任何貢獻的說法並不完全正確。我使用gitdm快速檢視了7.0.0版本釋出以來的送出,這段時間內共有967次送出:

其中,25%的送出來自騰訊的朱斌斌(Binbin Zhu)。一些貢獻者可能沒有明確的雇主,但顯然是 Redis 的員工,並不是獨自工作的。(註意,一些只有個位數貢獻者被省略了。)

分發模式的改變

因此可以看出程式碼貢獻並不是關鍵。Redis 是一家由風險投資支持的公司,自 2011 年以來已經進行了多輪融資,總額超過 3.5 億美元。該公司及其投資者似乎已經計算出他們可以安全地遠離開源,獲取更多收入。

他們有理由相信這個方向是可行的,比如MongoDB就是一個很好的例子。2017 年,MongoDB上市,並在一年後轉向了 SSPL。不久之後,Linux主發行版停止打包該資料庫,因為不符合他們的授權標準。但在當時,MongoDB已經將目光投向了一種平台模式,鼓勵開發人員(以及他們的雇主)使用MongoDB及其相關產品的服務模式,並支付相應的費用。MongoDB釋出原始碼可用版本可被視為一種吸引開發者的招徠策略,實際上該公司根本不在乎開源。

Redmonk 創始人 Stephen O'Grady 曾在 2017 年寫道:

隨著開發人員開始控制技術選擇和方向,雖然專有替代方案更為優越,但開源軟體的便於存取性帶來了巨大的市場優勢。方案A可自由下載,方案B可能更為優越但需要銷售人員經手,實際上使用者別無選擇。

但是,O'Grady 指出,一般來說開源不如基於服務的替代方案方便,如果便利性是最重要的因素,那麽開源就存在問題。尤其是MongoDB這類的供應商從專有供應商那裏學到了一個道理:「釘選客戶對業務發展更有利」。

真的對業務發展更有利嗎?MongoDB在不斷發展壯大,客戶在增加,上個財政年度收入達 16.8 億美元,增長率超過30%,其 Atlas 資料庫服務的收入增長也超過了30%,種種跡象表明許多公司更加傾向於使用花錢的服務,而不是嘗試自行托管。盡管如此,MongoDB仍處於虧損,同一時期虧損超過 3.45 億美元。

但是,投資者可能對股價更感興趣,而不是實際利潤。MongoDB上市時的股價為 33 美元,但現在已經超過 350 美元。如果Redis也能實作類似的戰績,投資者們肯定會很滿意。

分叉和替代方案

風險投資支持的供應商似乎已經達成了共識,他們可以擺脫開源。尤其是,他們不會被「其他商業利益、基金會以及其他感興趣的行業參與者的竭力反對」。然而,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 的說法,這不是Redis的 AWS 分叉,而是「我在努力保持與社群的聯系」而已。也有人考慮過KeyDB,但這個分支「缺少了許多社群已習慣的東西」。

KeyDB分支是2019年由於技術原因而建立的,與授權無關。該計畫自稱是「更快的、隨插即用的Redis替代品」,由 John Sully、Eric Blenkarn 和 Ben Schermel 建立,他們想要一個多執行緒版本,並未能說服 Redis 維護者朝這個方向發展。Sully 和 Schermel 成立了一家公司,也叫 KeyDB,提供專有企業版。2022年,KeyDB被Snap收購,整個程式碼庫完全開源,采用了三條款 BSD 授權。

KeyDB 作為直接替代方案的問題在於,自從這個分叉建立以來就與Redis分道揚鑣,沒能跟上後者的發展,至今仍然缺少 Redis 7 的許多功能。Sully 表示,他幾乎沒有時間處理「與 Snap 沒有直接關系的問題」,盡管該計畫「非常歡迎外部幫助,如果社群有興趣幫助的話,我們也可以指定其他的維護者」。3月22日,Sully 更新了另一個問題,並表示他正在討論添加維護者,為的是讓KeyDB跟上Redis 7。目前尚不清楚 Valkey 是否會取代 KeyDB,但鑒於Snap的介入,從長遠看來這似乎很有可能。

SourceHut 的創始人兼執行長Drew DeVault 也建立了一個名為 Redict 的分支,基於 Redis 7.2.4,但選擇使用 LGPLv3 授權。他在公告貼文中表示,選擇授權是「一個深思熟慮的選擇,平衡了許多問題」。DeVault 希望選擇一個 Copyleft 授權,但「盡可能方便使用者遵守」,並且便於整合 Redis 相容模組或可在 Redis 內執行操作的 Lua 外掛程式。他還指出,Redict 不會采用貢獻者授權合約(CLA),但要求貢獻者使用開發者溯源認證驗證貢獻。盡管他與 SourceHut 有聯系,但 DeVault 選擇將 Redict 托管在 Codeberg 上,為的是「為所有基於GitHub社群的人提供舒適和熟悉的使用者體驗」。

還有一個有力的競爭對手是微軟的 Garnet,釋出於3月18日。根據公告,這是2021年以來一直由微軟研究部門開發的遠端緩存儲存系統,可以緩存和管理與 Redis 相同型別的數據,並且能夠與 Redis 序列化協定相容。Garnet 采用 MIT 授權證,用 .NET C# 編寫,所以無法直接取代Redis。然而,其 API 相容性頁面聲稱,可以被視為一個「足夠接近的起點」,可以「與許多 Redis 客戶端結合,並且不需要修改」。許多,但並非所有。例如,一位使用者嘗試將一個 NodeJS 應用程式切換到 Garnet,但發現 Redis 的 FLUSHALL 命令目前不受支持。該計畫的路線圖上提到了添加對缺失 API 的支持。

替代方案之戰

Linux 發行版再一次陷入混亂。Neal Gompa 在 Fedora 開發列表上開了一個討論帖,指出了授權變更以及需要從 Fedora 中移除 Redis 的必要性。Jonathan Wright 回答說,KeyDB 是潛在的替代方案,而且早在授權變更之前他就在「處理打包」問題了。後來,他又表示,對於尋找Redis替代方案的人來說,KeyDB 將是「一種倒退,令人頭痛」。然而,3月23日,他又寫道,他已經推出了構建,可在 Fedora 和 EPEL 8 和 9 中測試。

在 Valkey 公告釋出後不久,Wright 寫道,他已做好打包準備,只等標記版本釋出。Wright 還表示,他「認為對於大多數場合,Valkey將成為Redis[事實上的]替代方案」。

Gompa 也在 openSUSE 的 Factory 討論列表上提出了這個問題。Dominique Leuenberger在回復中提到了Tumbleweed中依賴於Redis包的18個軟體包的列表。最初的討論還提到了Redict和KeyDB作為可能的替代方案,但當時Valkey尚未宣布。

對於社群發行版來說,找到一個Redis的替代方案並不是唯一的問題。Jacob Michalskie指出了一些 openSUSE 計畫中使用的服務,這些也需要一個Redis的替代方案,其中就包括code.opensuse.org以及Discourse論壇軟體使用的Pagure程式碼托管軟體(該軟體由 Fedora 建立,Fedora也在使用)。

Debian 貢獻者 Guillem Jover送出了一個包請求,指明將KeyDB作為Redis的潛在替代方案。Jover 表示,他不確定自己是否能夠獨自擔任維護者,但很樂意伸出援手。Jover在電子信件交流中表示,他的公司已經從 Redis 6 遷移到了 KeyDB,「整個過程很順利」。根據 Jover 的說法,「與 Redis 7 相比,KeyDB 可能缺少一些功能,但我們既沒有註意到缺少任何功能,也沒有感覺到我們漏掉了任何東西。」

Jover 表示,現在還為時過早,無法判斷新的分支是否會繼續得到維護,而 Redict 的 LGPLv3 授權「也可能存在生態系的問題」。在 Valkey 公告釋出後,Jover在電子信件中表示:「我認為我們可能會進一步推進在Debian中打包KeyDB,如果KeyDB停止維護,我們可以隨時刪除或作為過渡。」

今後的發展

當然,現在預測某個或多個分支是否會取得重大進展還為時過早,就目前而言,Valkey似乎有可能成為一個可靠的替代方案。Redis在短時間內出現許多分支,並得到了社群和行業的支持,這應該能讓等著坐享其成的供應商們減緩腳步。

推薦閱讀: