3. Codis实践
Codis由豌豆荚于2014年11月开源,基于Go和C开发,是近期涌现的、国人开发的优秀开源软件之一。现已广泛用于豌豆荚的各种Redis业务场景(已得到豌豆荚@刘奇同学的确认,呵呵)。
从3个月的各种压力测试来看,稳定性符合高效运维的要求。性能更是改善很多,最初比Twemproxy慢20%;现在比Twemproxy快近100%(条件:多实例,一般Value长度)。
3.1 体系架构
Codis引入了Group的概念,每个Group包括1个Redis Master及至少1个Redis Slave,这是和Twemproxy的区别之一。这样做的好处是,如果当前Master有问题,则运维人员可通过Dashboard“自助式”切换到 Slave,而不需要小心翼翼地修改程序配置文件。
为支持数据热迁移(Auto Rebalance),出品方修改了Redis Server源码,并称之为Codis Server。
Codis采用预先分片(Pre-Sharding)机制,事先规定好了,分成1024个slots(也就是说,最多能支持后端1024个Codis Server),这些路由信息保存在ZooKeeper中。
ZooKeeper还维护Codis Server Group信息,并提供分布式锁等服务。
3.2 性能对比测试
Codis目前仍被精益求精地改进中。其性能,从最初的比Twemproxy慢20%(虽然这对于内存型应用而言,并不明显),到现在远远超过Twemproxy性能(一定条件下)。
我们进行了长达3个月的测试。测试基于redis-benchmark,分别针对Codis和Twemproxy,测试Value长度从16B~10MB时的性能和稳定性,并进行多轮测试。
一共有4台物理服务器参与测试,其中一台分别部署codis和twemproxy,另外三台分别部署codis server和redis server,以形成两个集群。
从测试结果来看,就Set操作而言,在Value长度<888B时,Codis性能优越优于Twemproxy(这在一般业务的Value长度范围之内)。
就Get操作而言,Codis性能一直优于Twemproxy。
3.3 使用技巧、注意事项
Codis还有很多好玩的东东,从实际使用来看,有些地方也值得注意。
1)无缝迁移Twemproxy
出品方贴心地准备了Codis-port工具。通过它,可以实时地同步 Twemproxy 底下的 Redis 数据到你的 Codis 集群。同步完成后,只需修改一下程序配置文件,将 Twemproxy 的地址改成 Codis 的地址即可。是的,只需要做这么多。
2)支持Java程序的HA
Codis提供一个Java客户端,并称之为Jodis(名字很酷,是吧?)。这样,如果单个Codis Proxy宕掉,Jodis自动发现,并自动规避之,使得业务不受影响(真的很酷!)。
3)支持Pipeline
Pipeline使得客户端可以发出一批请求,并一次性获得这批请求的返回结果。这提升了Codis的想象空间。
从实际测试来看,在Value长度小于888B字节时,Set性能迅猛提升;
Get性能亦复如是。
4)Codis不负责主从同步
也就是说, Codis仅负责维护当前Redis Server列表,由运维人员自己去保证主从数据的一致性。
这是我最赞赏的地方之一。这样的好处是,没把Codis搞得那么重。也是我们敢于放手在线上环境中上线的原因之一。
5)对Codis的后续期待?
好吧,粗浅地说两个。希望Codis不要变得太重。另外,加pipeline参数后,Value长度如果较大,性能反而比Twemproxy要低一些,希望能有改善(我们多轮压测结果都如此)。
因篇幅有限,源码分析不在此展开。另外Codis源码、体系结构及FAQ,参见如下链接: https://github.com/wandoulabs/codis
PS:线上文档的可读性,也是相当值得称赞的地方。一句话:很走心,赞!
最后,Redis初学者请参考这个链接:http://www.gamecbg.com/bc/db/redis/13852.html,文字浅显易懂,而且比较全面。
本文得到Codis开发团队刘奇和黄东旭同学的大力协助,并得到Tim Yang老师等朋友们在内容把控方面的指导。本文共同作者为赵文华同学,他主要负责Codis及Twemproxy的对比测试。在此一并谢过。
相关推荐
2. **高性能Redis集群解决方案**: Codis设计的目标是提供高性能的集群解决方案,通过优化的数据分片策略和智能的流量调度,确保在大规模数据和高并发场景下,系统仍能保持良好的响应速度和吞吐量。 3. **Redis集群...
codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.13 开发, 加入了 slot 的支持...
包括官方近期推出的RedisCluster,Redis集群有三种实现机制,分别介绍如下,希望对大家选型有所帮助。这种方案将分片工作放在业务程序端,程序代码根据预先设置的路由规则,直接对多个Redis实例进行
Github上给的架构图如下:几个关键组件说明:它实际就是个Redis的服务端,基于redis-server做了二次开发,增加额外的数据结构以便支持slot的相
在选择合适的Redis集群方案时,需要综合考虑业务场景、性能要求、运维能力及技术栈等因素。如果业务对运维的要求相对较低,且能够接受一定程度的性能损耗,那么使用Twemproxy可能是一个简单的选择。而对于那些需要...
通过Codis,你可以将多个Redis实例组合成一个逻辑上的集群,实现数据的自动分片、故障转移以及平滑扩容。 **Redis基础知识** Redis是一个开源的内存数据存储系统,它支持多种数据结构,如字符串、哈希、列表、集合...
Redis Cluster是Redis官方提供的分布式集群解决方案,它允许用户在多个节点之间分发...通过详细的步骤和包含的所有组件,用户可以在离线环境中顺利构建起一个高可用的Redis集群,从而实现高效、稳定的数据存储和处理。
本文将详细介绍几种常见的Redis集群方案,包括客户端分片、Twemproxy、Codis以及Redis 3.0集群。 #### 一、客户端分片 **概念**: 客户端分片是一种将分片逻辑置于客户端实现的策略。该方案通过客户端预先定义好的...
在深入探讨Redis专场中Codis集群演化与Redis异步迁移的内容之前,首先需要对Codis和Redis这...通过理解这些内容,我们可以更全面地把握当前分布式缓存技术的最新发展动态,以及在实践中如何选择和应用适合的集群技术。
2. 槽分配:Redis 集群将数据空间划分为 16384 个槽,每个键根据哈希函数映射到相应的槽,再由槽决定数据存储在哪个节点。这种设计使得数据可以在不同节点间透明迁移,支持水平扩容和缩容。 二、Redis 集群搭建 ...
1. Codis:Codis 是一个基于 Redis 的集群解决方案,能够提供高可用性和高性能的服务。 2. Redis Cluster:Redis Cluster 是 Redis 官方提供的集群解决方案,能够提供高可用性和高性能的服务。 Redis 源码分析 ...
Codis到Redis Cluster的迁移工具支持将已经在Codis集群中的数据平滑迁移到Redis Cluster,无需停机,保证业务的连续性。同样,它也支持从Redis迁移到Codis,以及在Redis实例之间进行迁移,这些功能使得数据管理更具...
**Go-Codis:高性能Redis集群的Go语言实现** Go-Codis是一个使用Go语言编写的高性能、基于代理的Redis集群解决方案。它旨在提供一种灵活且可扩展的方式,以处理大规模的数据存储和检索需求,特别是在那些对数据一致...
Redis 集群是指通过多个 Redis 实例来实现横向扩展的技术。它可以提高 Redis 的可用性和负载均衡能力。但是,官方集群方案在实际应用中存在一些问题。 ##### 1. 官方集群方案的优缺点 - **优点**: - 支持数据分片...
安装redis集群管理器 mkdir /var/log/codis -pv cd /workspace/Go/src/github....
**CODIS集群安装包及文档详解** ...通过以上步骤和注意事项,你可以成功搭建和管理一个CODIS分布式Redis集群。CODIS提供的强大扩展性和易用性,使其成为大型互联网应用的首选分布式缓存解决方案。
Codis3.1集群搭建需要规划服务器的IP地址和角色,安装Go语言环境,安装Codis,启动Codis Server、Codis Manager、Codis Proxy和Codis FE,搭建Zookeeper集群。整个搭建过程需要逐步完成,每步骤都需要严格按照要求...
Codis 是一个基于代理的高性能 Redis 集群解决方案,使用 Go 编写。它已投入生产,并在wandoujia.com和许多公司中广泛使用。您可以查看Codis Releases了解最新和最稳定的版本。捐款如果您想帮助我们维护这个项目,请...