您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    蚂蚁金服开源 SOFAJRaft:消费级 Java Raft 算法库(4)
    时间:2019-03-18 12:01 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    基本的思绪是 Leader 取一个比 election timeout 小的租期(最好小一个数量级),在租约期内不会发作选举,这就确保了 Leader 不会变,所以可以跳过 ReadIndex 的第二步,也就降低了延时。可以看到 Lease Read 的正确性和时间是挂钩的,因此时间的完成至关重要,假设时钟漂移严重,这套机制就会有成绩。

    完成方式:

    定时 heartbeat 取得少数派照应,确认 Leader 的有效性 (在 SOFAJRaft 中默许的 heartbeat 距离是 election timeout 的十分之一);

    在租约有效时间内,可以以为以后 Leader 是 Raft Group 内的独一有效 Leader,可疏忽 ReadIndex 中的 heartbeat 确认步骤(2);

    Leader 等候本人的形状机执行,直到 applyIndex 超过了 ReadIndex,这样就可以安全的提供 Linearizable Read 了 。

    在 SOFAJRaft 中发起一次线性分歧读央求的代码展现:

    // KV 存储完成线性分歧读 

    public void readFromQuorum(String key, AsyncContext asyncContext) { 

     // 央求 ID 作为央求上下文传入 

     byte[] reqContext = new byte[4]; 

     Bits.putInt(reqContext, 0, requestId.incrementAndGet()); 

     // 调用 readIndex 办法, 等候回调执行 

     this.node.readIndex(reqContext, new ReadIndexClosure() { 

     @Override 

     public void run(Status status, long index, byte[] reqCtx) { 

     if (status.isOk()) { 

     try { 

     // ReadIndexClosure 回调成功,可以从形状机读取最新数据前往 

     // 假设你的形状完成有版本概念,可以依据传入的日志 index 编号做读取 

     asyncContext.sendResponse(new ValueCommand(fsm.getValue(key))); 

     } catch (KeyNotFoundException e) { 

     asyncContext.sendResponse(GetCommandProcessor.createKeyNotFoundResponse()); 

     } 

     } else { 

     // 特定状况下,比如发作选举,该读央求将失败 

     asyncContext.sendResponse(new BooleanCommand(false, status.getErrorMsg())); 

     } 

     } 

     }); 

    运用场景

    Leader 选举;

    散布式锁效劳,比如 Zookeeper,在 SOFAJRaft 中的 RheaKV 模块提供了残缺的散布式锁完成;

    高牢靠的元信息管理,可直接基于 SOFAJRaft-RheaKV 存储;

    散布式存储系统,如散布式音讯队列、散布式文件系统、散布式块系统等等。

    运用案例

    RheaKV:基于 SOFAJRaft 完成的嵌入式、散布式、高可用、强分歧的 KV 存储类库。

    AntQ Streams QCoordinator:运用 SOFAJRaft 在 Coordinator 集群内做选举、运用 SOFAJRaft-RheaKV 做元信息存储等功用。

    Schema Registry:高牢靠 schema 管理效劳,相似 kafka schema registry,存储部分基于 SOFAJRaft-RheaKV。

    SOFA 效劳注册中心元信息管理模块:IP 数据信息注册,要求写数据到达各个节点分歧,并且在少数派节点挂掉时保证不影响数据正常存储。

    实际

    一、基于 SOFAJRaft 设计一个复杂的 KV Store

    二、基于 SOFAJRaft 的 RheaKV 的设计

    功用名词

    PD

    全局的中心总控节点,担任整个集群的调度,不需求自管理的集群可不启用 PD (一个 PD 可管理多个集群,基于 clusterId 隔离)。

    Store

    集群中的一个物理存储节点,一个 Store 包含一个或多个 Region。

    Region

    最小的 KV 数据单元,每个 Region 都有一个左闭右开的区间 [startKey, endKey), 可依据央求流量/负载/数据量大小等目的自动分裂以及自动正本搬迁。

    特点

    嵌入式

    强分歧性

    自驱动

    自诊断, 自优化, 自决策

    以上几点(尤其2、3) 基本都是依托于 SOFAJRaft 本身的功用来完成,详细引见请参考 SOFAJRaft 文档 。

    致谢

    感谢 braft、etcd、tikv 贡献了优秀的 Raft 完成,SOFAJRaft 受益良多。

    【编辑引荐】

    该如何选择最适宜你的开源框架?

    AWS 推出增强的 Elasticsearch 开源发行版

    我们总结了每个技术开发团队都会遇到的 4 个难题

    刚刚,Facebook把效劳27亿人的AI硬件系统开源了

    量子加密技术存在缺陷?专家:客观看待新技术

    (责任编辑:admin)