随笔分类 -  分布式

摘要:站在DataNode的视角,看看pipeline写的流程,本文不分析客户端部分,从客户端写数据之前拿到了3个可写的block位置说起。每个datanode会创建一个线程DataXceiverServer,接收上游过来的TCP连接,对于每个新建的TCP连接,都会创建一个叫做DataXceiver的线程... 阅读全文
posted @ 2014-12-02 17:00 吴镝 阅读(4163) 评论(0) 推荐(0)
摘要:##HBase Compaction策略RegionServer这种类LSM存储引擎需要不断的进行Compaction来减少磁盘上数据文件的个数和删除无用的数据从而保证读性能。RegionServer后台有一组负责flush region的线程(MemStoreFlusher),每次从flushQu... 阅读全文
posted @ 2014-09-19 17:37 吴镝 阅读(6772) 评论(0) 推荐(1)
摘要:###分裂策略不同的分裂策略的实现需要继承RegionSplitPolicy,主要实现两个方法:1. shouldSplit()表示是否需要分裂2. getSplitPoint()得到分裂点rowkey从 HBase 0.94之后,默认的分裂策略是IncreasingToUpperBoundRegi... 阅读全文
posted @ 2014-09-13 17:23 吴镝 阅读(5086) 评论(0) 推荐(0)
摘要:##HBase Scan流程分析HBase的读流程目前看来比较复杂,主要由于:* HBase的表数据分为多个层次,HRegion->HStore->[HFile,HFile,...,MemStore]* RegionServer的LSM-Like存储引擎,不断flush产生新的HFile,同时产生新... 阅读全文
posted @ 2014-09-05 18:00 吴镝 阅读(8779) 评论(0) 推荐(1)
摘要:HBase 从0.95开始引入了Snapshot,可以对table进行Snapshot,也可以Restore到Snapshot。Snapshot可以在线做,也可以离线做。Snapshot的实现不涉及到table实际数据的拷贝,仅仅拷贝一些元数据,比如组成table的region info,表的de... 阅读全文
posted @ 2014-08-15 14:35 吴镝 阅读(8772) 评论(0) 推荐(1)
摘要:HBase 可以根据当前集群的负载以region为单位进行rebalance。在HMaster中,后台会起一个线程定期检查是否需要进行rebalance,线程叫做BalancerChore。线程每隔hbase.balancer.period会定期执行 master.balance()函数,配置项默... 阅读全文
posted @ 2014-08-08 15:54 吴镝 阅读(9617) 评论(0) 推荐(1)
摘要:MVCC是实现高性能数据库的关键技术,主要为了读不影响写。几乎所有数据库系统都用这技术,比如Spanner,看这里。Percolator,看这里。当然还有mysql。本文说HBase的MVCC和0.98引入的新写线程模型。 HBase region server的存储模型类LSM,将随机写转换为顺... 阅读全文
posted @ 2014-08-08 11:48 吴镝 阅读(3216) 评论(0) 推荐(0)
摘要:Google为了解决网页索引的增量处理,以及维护数据表和索引表的一致性问题,基于BigTable实现了一个支持分布式事务的存储系统。这里重点讨论这个系统的分布式事务实现,不讨论percolator中为了支持增量计算而实现的Notifications机制。 该系统基于BigTable,支持snaps... 阅读全文
posted @ 2014-08-04 13:05 吴镝 阅读(9051) 评论(0) 推荐(2)
摘要:Spanner要满足的external consistency是指:后开始的事务一定可以看到先提交的事务的修改。所有事务的读写都加锁可以解决这个问题,缺点是性能较差。特别是对于一些workload中只读事务占比较大的系统来说不可接受。为了让只读事务不加任何锁,需要引入多版本。在单机系统中,维护一个递 阅读全文
posted @ 2014-07-25 21:41 吴镝 阅读(15828) 评论(3) 推荐(1)
摘要:Redis Cluster是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。一个Key到底属于哪个Slot由crc16(key) % 16384 决定。 关于负载均衡,集群的Redis Instance之间可以迁移数 阅读全文
posted @ 2014-04-08 19:54 吴镝 阅读(11952) 评论(0) 推荐(0)
摘要:twemproxy是twitter开源的redis/memcached 代理,数据分片提供取模,一致性哈希等手段,维护和后端server的长连接,自动踢除server,恢复server,提供专门的状态监控端口供外部工具获取状态监控信息。代码写的比较漂亮,学习了一些Nginx的东西,比如每个请求的处理分为多个阶段,IO模型方面,采用单线程收发包,基于epoll事件驱动模型。文档中提到的Zero Copy技术,通过将消息指针在3个队列之间流转实现比较巧妙。本文主要分析twemproxy的核心部分,即一个请求的从接收到最后发送响应给客户端的流程。一、大体流程 twemproxy后端支持多个serv. 阅读全文
posted @ 2014-04-08 14:00 吴镝 阅读(5923) 评论(0) 推荐(0)
摘要:一致性问题要求多个process对一个值达成一致。基于消息传递的分布式系统中,在不考虑消息篡改等拜占庭错误的情况下,Paxos可以解决在进程退出,消息延迟,丢失,重复等异常发生的环境中对某个值达成一致的问题。考虑Paxos最基本的形式:两个角色:Proposer和Acceptor,Proposer提... 阅读全文
posted @ 2014-01-19 11:36 吴镝 阅读(2259) 评论(1) 推荐(0)
摘要:UpdateServer(UPS) 是OceanBase 的写入单点,一个集群中只有一台UPS服务器,所有的写都写入到这台机器。OceanBase采用基于静动态数据分离的机制,静态数据存储在静态数据服务器ChunkServer(CS)磁盘上,动态数据存储在UPS的内存中,导致一次读请求需要将静态和动态数据合并才能得到完整的数据,从而读也要访问UPS。OceanBase作为一个支持事务的分布式关系型数据库,UPS是实现事务的核心组件。单独看UPS,它是一个内存数据库,存储模型类似于LSM,写入操作写入内存,持久化通过写操作日志来保证,宕机后通过回放操作日志恢复数据,同时将对磁盘的随机写转换成顺. 阅读全文
posted @ 2014-01-10 13:38 吴镝 阅读(1986) 评论(0) 推荐(0)
摘要:本文记录对原文:http://highlyscalable.wordpress.com/2012/09/18/distributed-algorithms-in-nosql-databases/中replication 技术的理解,同时参考http://www.cnblogs.com/foxmailed/archive/2011/12/25/2301267.html先定义两种一致性:1.读写一致性 从读写这个角度来看,数据库的基本目标就是最小化副本之间不一致的时间并且保证最终一致性。 最终一致性是一种弱的一致性,那么还有两种更强的一致性: 1. read-after-write 一致性:一个. 阅读全文
posted @ 2012-09-29 15:14 吴镝 阅读(953) 评论(0) 推荐(0)
摘要:转载自:http://www.infoq.com/cn/articles/cap-twelve-years-later-how-the-rules-have-changedCAP理论断言任何基于网络的数据共享系统,最多只能满足数据一致性、可用性、分区容忍性三要素中的两个要素。但是通过显式处理分区情形,系统设计师可以做到优化数据一致性和可用性,进而取得三者之间的平衡。自打引入CAP理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度。NoSQL运动也将CAP理论当作对抗传统关系型数据库的依据。CAP理论主张任何基于网络的数据共享系统,都最多只能拥有以 阅读全文
posted @ 2012-06-19 18:40 吴镝 阅读(454) 评论(0) 推荐(0)
摘要:转自:http://coolshell.cn/articles/7270.html全文译自墙外文章“NoSQL Data Modeling Techniques”,译得不好,还请见谅。这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉。我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干好,NoSQL只干某一种事,但是牺牲了很多别的东西。总体来说,我觉得NoSQL更适合做Cache。下面是正文——NoSQL 数据库经常被用作很多非功能性的地方,如,扩展性,性能和一致性的地方。这些NoSQL的特性在理论和实践中都正在被大众广泛地研究着,研究的热点正是那些和性能分布式相关的非功能 阅读全文
posted @ 2012-05-28 07:58 吴镝 阅读(410) 评论(0) 推荐(0)
摘要:随着大数据时代的到来和云计算的不断发展,作为云计算最基础的设施存储产品也越来越多,开源分布式存储系统有BigTable-like系统HBase,dynamo-like系统Cassandra,voldemort,Riak,淘宝开源的OceanBase等。当然还有一些未开源系统如Yahoo! 的PNUTS,Google的BigTable等。没有一种系统能够在所有的workload下都是最合适的。各个系统都会作出一些tradeoff来最大化的适应目标应用的workload。所以这就产生了一个问题,应用开发中在进行存储系统选型的时候,哪个系统最合适?Yahoo! Cloud Serving Benc. 阅读全文
posted @ 2012-02-29 21:21 吴镝 阅读(5185) 评论(0) 推荐(0)
摘要:原文:http://blog.csdn.net/kanghua/article/details/7232191谁来拯救云计算— 云计算的技术路线探讨 BY 康华引言当前的“云计算”一词已经被神话,似乎快成了放之四海皆准的时髦真理,就好比当初言必称“希腊”一般,表面光芒四射,但实际上却无比教条、且越来越令人生厌。作为“云计算”的一个普通开发者和是推广者,很有必要通过亲身实践,以正视听,希望能让后来者(云计算系统的开发者)少走弯路——有所为、有所不为。前言我们所要谈论的不是商业领袖们所热衷的云计算概念、云计算市场,而是讨论技术人员眼中云计算具体形态和切实的实现办法。我们将从需求分析入手、进而讨论设 阅读全文
posted @ 2012-02-07 20:12 吴镝 阅读(281) 评论(0) 推荐(0)
摘要:Lamport's Logical Clocks为了同步logical clocks,Lamport 定义了一个关系叫做happens-before.记作 ->a->b意味着所有的进程都agree事件a发生在事件b之前。在两种情况下,可以很容易的得到这个关系:1 如果事件a和事件b是同一个进程中的并... 阅读全文
posted @ 2012-01-11 20:32 吴镝 阅读(4227) 评论(0) 推荐(0)
摘要:转载自:http://hi.baidu.com/quest2run/blog/item/38e1328e3c7a5404b21bba6e.htmlAmazon'sDynamo 中文原著:Werner Vogels 翻译:quest.run(翻译本文,旨在讨论NoSQL时会有一个共同的Terminology,对于要实现NoSQL方案的同学,建议啃啃原文,因为很多术语在翻译成中文后语义差异很大,如quorum, replica/replication, read-repair, anti-entropy, partition/partitioning/networkpartition, h 阅读全文
posted @ 2012-01-11 00:10 吴镝 阅读(3342) 评论(0) 推荐(0)