随笔分类 -  go

摘要:成员变更在一致性协议里稍复杂一些,由于不同的成员不可能在同一时刻从旧成员组切换至新成员组,所以可能出现两个不相交的majority,从而导致同一个term出现两个leader,进而导致同一个index的日志不一致,违反一致性协议。下图是个例子: raft作者提出了一种比较简单的方法,一次只增加或减少 阅读全文
posted @ 2017-07-16 15:23 吴镝 阅读(1930) 评论(0) 推荐(0)
摘要:leadership transfer可以把raft group中的leader身份转给其中一个follower。这个功能可以用来做负载均衡,比如可以把leader放在性能更好的机器或者离客户端更近的机器上。 对于一个大规模分布式系统来说,负载均衡非常重要。然而raft本身在选主方面必须要求新主包含 阅读全文
posted @ 2017-07-14 23:32 吴镝 阅读(1083) 评论(0) 推荐(0)
摘要:Linearizable Read通俗来讲,就是读请求需要读到最新的已经commit的数据,不会读到老数据。 对于使用raft协议来保证多副本强一致的系统中,读写请求都可以通过走一次raft协议来满足。然后,现实系统中,读请求通常会占很大比重,如果每次读请求都要走一次raft落盘,性能可想而知。所以 阅读全文
posted @ 2017-07-13 17:56 吴镝 阅读(4247) 评论(0) 推荐(0)
摘要:早在2013年11月份,在raft论文还只能在网上下载到草稿版时,我曾经写过一篇 "blog" 对其进行简要分析。4年过去了,各种raft协议的讲解铺天盖地,raft也确实得到了广泛的应用。其中最知名的应用莫过于etcd。etcd将raft协议本身实现为一个library,位于https://git 阅读全文
posted @ 2017-07-08 17:33 吴镝 阅读(2040) 评论(0) 推荐(0)
摘要:转载自:http://morsmachine.dk/go-schedulerIntroductionOne of the big features for Go 1.1 is the new scheduler, contributed by Dmitry Vyukov. The new scheduler has given a dramatic increase in performance for parallel Go programs and with nothing better to do, I figured I'd write something about it.M 阅读全文
posted @ 2013-11-18 14:24 吴镝 阅读(833) 评论(0) 推荐(0)
摘要:转载自:http://www.sizeofvoid.net/goroutine-under-the-hood/Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。1. 操作系统与运行库2. 并发与并行 (Concurrency and Parallelism)3. 线程的调度4. 并发编程框架5. goroutine1. 操作系统与运行库对 阅读全文
posted @ 2013-11-18 11:31 吴镝 阅读(1055) 评论(0) 推荐(0)