大約一年前,我開始從事一個開源項目,以在 Go 中構建 Redis 的嵌入式替代方案。就在那時我開始建立 EchoVault 專案。從那時起,該項目引起了一些興趣,甚至一些貢獻者。
本文介紹了 EchoVault、其功能、用例以及其開發背後的動機。
什麼是 EchoVault?
EchoVault 是專為 Go 應用程式量身定制的嵌入式記憶體資料儲存。它透過 TCP 提供與 RESP 相容的接口,同時提供直接嵌入到應用程式中的靈活性。
透過這樣做,EchoVault 的目標是在某些用例中取代 Redis 等傳統記憶體資料存儲,透過增強的 Go 整合提供類似的功能。
為什麼要建造 EchoVault
我建造 EchoVault 的最初動機是:
- 嵌入式靈活性:像 Redis 這樣的傳統記憶體資料儲存是需要單獨管理和部署的外部服務。 EchoVault 允許開發人員將資料儲存直接嵌入到他們的應用程式中,從而簡化部署過程,從而消除了這種開銷。
- Go 生態系統整合:EchoVault 主要為 Go 設計,確保 Go 應用程式內的無縫整合和最佳效能。但是,它還保持了 TCP 上的 RESP 相容性,使其與現有的 Redis 用戶端(例如 redis-cli 和 Jedis)相容。
- Redis 許可證變更:EchoVault 是開源的(在 Apache 2.0 下獲得許可)。我們致力於保持這種完全開源的模式,而不是開放核心。
EchoVault 提供的功能
EchoVault 具有多種功能,使其成為記憶體資料儲存的可靠選擇:
- TLS 和 mTLS 支援:透過支援多個伺服器和用戶端根憑證授權單位 (RootCA) 實現安全通訊。
複製集群支援:利用RAFT演算法進行複製和集群。
- 存取控制層:提供使用者驗證和授權以保護資料存取。
- 分散式發布/訂閱功能:支援發布/訂閱通道和模式以進行即時資料處理。
- 資料結構:我們支援各種資料結構,包括集合、排序集合、雜湊、列表等。我們正在繼續在其中添加更多資料結構和命令。
- 持久層:此層透過快照和僅附加檔案持久性確保資料持久性。 AOF 檔案與 RESP 相容,但尚未完全相容於 Redis。
- 關鍵驅逐策略:實現各種關鍵驅逐策略來管理記憶體使用。 EchoVault 具有被動和主動密鑰驅逐功能。透過被動密鑰驅逐,過期的密鑰直到下次訪問它們時才會被驅逐。透過主動驅逐,EchoVault 將主動刪除過期的密鑰。
- 命令擴充:允許透過共用物件檔案和嵌入式 API 來執行時擴充命令。
由於我們處於開發的早期階段,功能清單仍在不斷擴展。我們為未來準備了一些更酷的功能,包括:
EchoVault 的架構
EchoVault 支援獨立和叢集部署。
獨立模式
在獨立模式下,EchoVault 運行單一(獨立)實例。這是運行 EchoVault 的最簡單方法。您可以從嵌入式程式庫執行獨立實例,也可以將其作為接受 TCP 連線的自己的進程啟動。
嵌入式實例還可以接受 TCP 連接,讓您可以從 TCP 用戶端與 Go 進程進行通訊。
RAFT複製叢集模式
對於需要強一致性和容錯能力的應用,EchoVault支援基於RAFT的複製群集模式。
RAFT是一種共識演算法,可確保分散式系統之間的資料一致性。在這種模式下,多個EchoVault實例可以組成一個集群,提供資料複製並確保即使在節點故障的情況下資料也保持一致。
RAFT叢集模式的主要特點:
- 容錯:即使叢集中的某些節點發生故障,也能確保資料可用性。
- 一致性:保證叢集中所有節點的資料相同。
- 可擴展性:允許透過向叢集添加更多節點來進行水平擴展。
您甚至可以在嵌入式模式下執行 EchoVault 叢集。這意味著您的應用程式實例可以透過 EchoVault 層相互通信,而無需部署第三方服務。這非常適合跨應用程式實例叢集的會話管理等用例。
EchoVault 用例
EchoVault 的多功能性使其適用於廣泛的應用程式。以下是一些潛在的用例:
- 記憶體緩存
場景:某電商網站需要快取商品詳情和使用者會話資訊以提高效能。
解決方案:使用 EchoVault 快取經常存取的資料以加快回應時間。
優點:頁面載入速度更快,使用者體驗改善,資料庫壓力減少。
- 服務發現
場景:微服務架構需要動態服務發現來進行服務間通訊。
解決方案:將服務端點儲存在 EchoVault 中,使服務能夠有效地發現彼此並進行通訊。
好處:簡化服務發現並提高通訊效率。
- 會話管理
場景:分散式 Web 應用程式必須管理跨多個執行個體的使用者會話。
解決方案:使用EchoVault嵌入式叢集來儲存會話數據,確保所有應用程式實例的一致性和可存取性。
優點:跨應用程式叢集進行一致的會話管理,無需部署 Redis 等輔助服務。
- 即時分析
場景:金融交易平台需要即時分析和監控交易數據。
解決方案:在 EchoVault 中儲存和處理即時貿易數據,利用其排序集和發布/訂閱功能進行追蹤和分析。
優點:即時數據處理和更快的分析。
- 分散式任務佇列
場景:後端系統需要管理並分發任務到多個工作節點。
解決方案:使用EchoVault的清單資料結構實作任務佇列,其中任務被推送到清單中,工作節點彈出任務進行處理。
優點:高效率的任務分配和可擴展性。
- 功能標誌與設定管理
場景:SaaS 應用程式需要動態啟用或停用功能並管理配置設置,而無需重新部署應用程式。
解決方案:將功能標誌和配置設定儲存在 EchoVault 中。
優點:動態設定管理並減少停機時間。
- 速率限制與節流
場景:API 網關需要強制執行速率限制和限制請求,以防止濫用並確保公平使用。
解決方案:使用 EchoVault 的記憶體功能來實施速率限制,以追蹤請求計數並即時實施限制。
好處:有效的速率限制和提高 API 可靠性。
- 領導人選舉
場景:一個分散式服務群集需要選出一個領導者來協調任務。
解決方案:依賴EchoVault嵌入式分散式叢集的Leader選舉,確保只有一個應用程式實例被指定為Leader。
優點:可靠的領導者選舉和改進的協調,而無需在應用程式層級自行實現。
結論
EchoVault 是一個雄心勃勃的計畫。在這些早期階段,我們預計必須解決許多問題並添加許多功能。不過,我們歡迎這項挑戰,並希望 Go 社群參與該計畫。
如果這篇文章激發了您的好奇心,或者您有興趣為這樣的專案做出貢獻,請查看我們的 GitHub 並給我們一顆星!我們始終歡迎更多回饋和貢獻!
以上是EchoVault:Go 中的嵌入式 Redis 替代方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!