首頁 > 後端開發 > Golang > 主體

EchoVault:Go 中的嵌入式 Redis 替代方案

WBOY
發布: 2024-07-24 10:42:11
原創
739 人瀏覽過

EchoVault: Embeddable Redis Alternative in Go

大約一年前,我開始從事一個開源項目,以在 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 來執行時擴充命令。

由於我們處於開發的早期階段,功能清單仍在不斷擴展。我們為未來準備了一些更酷的功能,包括:

  • 直播。
  • Lua 模組擴充。
  • 分片。

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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!