Codis架构

作者: 滩主 | 来源:发表于2018-11-09 11:10 被阅读0次

    介绍

    Redis丰富的数据结构、超高的性能和简单的协议,使其非常适合作为数据库的上游缓存层,不过受限于单点的内存容量,Codis是一个分布式redis解决方案

    Redis

    image.png

    Codis/Redis协议

    image.png

    集群架构

    codis采用一层无状态的proxy层,将分布式逻辑写在proxy上,底层的存储引擎还是Redis,数据的分布状态存储于zookeeper(etcd)中


    image.png

    读写分离

    Redis本身的replication模型是主从异步复制,在master上写成功后,在slave上是否能读到这个数据是没有保证的,而让业务方处理一致性的问题还是蛮麻烦的。而且Redis单点的性能还是蛮高的,不像mysql之类的真正的数据库,没有必要为了提升一点点读QPS而让业务方困惑

    数据迁移

    codis-config 管理工具中, 每次迁移任务的最小单位是 slot
    如: 将slot id 为 [0-511] 的slot的数据, 迁移到 server group 2上, –delay 参数表示每迁移一个 key 后 sleep 的毫秒数, 默认是 0, 用于限速.

    $ ../bin/codis-config slot migrate 0 511 2 --delay=10
    

    我们在 Codis/Redis 中添加了一些指令, 实现基于key的迁移, 如 SLOTSMGRT等 (命令列表), 每次会将特定 slot 一个随机的 key 发送给另外一个 codis redis 实例, 这个命令会确认对方已经接收, 同时删除本地的这个 k-v 键值, 返回这个 slot 的剩余 key 的数量, 整个操作是原子的.
    codis将所有的数据预分配为1024个slot,迁移的过程典型的二阶段提交
    1、在pre_migrate阶段,proxy如果收到这个slot的请求,会block住直到migrate状态了才开始处理.
    2、在migrate阶段,如果新的处理该slot的proxy接收到了该slot的请求,首先会同步一份该slot的数据过来,再返回给客户端.

    相关文章

      网友评论

        本文标题:Codis架构

        本文链接:https://www.haomeiwen.com/subject/pqvnxqtx.html