codis架构学习
转自:https://jackeyzhe.github.io/2018/11/14/玩转Redis集群之Codis/
1.介绍
codis是一种redis 分布式集群解决方案,codis是基于多个redis实例做了一层路由层来进行数据路由,每个redis实例承担一定的数据分片。
- Codis FE:集群管理界面。多个集群实例共享可以共享同一个前端展示页面;通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。
- Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。
- proxy是无状态服务,可以同时部署多个 codis-proxy 实例;
- 接受redis-client请求,并且把根据用户请求信息进行计算,得到相应的slot,并把redis client请求正确的路由到背后的物理实例上;每个proxy具有所有的solt信息,一个slot分配给哪个server group信息,以及知道一个servergroup谁是master,谁是slave。
- 不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
- Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。 对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
- 所有对集群的修改都必须通过 codis-dashboard 完成。
- codis_group:是一个逻辑概念,不具有对应的进程或者服务,只是proxy里的一个属性。
- Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。
- Storage:为集群状态提供外部存储,保存集群meta信息。提供 Namespace 概念,不同集群的会按照不同 product name 进行组织;目前仅提供了 Zookeeper、Etcd、Fs 三种实现。
2.原理
2.1 分片
Codis采用Pre-sharding的技术来实现数据分片,默认分为1024个slot(0-1023)。Codis在接收到命令时,先对key进行crc32运算,然后再对1024取余,得到的结果就是对应的slot。然后就可以将命令转发给slot对应的Redis实例进行处理了。
2.2 扩缩容
// 具体代码还得再学习下。
2.3 缺点
当Redis Group的master挂掉时,codis不会自动将某个slave升为master,codis提供了一个叫做codis-ha的工具,这个工具通过dashboard提供RESTful API来实现自动主从切换。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2023-06-30 cpu profiler学习
2018-06-30 准备面试杂总