首页 >后端开发 >Golang >EchoVault:Go 中的嵌入式 Redis 替代方案

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

WBOY
WBOY原创
2024-07-24 10:42:11927浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn