Redis 與雄心壯志的代價:當功能蔓延侵蝕身分時

Redis 與雄心壯志的代價:當功能蔓延侵蝕身分時

Redis 的發展軌跡為任何成功的基礎設施提供了一個警示故事。最初它是一個精簡、有目的性的工具——一個旨在以優雅方式解決特定問題的「遠端字典伺服器」——如今已演變成一個龐大的功能套件,威脅著要掩蓋其原始的核心價值。

當一個工具試圖滿足所有人的所有需求時,它往往面臨成為「第二系統失敗」(second-system failure)的風險:變成一個複雜、碎片化的自身版本,失去了最初推動其普及的簡潔性。這正是 Redis 目前面臨的危機。

Redis 最初的卓越之處

在早期(約 2011 年),Redis 並不稱自己為資料庫;它是一個「進階鍵值儲存」和「資料結構伺服器」。它的成功並非偶然;而是三個特定設計成就的結果:

  1. 簡單且具表現力的協定:其傳輸協定直觀到可以在一小時內實現,但功能強大到足以支持豐富的資料類型。
  2. 有目的性的架構:透過將單執行緒、事件驅動模型與記憶體內儲存結合,Redis 保證了原子性並消除了鎖定的複雜性,使其速度極快且易於理解。
  3. 得體的原語 (Primitives):對 linked-lists、hash-tables 和 sorted-sets 的選擇,完美對應了 Web 應用程式最常見的需求——快取、隊列和速率限制。

向「資料庫」雄心的轉向

在過去十年中,Redis 將其身分從工具轉變為功能完備的資料庫。這種轉變是由於渴望捕捉開發者生態系統中出現的每一種新趨勢所驅動的。隨著新的範式在 Hacker News 和業界獲得關注,Redis 試圖將它們整合為模組或原生類型:

  • 文件儲存:效仿 MongoDB 的成功,Redis 增加了 JSON 支持。
  • 搜尋:效仿 ElasticSearch,它增加了搜尋和查詢功能。
  • 事件串流:效仿 Kafka,它引入了 Streams。
  • 強一致性:為了與 ZooKeeper 或 etcd 競爭,它引入了 Redis-Raft。
  • AI 與向量:為了在當前的熱潮中保持相關性,它將自己定位為「AI 應用程式的即時上下文引擎」。

這種「太空人模式」的開發方式——基於一般趨勢而非特定的、迫切的使用者需求來構建功能——往往會導致半成品實作。一個典型的例子是最初的 Redis-Raft 實作,Jepsen 的 Aphyr 發現它「基本上無法使用」,因為存在許多 bug,包括過時的讀取和遺失的更新。

膨脹與授權的代價

這種雄心並不僅僅影響了技術架構;它也滲透到了商業模式中。2024 年從寬鬆的 BSD 授權轉向限制性的三授權模式(包括 AGPLv3)被許多人視為對其自身使用者的「焦土政策」。

結合了企業級代碼的 CTA(如「Get a Demo」)以及專有感十足的模組,該專案已遠離其作為社群驅動工具的根源。其結果是一個產品,感覺起來不像是一件手術工具,而更像是一把瑞士軍刀,其中一半的刀片都是鈍的。

反方觀點:與

Sources