zoukankan      html  css  js  c++  java
  • etcd raft library

    https://github.com/coreos/etcd/tree/master/raft

    import "github.com/coreos/etcd/raft"

    ---------------------------------------------------------------------------

    raft是一个协议,一个节点集群可以维护一个复制状态机。状态机通过使用复制日志保持同步。有关Raft的更多详细信息,请参阅Diego Ongaro和John Ousterhout的“寻找可理解的一致性算法”(https://ramcloud.stanford.edu/raft.pdf)。

    这个raft库是稳定和功能齐全。截至2016年,它是生产中使用最广泛的raft库,每天服务数万个集群。它支持分布式系统,如etcd,Kubernetes,Docker Swarm,Cloud Foundry Diego,CockroachDB,TiDB,Project Calico,Flannel等等。

    大多数Raft实现具有单片设计,包括存储处理,消息序列化和网络传输。这个库只是通过实现核心筏算法来遵循简约的设计理念。这种极简主义获得了灵活性,确定性和性能。

    为了保持代码库的小而且灵活,库只实现了Raft算法;网络和磁盘IO都留给用户。库用户必须实现他们自己的传输层,以便通过电报在Raft对端之间传递消息。同样,用户必须实现自己的存储层来坚持木筏日志和状态。

    为了方便测试Raft库,其行为应该是确定性的。为了实现这个决定论,库将raft作为一个状态机来模拟。状态机将消息作为输入。消息可以是本地定时器更新,也可以是远程对等体发送的网络消息。状态机的输出是一个三元组{{Messages,[] LogEntries,NextState},它由一系列消息,日志条目和raft状态变化组成。对于状态相同的状态机,相同的状态机输入应始终生成相同的状态机输出。

    一个简单的示例应用程序raftexample也可以帮助说明如何在实践中使用这个包:https://github.com/coreos/etcd/tree/master/contrib/raftexample

    Feature

    这个raft实现是Raft协议的一个全功能实现。功能包括:

        领导选举
        日志复制
        日志压缩
        会员变更
        领导转移延期
        由领导者和追随者提供高效的线性化只读查询
            在处理只读查询之前,领导检查法定人数并绕过Raft日志
            追随者要求领导在处理只读查询之前获得安全的读取索引
        更高效的基于租约的可线性化只读查询由领导者和追随者提供服务
            领导者绕过Raft日志并在本地处理只读查询
            追随者要求领导在处理只读查询之前获得安全的读取索引
            这种方法依赖于筏组中所有机器的时钟

    这个raft执行还包括一些可选的增强功能:

        乐观流水线减少日志复制延迟
        日志复制的流量控制
        批处理Raft消息以减少同步的网络I / O调用
        批处理日志条目以减少磁盘同步I / O
        并行写入领导者的磁盘
        内部提案从追随者到领导者重定向
        领导失去法定人数时自动减少

    Notable Users

    cockroachdb一个可扩展,可生存,高度一致的SQL数据库
         dgraph可扩展,分布式,低延迟,高吞吐量图形数据库
         etcd一个分布式可靠的键值存储
         tikv由Rust和Raft提供支持的分布式事务密钥值数据库
         swarmkit用于编排任何规模的分布式系统的工具包。
         链核心软件,用于运营许可的多资产区块链网络

    Usage

    raft中的主要对象是一个节点。 使用raft.StartNode从头开始一个节点,或使用raft.RestartNode从某个初始状态启动一个节点。

    启动一个三节点群集

  • 相关阅读:
    Code::blocks 使用c++ long double类型出错
    数论四大定理
    线性基
    win7 下强制删除文件
    C++数组指针的引用
    学习方法
    MySQL的ON DUPLICATE KEY UPDATE用法
    MVCC
    RabbitMQ中的Connection 和 Channel
    myisam和innodb的比较
  • 原文地址:https://www.cnblogs.com/mhc-fly/p/8390531.html
Copyright © 2011-2022 走看看