字节跳动自研强一致在线 KV &表格存储实践 - 下篇
本文转载自微信公众号“字节跳动技术团队” 架构实践专栏,原文链接:
字节跳动自研强一致在线 KV &表格存储实践 - 上篇
本文转载自微信公众号“字节跳动技术团队” 架构实践专栏,原文链接:字节跳动自研强一致在线 KV &表格存储实践 - 上篇团队缺人,有意者私聊或者发送简历到 wudi.rd at
Spanner的分布式事务实现
Spanner要满足的externalconsistency是指:后开始的事务一定可以看到先提交的事务的修改。所有事务的读写都加锁可以解决这个问题,缺点是性能较差。特别是对于一些workload中只读事务占比较大的系统来说不可接受。为了让只读事务不加任何锁,需要引入多版本。在单机系统中,维护一个递增
使用multi-paxos实现日志同步应用
paxos说multi-paxos之前先简要说一下paxospaxos是在多个成员之间对某个值(提议)达成一致的一致性协议。这个值可以是任何东西。比如多个成员之间进行选主,那么这个值就是主的身份。在把multi-paxos协议应用在日志同步中时,这个值就是一条日志。网上讲paxos的文章已经很多了,
Linearizability, Serializability and Strict Serializability
这几个概念比较容易混淆,原因是Serializability是数据库领域的概念,而Linearizability是分布式系统,并发编程领域的东西,在这个分布式SQL时代,自然Linearizability和Serializability会经常一起出现。Serializability:数据库领域的AC
详解CockroachDB事务处理系统
本文提到的一些术语,比如Serializability和Linearizability,解释看Linearizability,SerializabilityandStrictSerializability。本文中观点大部分都是参考了CockroachDB多篇官方blog,设计文档,代码以及相关资料,
etcd raft library设计原理和使用
早在2013年11月份,在raft论文还只能在网上下载到草稿版时,我曾经写过一篇blog对其进行简要分析。4年过去了,各种raft协议的讲解铺天盖地,raft也确实得到了广泛的应用。其中最知名的应用莫过于etcd。etcd将raft协议本身实现为一个library,位于https://github.
etcd raft如何实现Linearizable Read
更新:经@我做分布式系统提醒,为了防止staleread,leader需要首先check自己是否在当前termcommit过entry,这也是raft小论文中5.4节Safety中明确提到的,需要注意的事,这一步既为了防止staleread,也为了防止脏读(没有commit的数据)。代码如下:ifr
etcd raft如何实现leadership transfer
leadershiptransfer可以把raftgroup中的leader身份转给其中一个follower。这个功能可以用来做负载均衡,比如可以把leader放在性能更好的机器或者离客户端更近的机器上。对于一个大规模分布式系统来说,负载均衡非常重要。然而raft本身在选主方面必须要求新主包含所有的
etcd raft如何实现成员变更
成员变更在一致性协议里稍复杂一些,由于不同的成员不可能在同一时刻从旧成员组切换至新成员组,所以可能出现两个不相交的majority,从而导致同一个term出现两个leader,进而导致同一个index的日志不一致,违反一致性协议。下图是个例子:raft作者提出了一种比较简单的方法,一次只增加或减少一