支持redis 协议的强一致raft 集群
Posted 360基础架构组
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支持redis 协议的强一致raft 集群相关的知识,希望对你有一定的参考价值。
raftis
我们用floyd(我们实现的raft 库) 包装了一个支持redis 协议的强一致集群, 还是很方便的.
欢迎围观(点击阅读原文查看源代码)
https://github.com/Qihoo360/floyd/tree/master/floyd/example/redis
floyd 是360 基础架构组实现的支持raft 协议的 library. 目前已被采纳为 raft 官方推荐cpp 版本协议实现之一
Floyd是一个C++实现的Raft一致性协议库。
Raft是一个相对于Paxos更容易理解和工程实现的一致性算法;
Floyd是一个一致性库,可以很容易引入到各种项目;
Floyd支持集群节点之间的一致性操作,例如:Read/Write/Delete;
同时也支持非一致性的本地数据访问接口: DirtyRead/DirtyWrite;
以及查询、管理接口:GetLeader/GetServerStatus/set_log_level
用户
Floyd 目前应用在Zeppelin中,为其Meta集群提供一致性的存储;Zeppeli是一个大容量的分布式key-value存储;
陆续会有新的项目在使用;
我们为什么倾向于库,而不是一个服务?
当我们在有服务发现、协调和管理的需求时,ZooKeeper是一个很好的选择,但是有一定成本.
我们必须维护一套新的ZooKeeper的服务;
我们也必须使用其SDK,去和ZooKeeper服务交互;
我们认为,一个集成、单一的服务通常会比多个服务更加可控、简单. 所以,作为一个库来使用,能够简化整体的架构.
Floyd功能和API
API和具体使用
type | API | Status |
---|---|---|
一致性接口 | Read | 支持 |
一致性接口 | Write | 支持 |
一致性接口 | Delete | 支持 |
本地接口 | DirtyRead | 支持 |
本地接口 | DirtyWrite | 支持 |
查询 | GetLeader | 支持 |
查询 | GetServerStatus | 支持 |
Raft的功能特性
Language | Leader election + Log Replication | Membership Changes | Log Compaction |
---|---|---|---|
C++ | Yes | No | No |
以上是关于支持redis 协议的强一致raft 集群的主要内容,如果未能解决你的问题,请参考以下文章
zookpeer 和 redis 集群内一致性协议 及 选举 对比