最近学习了Codis的源码实现,把一些收获整理一下放在这里。

为什么会有Codis?

RedisCluster架构

Codis是怎么做的

Codis架构

首先,为什么会有Codis?

Codis是用来管理Redis集群的,那么Codis就是因为Redis而存在的,但是这并不是终极答案,对吧?为什么会有Redis呢?因为这个人。Redis的作者。

这是一个大帅哥,一点也不像一个程序员屌丝。 他是Redis之父,意大利人,名字读不出来。大家有兴趣可以去搜一下。 Redis的设计也很简单,大家可以花时间来研究一下。

Redis的集群

可能有人会有疑问,Redis应该有自己的集群啊,就像MySql集群一样,既然是一个正式的中间件产品,那么官方也应出品类似的集群。 那么RedisCluster就是这样的东西。

下图是Redis集群的架构的图,RedisCluster是官方的产品,可以看到这个架构是一个平面的。这里的分布式的逻辑和Redis的存储模块是在一起的。 好处是部署简单。 集群的一致性和容错 都由这些节点自己保证。每个Redis集群的节点,负责了很多的功能。

优点是:

真正的无中心节点,客户端与redis节点直连,不需要中间proxy层.

客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

对于客户端来说请求的性能不会损失太多

缺点是:

分布式逻辑和存储模块耦合

对协议进行了较大的修改,对客户端不太友好

他和Codis也有点像,在集群内部,把所有的Key映射到了16384个Slot中,在客户端访问时,有各个节点,把请求转发。

Codis的架构

这幅图是Codis官方的架构图,个人觉得比较难看,但是也反应了Codis的架构,Codis可以对Redis分组,一个RedisGroup里有一个Master,和多个Slave,Redisclient可以直接访问Proxy。还有一个CodisHA的客户端。但是这幅图有些内容还没有体现出来, 于是我就画了一幅更丑的。

Codis的内部,有三个主要的模块, Router,Model,Redis。 Router负责将前端的请求转发给Redis, Model负责和ZK交互,保持数据一致性,这里的数据主要是Group配置,Proxy配置,Slot的配置。Redis模块负责和Redis交互,将前端的命令转发给Redis,并将结果返回。刚才说了Model在负责把Proxy的配置变化发送给ZK, ZK再变化同步到Codisclient。

好了,现在切换到这幅图。刚才的那副是Codis的一个骨架, 这里是细化到肉了,这幅图稍微好看点。首先说Router,这里负责和Client通信,建立session,通过Mapper来过滤所有的请求。Slots中封装了Redis的连接。 下面这块Redis封装了Decode和EncodeRedis协议的过程,这里值得提一下,Redis是有自己的标准协议的,在Redis之间的交互,Codis使用的就是标准协议,这块的代码大家有兴趣可以看一下。

Model模块是和ZK交互的对象,负责发送指令给客户端,并解析返回结果。后面也会给大家主要介绍这块内容。

Codis除了支持Zk以外还支持ETCD,ETCD也是个牛逼的中间件。ETCD是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写。

Zookeeper保存的一些配置信息

Proxy

Server

Slot

Slot 是一个逻辑概念,一共 1024 个,使用 crc32(key) % 1024 计算 Slot id,而且一个(或多个) Slot 属于一个 ServerGroup,1024 个 Slot 一起分用多个 ServerGroup 资源;

Action

从Codis中可以学习到什么?

Zookeeper的交互设计  ----- GO

Redis的交互设计   ------ GO

Jodis的交互设计  ------ Java

Go语言本身的设计  —— GO

参考资料

ZooKeeper开发手册

http://my.oschina.net/sundiontheway/blog/346498

作者访谈

http://www.open-open.com/lib/view/open1436360508098.html

codis 源码理解

http://www.nosa.me/2016/02/21/codis-%E6%BA%90%E7%A0%81%E7%90%86%E8%A7%A3/

Codis性能结果

https://github.com/CodisLabs/codis/blob/master/doc/benchmark.md

Codis的架构设计相关推荐

  1. 张小龙、周鸿祎、傅盛都认同的架构设计思维

    正文开始前,先花大量笔墨推荐几个我工作中常用的思考框架.实践框架,后续文章中会使用这几种思考框架作为工具来描述.拆解.分析问题.当然你也可以使用到其它工作内容中,掌握几种利器,比无头苍蝇样做事效率会高 ...

  2. 万字长文剖析架构设计全攻略(上)

    正文开始前,先花大量笔墨推荐几个我工作中常用的思考框架.实践框架,后续文章中会使用这几种思考框架作为工具来描述.拆解.分析问题.当然你也可以使用到其它工作内容中,掌握几种利器,比无头苍蝇样做事效率会高 ...

  3. AI中pass架构设计优化

    AI中pass架构设计优化 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,例如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠 ...

  4. NVIDIA Turing Architecture架构设计(下)

    NVIDIA Turing Architecture架构设计(下) GDDR6 内存子系统 随着显示分辨率不断提高,着色器功能和渲染技术变得更加复杂,内存带宽和大小在 GPU 性能中扮演着更大的角色. ...

  5. NVIDIA Turing Architecture架构设计(上)

    NVIDIA Turing Architecture架构设计(上) 在游戏市场持续增长和对更好的 3D 图形的永不满足的需求的推动下, NVIDIA ®已经将 GPU 发展成为许多计算密集型应用的世界 ...

  6. 最全面的缓存架构设计

    一.缓存技术和框架的重要性 互联网的一些高并发,高性能的项目和系统中,缓存技术是起着功不可没的作用.缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力 ...

  7. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  8. Asp.Net开发架构设计(二)

    上回说到,我们配置了一下UnityConfig层,在这个层中定义了一个IContainerAccessor的接口和一个返回IUnityContainer类型的方法,这个方法的主要作用就是把Servic ...

  9. web架构设计经验分享

    本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查 ...

最新文章

  1. 【C++】多线程与原子操作和无锁编程【五】
  2. 【转】目录 aspnet_client是什么?
  3. 人人都是架构师: 约束和原则
  4. 微型计算机硬件技术基础答案,计算机硬件技术基础_万晓冬_习题
  5. Angular开发遇到的一个错误消息 - Expected linebreak to be LF(和本地文件的换行设置有关)
  6. 2020年首届算法竞赛网络挑战赛直播讲解课程
  7. Android 可开关式顶部下拉view
  8. PP视频如何设置默认缓存个数
  9. c语言getchar_二级C语言试题刷题录
  10. [转]踏实从小事做起, 才能有大发展
  11. Linux下安装ActiveMQ
  12. Kafka 和 RocketMQ 底层存储之那些你不知道的事
  13. python判断英文字母_python判断字符串是否包含字母
  14. vs2012安装教程图文版
  15. Mac能连接手机热点却无法上网问题解决
  16. 1-65535字符集
  17. 拆一台微型计算机步骤,台式微型计算机拆装.doc
  18. idea 使用自动注解时候红色警告的消除办法
  19. js内存溢出和内存泄漏
  20. 高等数学(第七版)同济大学 习题12-8 个人解答

热门文章

  1. 【BATJ面试必会】JAVA面试到底需要掌握什么?【下】
  2. php sleep和wait区别,sleep()和wait()他们有什么区别?
  3. 忙里偷闲【mark】
  4. nextcloud+宝塔在阿里云服务器上搭建个人云存储盘(如何在服务器上搭建个人云盘)
  5. 算法创作 | 一元二次方程求解问题解决方法
  6. Plone学习笔记 ( by quqi99 )
  7. 重装系统后附加带区卷
  8. 计算广告及搜索广告简介
  9. 【iOS 安全相关】
  10. Pycharm如何打断点