更新时间:2020-09-16 14:49:09 来源:极悦 浏览1383次
客户端分片
Redis Sharding是Redis Cluster出来之前,业界普遍使用的多Redis实例集群方法。其主要思想是采用哈希算法将Redis数据的key进行散列,通过hash函数,特定的key会映射到特定的Redis节点上。java redis客户端驱动jedis,支持Redis Sharding功能,即ShardedJedis以及结合缓存池的ShardedJedisPool。
Redis Sentinel提供了主备模式下Redis监控、故障转移功能达到系统的高可用性。在主Redis宕机时,备Redis接管过来,上升为主Redis,继续提供服务。主备共同组成一个Redis节点,通过自动故障转移,保证了节点的高可用性。
客户端sharding技术其优势在于非常简单,服务端的Redis实例彼此独立,相互无关联,每个Redis实例像单服务器一样运行,非常容易线性扩展,系统的灵活性很强。
客户端sharding的劣势也是很明显的。由于sharding处理放到客户端,规模进一步扩大时给运维带来挑战。客户端sharding不支持动态增删节点。服务端Redis实例群拓扑结构有变化时,每个客户端都需要更新调整。连接不能共享,当应用规模增大时,资源浪费制约优化。
基于代理的分片
客户端发送请求到一个代理组件,代理解析客户端的数据,并将请求转发至正确的节点,最后将结果回复给客户端。
该模式的特性如下:
1.透明接入,业务程序不用关心后端Redis实例,切换成本低。
2.Proxy的逻辑和存储的逻辑是隔离的。
3.代理层多了一次转发,性能有所损耗。
简单的结构图如下:
主流的组件有:Twemproxy和Codis。
Codis
Codis是豌豆荚开源的redis集群方案,是一个分布式Redis解决方案,对于上层的应用来说,连接到Codis Proxy和连接原生的Redis Server没有显著区别,上层应用可以像使用单机的Redis一样使用,Codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的一切事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的Redis服务。
Codis当前最新release版本为codis-3.2,codis-server基于redis-3.2.8。有一下组件组成:
Codis
Codis Server:基于redis-3.2.8分支开发。增加了额外的数据结构,以支持slot有关的操作以及数据迁移指令。
Codis Proxy:客户端连接的Redis代理服务,实现了Redis协议。除部分命令不支持以外(不支持的命令列表),表现的和原生的Redis没有区别(就像Twemproxy)。
Codis Dashboard:集群管理工具,支持codis-proxy、codis-server的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard维护集群下所有codis-proxy的状态的一致性。
对于同一个业务集群而言,同一个时刻codis-dashboard只能有0个或者1个;所有对集群的修改都必须通过codis-dashboard完成。
Codis Admin:集群管理的命令行工具。
可用于控制codis-proxy、codis-dashboard状态以及访问外部存储。
Codis FE:集群管理界面。
多个集群实例共享可以共享同一个前端展示页面;
通过配置文件管理后端codis-dashboard列表,配置文件可自动更新。
Storage:为集群状态提供外部存储。
提供Namespace概念,不同集群的会按照不同product name进行组织;目前仅提供了Zookeeper、Etcd、Fs三种实现,但是提供了抽象的interface可自行扩展。
至于具体的安装与使用,见官网CodisLabs,不在此涉及。
Codis的特性:
Codis支持的命令更加丰富,基本支持redis的命令。
迁移成本低,迁移到codis没这么麻烦,只要使用的redis命令在codis支持的范围之内,只要修改一下配置即可接入。
Codis提供的运维工具更加友好,提供web图形界面管理集群。
支持多核心CPU,twemproxy只能单核
支持group划分,组内可以设置一个主多个从,通过sentinel监控redis主从,当主down了自动将从切换为主
以上就是对“redis集群教程之实现的几种方法”的介绍,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习