随笔分类 - 系统
摘要:本文提到的一些术语,比如Serializability和Linearizability,解释看Linearizability, Serializability and Strict Serializability。 本文中观点大部分都是参考了CockroachDB多篇官方blog,设计文档,代码以及
阅读全文
摘要:这篇文章是对知乎上 "如何自己实现一个关系型数据库" 的一个尝试性回答,后续会不断更新。 对外数据模型为关系型数据库,内部的实现主要分成两大类,一类是disk based,比如mysql,postgres,一类是memory based,后者包括MemSQL,SAP HAHA,OceanBase。这
阅读全文
摘要:今天谈谈分布式事务的时序问题。在说这个问题之前首先说说这为什么是个问题。####单机场景对于数据库来说,读到已经commit的数据是最基本的要求。一般来说,为了性能,读写不互相阻塞,现在的数据库系统(Oracle,MySQL,OceanBase,Spanner,CockRoachDB,HBase)几...
阅读全文
摘要:F1是Google开发的分布式关系型数据库,主要服务于Google的广告系统。Google的广告系统以前使用MySQL,广告系统的用户经常需要使用复杂的query和join操作,这就需要设计shard规则时格外注意,尽量将相关数据shard到同一台MySQL上。扩容时对数据reshard时也需要尽量...
阅读全文
摘要:HDFS Append时packet的格式以及DataNode对block/checksum文件的处理HDFS的Block一般比较大,默认64MB/128MB,客户端给DataNode发数据实际上是以Packet的形式发送的,Packet一般只有64KB左右。Packet内部由分为一个个chunk,...
阅读全文
摘要:[HDFS-RAID](https://github.com/facebookarchive/hadoop-20/tree/master/src/contrib/raid) 是Facebook基于hadoop-20-append分支(第一代Hadoop)开发的raid方案,对HDFS的修改极少,主要...
阅读全文
摘要:Facebook在OSDI 2014上发表论文[f4: Facebook’s Warm BLOB Storage System](https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-muralidhar.pdf),这个...
阅读全文
摘要:####存储选型Blob(binary large object)存储系统主要用来存储二进制的大对象,比如图片,视频。这样的数据不太适合存储在类LSM系统例如HBase中,原因在于这种数据尺寸相对较大,写入RegionServer的memstore后很快会触发region的flush,在磁盘上形成大...
阅读全文
摘要:HDFS目前存储文件的方案是将一个文件切分成多个Block进行存储,通常一个Block 64MB或者128MB,每个Block有多个副本(replica),每个副本作为一个整体存储在一个DataNode上,这种方法在增加可用性的同时也增加了存储成本。ErasureCode通过将M个数据block进行...
阅读全文
摘要:[上一篇](http://www.cnblogs.com/foxmailed/p/4137949.html)说了datanode端如何处理pipeline写请求的,这里主要看DFSClient。这里以append为例, write差不多。创建一个pipeline用于append操作的流程:FileS...
阅读全文
摘要:HBase 可以根据当前集群的负载以region为单位进行rebalance。在HMaster中,后台会起一个线程定期检查是否需要进行rebalance,线程叫做BalancerChore。线程每隔hbase.balancer.period会定期执行 master.balance()函数,配置项默...
阅读全文
摘要:Google为了解决网页索引的增量处理,以及维护数据表和索引表的一致性问题,基于BigTable实现了一个支持分布式事务的存储系统。这里重点讨论这个系统的分布式事务实现,不讨论percolator中为了支持增量计算而实现的Notifications机制。 该系统基于BigTable,支持snaps...
阅读全文
摘要:Spanner要满足的external consistency是指:后开始的事务一定可以看到先提交的事务的修改。所有事务的读写都加锁可以解决这个问题,缺点是性能较差。特别是对于一些workload中只读事务占比较大的系统来说不可接受。为了让只读事务不加任何锁,需要引入多版本。在单机系统中,维护一个递
阅读全文
摘要:线程是内核对外提供的服务,应用程序可以通过系统调用让内核启动线程,由内核来负责线程调度和切换。线程在等待IO操作时线程变为unrunnable状态会触发上下文切换。现代操作系统一般都采用抢占式调度,上下文切换一般发生在时钟中断和系统调用返回前,调度器计算当前线程的时间片,如果需要切换就从运行队列中选出一个目标线程,保存当前线程的环境,并且恢复目标线程的运行环境,最典型的就是切换ESP指向目标线程内核堆栈,将EIP指向目标线程上次被调度出时的指令地址。 协程也叫用户态线程,协程之间的切换发生在用户态。在用户态没有时钟中断,系统调用等机制,那么协程切换由什么触发?调度器将控制权交给某个协程后,..
阅读全文
摘要:OceanBase 0.4的UpdateServer存储引擎使用了一棵可以多线程并发修改的BTree,读写不冲突,由颜然开发。线上运行稳定。UpdateServer存储引擎采用类leveldb的方式,最近的更新操作都写入内存中的一个活跃memtable,当活跃memtable占用内存达到某个阈值时,...
阅读全文
摘要:转载自: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
阅读全文
摘要:转载自:http://www.sizeofvoid.net/goroutine-under-the-hood/Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。1. 操作系统与运行库2. 并发与并行 (Concurrency and Parallelism)3. 线程的调度4. 并发编程框架5. goroutine1. 操作系统与运行库对
阅读全文
摘要:转载自:http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.htmlNow that we have theC10K concurrent connection problemlicked, how do we level up and support 10 million concurrent connections? Impossible you say. Nope, systems right now are delivering 10
阅读全文
摘要:本文是在Linux wudi-VirtualBox 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU/Linux上面试验的,32bit cpu,32 bit os
阅读全文
摘要:转自:http://highscalability.com/blog/2012/5/16/big-list-of-20-common-bottlenecks.htmlBig List Of 20 CommonBottlenecksWEDNESDAY, MAY 16, 2012 AT 9:15AMInZen And The Art Of Scaling - A Koan And Epigram Approach,Russell Sullivanoffered an interesting conjecture: there are 20 classic bottlenecks. This sou
阅读全文
浙公网安备 33010602011771号