揭秘GaussDB(for Redis):全面对比Codis
摘要:Codis集群在国内Redis生态圈很流行,社区已停止维护。本文从架构和特性两方面对比,带你感受华为云GaussDB(for Redis)的全新价值。
本文分享自华为云社区《华为云GaussDB(for Redis)揭秘第19期:GaussDB(for Redis)全面对比Codis》,作者: 高斯Redis官方博客 。
一、Codis究竟有多火?
说Codis是国内最流行的自建Redis集群方案,一点也不为过。客户曾这样说:
“Codis你不知道吗?我们公司用了好多年了,好东西呀。”
的确,相比去中心化架构的开源Redis Cluster,Codis这种proxy代理集群显然更“好用”,甚至就连RedisLabs官方都推出了功能类似的redis-cluster-proxy来弥补传统Cluster缺点。
然而其实从N年前开始,Codis社区就没有人维护了,我们的客户项目经理海鹏老师也经常要帮助客户把自建Codis搬迁到云上的GaussDB(for Redis)。
Codis的确很优秀,不过我们可以负责任地说:
华为云KV数据库GaussDB(for Redis)更优秀!
二、GaussDB(for Redis) vs Codis:架构比拼
首先,我们从技术架构角度来看看两款产品究竟哪里不同。
如图,架构上的差异一目了然,我们可以自顶向下分析:
1、非标SDK vs 标准SDK
公有云用户普遍讨厌“搞特殊”,然而Codis偏要搞特殊。Codis绑架用户必须使用非标Jodis SDK来解决代理层单点故障问题。但如果用户偏要使用标准SDK(如大名鼎鼎的Jedis)呢?Codis表示:对不起,跟高可用说拜拜吧。
相反,GaussDB(for Redis)在使用上则很友好,业务侧使用任何标准SDK都行,同时高可用、自动负载均衡能力也全都在。上云搬迁时,GaussDB(for Redis)兼容方面做得也很成熟,不论客户原来代码用的是StandAlone,还是Cluster、Sentinel等模式,都可以0改造上云,真正做到开箱即用,体验感极佳。
2、无负载均衡 vs 专业的ELB
Codis的代理层虽然提供了横向扩展能力,但并不好用:要么牺牲高可用来使用标准SDK连接单点;要么使用Jodis SDK,但代价是业务走向非标化。
而GaussDB(for Redis)提供ELB,方便用户统一接入,在简化客户端复杂度的同时,还带来了专业的负载均衡能力。有了这个统一接入IP,用户相当于自己在使用一个超大容量的单机Redis,而无需操心底层细节。
3、存算耦合 vs 存算分离
可以认为,Codis是在多套Redis分片上做了一层封装,架构模型是传统的存算耦合。在大key、数据一致性、分片故障、扩缩容等典型场景中,都延续了开源Redis的长期“痛点”。
GaussDB(for Redis)采用存算分离架构,计算层聚焦数据业务,存储层基于高性能分布式共享存储池,确保数据三副本存储强一致,超高可靠。同时大幅节省硬件成本,帮业务减负。
三、GaussDB(for Redis) vs Codis:特性比拼
从前文的架构维度对比可以看出,GaussDB(for Redis)上有ELB让业务侧“更好用”,下有存储池让数据“更可靠”,比自建Codis集群优秀了太多。
下面再从特性维度聊聊,GaussDB(for Redis)还能给业务侧带来哪些价值。
1、兼容性
GaussDB(for Redis)完全兼容Redis协议,同时兼容StandAlone/Cluster/Sentinel等多种SDK模式,方便业务搬迁上云。而Codis的兼容性则显得很差。
2、稳定性
自建Codis集群稳定性强依赖开源Redis能力,不论是扩容还是大key场景,都有相同痛点,在此不再赘述。
GaussDB(for Redis)自研架构完全解决了开源Redis的fork问题,稳定性大幅提升;同时,在与分布式存储池架构的深度合作下,数据的可靠性也全面优于Codis。
3、成本
Codis依然是传统纯内存Redis的封装,业务存不了多少就会触及成本痛点。随着业务长期发展,逐渐也会有数据降冷(如APP的冷用户),此时Codis里真正有价值的热数据占比越来越低,全量数据在内存中成本会相当高。
GaussDB(for Redis)的算力则按需选配,存储价格低,非常适合大容量KV存储场景。
四、总结
Codis是很多开发和运维同学曾经青睐的产品,是时代的记忆,但是,技术在快速发展。在这里,建议使用了Codis的业务可以考虑使用GaussDB(for Redis),感受华为云这款企业级KV数据库的全新价值。
五、附录
- 本文作者:
华为云数据库GaussDB(for Redis)团队
- 更多产品信息,欢迎访问官方博客:
bbs.huaweicloud.com/blogs/248875
相关文章
- redis过期监听
- redis requires ruby version2.2.2的解决方案
- 同一份数据Redis为什么要存两次
- 极速优化:借助Redis分布式缓存(分布式缓存redis)
- 了解Redis:强大的键值数据库(redis什么意思)
- Redis在.net中的应用(redis.net)
- 时间处理Java处理Redis中设置的过期时间(redisjava过期)
- 策略解析Java中Redis过期策略(redisjava过期)
- 了解Redis哨兵的重要作用(redis哨兵作用)
- Tips for Executing Redis Shutdown Command(redis关闭连接命令)
- Utilizing Redis Intersections for Advanced Data Analysis and Optimization(redis交集)
- 深入了解Redis:实现高效缓存的技巧与实践(redis缓存实现)
- Redis vs. Memcached: Understanding the Key Differences for Optimal Caching Strategies(redis和memcached的区别)
- Exploring the Differences Between RDS and Redis: Which is Right for Your Needs?(rds和redis)
- RedisPy: A HighPerformance Python Client for Redis Database(redis-py)
- Redis在Mac上的安装与使用(redis for mac)
- 如何删除Redis集群(怎样删除redis集群)
- 使用Redis管理计算数据的可行性研究(计算数据入redis)
- 开启Redis之旅,提升系统效率(缓存引擎redis)
- 成功检查Redis安装安装成功与否的结果(查看redis是否安装)
- 游戏服务器利用Redis提高性能(游戏服务器用redis吗)
- 利用Redis管理你的博客项目(博客项目redis)
- 将redis整合进单实例架构中(单实例的redis)
- 深入浅出Redis高级类型介绍(redis 高级类型)
- 分布式数据库Redis集群的同步延迟问题(redis集群同步延迟)
- 数据类型深入浅出Redis键值的数据类型(redis键值的有哪些)
- Redis实现快速配置设置语句指南(redis 配置设置语句)
- 快速使用Redis的远程命令行(redis 远程命令行)
- 基于Redis的购物车数据模型研究(redis购物车数据类型)