随笔分类 -  分布式

摘要:成员变更在一致性协议里稍复杂一些,由于不同的成员不可能在同一时刻从旧成员组切换至新成员组,所以可能出现两个不相交的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)
摘要:本文提到的一些术语,比如Serializability和Linearizability,解释看Linearizability, Serializability and Strict Serializability。 本文中观点大部分都是参考了CockroachDB多篇官方blog,设计文档,代码以及 阅读全文
posted @ 2017-05-21 17:18 吴镝 阅读(4331) 评论(0) 推荐(0)
摘要:paxos 说multi paxos之前先简要说一下paxos paxos是在多个成员之间对某个值(提议)达成一致的一致性协议。这个值可以是任何东西。比如多个成员之间进行选主,那么这个值就是主的身份。在把multi paxos协议应用在日志同步中时,这个值就是一条日志。网上讲paxos的文章已经很多 阅读全文
posted @ 2016-05-12 21:59 吴镝 阅读(7259) 评论(2) 推荐(2)
摘要:physical clock 机器上的物理时钟,不同的机器在同一个时间点取到的physical clock不一样,之间会存在一定的误差,NTP可以用来控制这个误差,机器之间的时钟误差可以控制在几十ms以内。两个事件a和b,a在机器M1上physical clock为12点5分0秒6ms发生,b在机器 阅读全文
posted @ 2015-11-22 14:51 吴镝 阅读(5538) 评论(0) 推荐(1)
摘要:HBase对外暴露出来的是一个表格数据模型,如下图所示![](http://pic002.cnblogs.com/images/2012/176446/2012010621260722.jpg)rowkey应用程序可以自己设计。每一个Cell可以保存多个版本的数据,由timestamp标示版本。应用... 阅读全文
posted @ 2015-08-04 21:38 吴镝 阅读(1433) 评论(0) 推荐(0)
摘要:今天谈谈分布式事务的时序问题。在说这个问题之前首先说说这为什么是个问题。####单机场景对于数据库来说,读到已经commit的数据是最基本的要求。一般来说,为了性能,读写不互相阻塞,现在的数据库系统(Oracle,MySQL,OceanBase,Spanner,CockRoachDB,HBase)几... 阅读全文
posted @ 2015-03-30 19:24 吴镝 阅读(5513) 评论(0) 推荐(1)
摘要:F1是Google开发的分布式关系型数据库,主要服务于Google的广告系统。Google的广告系统以前使用MySQL,广告系统的用户经常需要使用复杂的query和join操作,这就需要设计shard规则时格外注意,尽量将相关数据shard到同一台MySQL上。扩容时对数据reshard时也需要尽量... 阅读全文
posted @ 2015-03-25 19:30 吴镝 阅读(18312) 评论(0) 推荐(0)
摘要:HDFS Append时packet的格式以及DataNode对block/checksum文件的处理HDFS的Block一般比较大,默认64MB/128MB,客户端给DataNode发数据实际上是以Packet的形式发送的,Packet一般只有64KB左右。Packet内部由分为一个个chunk,... 阅读全文
posted @ 2015-03-17 15:43 吴镝 阅读(1989) 评论(1) 推荐(0)
摘要:[HDFS-RAID](https://github.com/facebookarchive/hadoop-20/tree/master/src/contrib/raid) 是Facebook基于hadoop-20-append分支(第一代Hadoop)开发的raid方案,对HDFS的修改极少,主要... 阅读全文
posted @ 2015-03-13 23:55 吴镝 阅读(5603) 评论(2) 推荐(0)
摘要:Facebook在OSDI 2014上发表论文[f4: Facebook’s Warm BLOB Storage System](https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-muralidhar.pdf),这个... 阅读全文
posted @ 2015-02-13 21:37 吴镝 阅读(1767) 评论(1) 推荐(0)
摘要:最近迁移数据时需要执行大Scan,HBase集群经常碰到以下日志:```Exception in thread "main" org.apache.hadoop.hbase.DoNotRetryIOException: Failed after retry of OutOfOrderScannerN... 阅读全文
posted @ 2015-02-11 15:19 吴镝 阅读(3871) 评论(0) 推荐(0)
摘要:####存储选型Blob(binary large object)存储系统主要用来存储二进制的大对象,比如图片,视频。这样的数据不太适合存储在类LSM系统例如HBase中,原因在于这种数据尺寸相对较大,写入RegionServer的memstore后很快会触发region的flush,在磁盘上形成大... 阅读全文
posted @ 2015-02-10 15:37 吴镝 阅读(2559) 评论(0) 推荐(1)
摘要:HDFS目前存储文件的方案是将一个文件切分成多个Block进行存储,通常一个Block 64MB或者128MB,每个Block有多个副本(replica),每个副本作为一个整体存储在一个DataNode上,这种方法在增加可用性的同时也增加了存储成本。ErasureCode通过将M个数据block进行... 阅读全文
posted @ 2015-02-09 18:07 吴镝 阅读(4825) 评论(3) 推荐(0)
摘要:这篇分析一下Lease Recovery 和 Block Recoveryhdfs支持hflush后,需要保证hflush的数据被读到,datanode重启不能简单的丢弃文件的最后一个block,而是需要保留下hflush的数据。同时为了支持append,需要将已经finalized的block重新... 阅读全文
posted @ 2014-12-09 11:39 吴镝 阅读(7386) 评论(0) 推荐(1)
摘要:这篇分析一下namenode 写edit log的过程。关于namenode日志,集群做了如下配置``` dfs.nameservices sync Logical name for this new nameservice dfs.namenode.name.d... 阅读全文
posted @ 2014-12-07 11:38 吴镝 阅读(4701) 评论(0) 推荐(1)
摘要:HDFS的hflush,hsync和close有啥区别,分别做了什么hflush: 语义是保证flush的数据被新的reader读到,但是不保证数据被datanode持久化.hsync: 与hflush几乎一样,不同的是hsync保证数据被datanode持久化。close: 关闭文件.除了做到以上... 阅读全文
posted @ 2014-12-04 23:44 吴镝 阅读(7508) 评论(0) 推荐(0)
摘要:[上一篇](http://www.cnblogs.com/foxmailed/p/4137949.html)说了datanode端如何处理pipeline写请求的,这里主要看DFSClient。这里以append为例, write差不多。创建一个pipeline用于append操作的流程:FileS... 阅读全文
posted @ 2014-12-03 15:11 吴镝 阅读(2260) 评论(0) 推荐(0)