支持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 集群的主要内容,如果未能解决你的问题,请参考以下文章

一致性协议Raft - 初稿

zookpeer 和 redis 集群内一致性协议 及 选举 对比

Nacos一致性协议 CP/AP/JRaft/Distro协议

链块技术 03期共识机制:RAFT

Consul安装部署(Windows单机Docker集群)

Consul安装部署(Windows单机Docker集群)