美文网首页
Codis架构与实现-个人学习总结

Codis架构与实现-个人学习总结

作者: x1wan | 来源:发表于2016-11-21 14:48 被阅读734次

    本博客主要用于个人学习总结,主要内容借助网络及作者的博客。

    1、Codis是什么?

    Codis是豌豆荚开源的基于redis的集群解决方案,redis引擎在2.8的基础上增加了slot的功能,采用proxy进行数据路由,用zk保存proxy节点信息和基于slot的路由信息。config server接收并处理集群的控制命令,部分服务采用go语言开发。

    2、架构图

    3、主要技术点

    (1)存储和分布式逻辑分离 (2)用户数据基于slot做切分 (3)zk维护元数据 (4)config server处理控制面命令 (5)proxy做数据路由

    4、负载均衡

    数据被hash到1024个slot上,采用crc32(key) % 1024方法。

    zk中保存相关的元数据。

    proxy上缓存元数据信息,并依据该信息路由数据到后端的redis上。

    扩缩容的时候slot会进行迁移,每次迁移会先通知proxy修改slot的状态。

    5、动态扩容

    (1)config-server首先向zk注册一个lock,发起迁移指令 pre_migrate slot_1 to group 2 给所有proxy

    (2)config-server 标记slot_1的状态为 migrate, 将slot_1的服务指向group 2

    (3)config-server不断向 group 1 发送migrate slot_1命令,每个命令将原子地迁移一个key

    (4)迁移过程中收到属于这个slot的命令,将先迁移这个key到group 2,然后在group 2上处理命令。

    (5)迁移完成标记slot_1状态为online,删除lock。

    6、与社区集群解决方案比较

    社区版:

    (1)P2P模型,性能好。

    (2)服务少,省虚机,成本低。

    (3)很多功能集成到redis里,实现复杂。

    (4)依赖smart client,现有服务升级困难。

    Codis版:

    (1)服务节点多,有性能和成本的问题。

    (2)分布式和存储引擎分离,架构清晰。

    (3)不需要smart client,升级容易。

    (4)故障处理需要人工介入。

    (5)迁移过程中数据访问需要与控制命令协调处理,没有很好的解耦控制和数据。

    7、总结

    分布式和存储引擎分离,控制流和数据流分离。

    相关文章

      网友评论

          本文标题:Codis架构与实现-个人学习总结

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