手撸golang 学ectd 手写raft协定13 小结

缘起

最近浏览 [云原生分布式存储基石:etcd深刻解析] (杜军 , 2019.1)
本系列笔记拟采纳golang练习之

raft分布式一致性算法

分布式存储系统通常会通过保护多个副原本进行容错,以进步零碎的可用性。这就引出了分布式存储系统的外围问题——如何保障多个正本的一致性?Raft算法把问题分解成了四个子问题:1. 首领选举(leader election)、2. 日志复制(log replication)、3. 安全性(safety)4. 成员关系变动(membership changes)这几个子问题。源码gitee地址:https://gitee.com/ioly/learning.gooop原文链接:https://my.oschina.net/ioly

指标

  • 依据raft协定,实现高可用分布式强统一的kv存储

小结

  • 累计投入业余时间约30工时,勉强写出一个可运行的"raft非残缺玩具实现"
  • 所得:

    • 根本理解raft协定及其外延细节
    • 翻新应用”事件驱动+读写拆散“模式组织简单状态对象的逻辑编排
  • 已实现的个性:

    • Raft状态机Leader,Candidate,Follower三种角色的转换
    • Leader的心跳,选举,再选举
    • Follower角色下,Proxy业务申请(kv操作)到Follower
    • kv日志的两阶段(append+commit)流传和长久化,间接用boltdb
    • kv数据的长久化,基于boltdb
  • 未实现的个性:

    • 应用WAL机制写kv日志(高性能)
    • kv日志两阶段流传的异步并发(高性能)
    • Leader为每个Follower保护一个日志队列(异步并发+加重慢Follower的影响)
  • 思考:

    • 尽管raft自身好了解,但落到代码,还是可能因为细节问题,导致产出是”未经实践验证的近似品“
    • 依照分层思维,划分三层来实现:

      • 先实现一个高可用的网格虚拟机,确保输出网格的每条指令,是严格有序序,且仅执行一次的
      • 基于该网格虚拟机,设计一套raft dsl,满足一致性的要求
      • 基于该raft状态机,增加业务解决接口
      • 嗯,这么说该”网格虚拟机+网格DSL“是分布式计算的终极杀器了

(raft系列 end)