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

老罗话编程 · · 503 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

手撸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操作)到当前Leader
    • kv日志的两阶段(append+commit)传播和持久化,直接用boltdb
    • kv数据的持久化,基于boltdb
  • 未实现的特性:
    • 使用WAL机制写kv日志(高性能)
    • kv日志两阶段传播的异步并发(高性能)
    • Leader为每个Follower维护一个日志队列(异步并发+减轻慢Follower的影响)
  • 思考:
    • 虽然raft本身好理解,但落到代码,还是可能因为细节问题,导致产出是”未经理论验证的近似品“
    • 按照分层思想,划分三层来实现:
      • 先实现一个高可用的网格虚拟机,确保输入网格的每条指令,是严格有序序,且仅执行一次的
      • 基于该网格虚拟机,设计一套raft dsl,满足一致性的要求
      • 基于该raft状态机,添加业务处理接口
      • 嗯,这么说该”网格虚拟机+网格DSL“是分布式计算的终极杀器了

(raft系列 end)


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:老罗话编程

查看原文:手撸golang 学ectd 手写raft协议13 小结

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

503 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传