EchoVault:Go 中的嵌入式 Redis 替代方案
来源:dev.to
时间:2024-07-24 10:46:05 294浏览 收藏
大家好,今天本人给大家带来文章《EchoVault:Go 中的嵌入式 Redis 替代方案》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!
大约一年前,我开始致力于一个开源项目,以在 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 替代方案》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!
-
505 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
174 收藏
-
262 收藏
-
217 收藏
-
320 收藏
-
276 收藏
-
101 收藏
-
379 收藏
-
159 收藏
-
315 收藏
-
256 收藏
-
164 收藏
-
416 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习