分布式架构

大话Sheepdog 1 – 智能节点管理

4

Sheepdog是开源的分布式块存储项目,具有零配置、Thin-Provision、高可靠、智能节点管理、容量线性扩展、虚拟机感知(底层支持冷热迁移和快照、克隆等)、支持计算与存储混合架构的特点等,可扩展到上千级别的物理节点。开源软件如QEMU、Libvirt以及Openstack都很好的集成了对Sheepdog的支持。

本系列将手把手让读者体验Sheepdog的各种功能,并解释背后的工作机制和原理。Sheepdog目前只支持Linux的环境,对文件系统没有任何假设。本文以Ubuntu 12.04为背景,假设GIT、GCC、Autoconf以及Make等常见的编译环境已经配置好了。读者可以根据自己的环境微调命令。
(更多…)

Memcached VS Redis

7

sheepdog内部实现机制

1

简介:
Sheepdog[0]是由日本NTT实验室的MORITA Kazutaka专为虚拟化平台创立的分布式块存储开源项目, 于2009年开源[1].从2011年9月开始, 一些淘宝的同学加入了Sheepdog项目, 以及相关开源项目比如Corosync[2], Accord[3]的开发.

[0]http://www.osrg.net/sheepdog/
[1]http://lwn.net/Articles/357910/
[2]http://www.corosync.org
[3]http://www.osrg.net/accord/

Redis skip list结构分析

11

如何实现一个海量用户的实时排名系统?或许可以用mysql搞一个纠结的方案;但要是选择了redis,那绝对是既简单又优雅。Redis的zset本身就是一种支持排序的集合,而zset的实现,则使用了skip list数据结构。Skip list是一种多层次的有序链表,通过随机地选择层数来实现插入、查找和删除都是O(logn)的时间复杂度(和平衡树同样的效率,但实现比平衡树简单很多)。关于skip list的具体介绍可以参见William Pugh的论文:Skip Lists: A Probabilistic Alternative to Balanced Trees 。下面我们来分析一下redis中skip list的实现。
Redis中skip list主要有zskiplist和zskiplistNode两个数据结构:
(更多…)

Redis zipmap内存布局分析

11

Redis被称为key/value应用中的瑞士军刀,除了其丰富的数据结构支持,更重要的是高效的内存使用,分析源码可以发现作者使用每一个byte都精打细算。在hashtable实现中,Redis引入了zipmap数据结构,保证在hashtable刚创建以及元素较少时,用更少的内存来存储,同时对查询的效率也不会受太大的影响。下面就以源码和例子结合的方式来分析一下zipmap的内存布局。

先来看一下zipmap提供的和存储相关的3个API:
(更多…)

新人讨论二- Percolator中的两阶段提交协议分析

1

Percolator是Google使用的一款基于Bigtable的、支持事务的增量索引系统,以客户端库的形式提供给用户。使用Percolator后,从页面爬取到新数据到这些数据被用户可见之间的平均延迟被缩小100倍!从技术的角度看主要有两方面改进:
1. 能够增量地处理索引(Percolator之前Google使用MapReduce批量更新索引)
2. 在并发处理的过程中能够保持一些”不变性(invariants)”,如指向同一个页面的链接等。

Percolator基于Bigtable,在实现过程中充分利用了Bigtable的单行事务特性,在Bigtable提供的单行数据原子读写的基础上Percolator实现了跨行跨表的事务特性(ACID)。Percolator实现的事务具有如下特点:
(更多…)

OceanBase的变化

7

OceanBase面临的新挑战

  随着OceanBase(以下简称OB)在淘宝的应用越来越广泛,前端对数据的需求也提出了越来越严苛的要求。在应用系统和开发团队的配合下,给用户提供了很多额外的功能,给用户带来方便的同时,也给OB带来了很多的挑战。
  以淘宝的收藏夹应用为例,从4月份上线到现在,我们增加了2倍的数据表,数据量(包括数据条目和每日更新条目)是上线初期的4倍,访问量是上线初期的8倍以上。 (更多…)

memcache redundancy 机制分析及思考

21

设计和开发可以掌控客户端的分布式服务端程序是件幸事,可以把很多事情交给客户端来做,而且可以做的很优雅。角色决定命运,在互联网架构中,web server必须冲锋在前,注定要在多浏览器版本以及协议兼容性方面呕心沥血。但要是做了web server的backend,就会好很多,可以让服务端程序独善其身,分布式的功能特性都由客户端来支持和实现。memcache就是这样的设计模式。memcache是后台架构必备的利器,关于其原理及源码分析可以直接google之,在此不再多说。最近项目中要考虑冗余和容错的问题,就把memcache redundancy机制分析了一下,仅供大家参考。 (更多…)

Beanstalkd 一个高性能分布式内存队列系统

15

之前在微博上调查过大家正在使用的分布式内存队列系统,反馈有Memcacheq,FqueueRabbitMQ Beanstalkd以及linkedin的kafka。RabbitMQ使用比较广泛,Beanstalkd是后起之秀。Beanstalkd之于RabbitMQ,就好比Nginx之于Apache,Varnish之于Squid。后面在项目中使用Beanstalkd的过程中,更发现其简单、轻量级、高性能、易使用等特点,以及优先级、多队列、持久化、分布式容错、超时控制等特性。下面就简单介绍一下Beanstalkd,不足之处请大家指正。

———————————————–正文分割线————————————————-

设计思想

高性能离不开异步,异步离不开队列,而其内部都是Producer-Comsumer模式的原理。
(更多…)

新人讨论一:事务和两阶段提交

2
  • 1 事务的ACID

事务是保证数据库从一个一致性的状态永久地变成另外一个一致性状态的根本,其中,ACID是事务的基本特性。

A是Atomicity,原子性。一个事务往往涉及到许多的子操作,原子性则保证这些子操作要么都做,要么都不做,而不至于出现事务的部分操作成功,而另外一部分操作没有成功。如果事务在执行的过程中发生错误,那么数据库将回滚到事务发生之前的状态。比如银行的转账服务,这个事务的最终结果一定是:某个账户的余额增加了x,而另外一个账户的余额减少了x,或者两个账户的余额未发生变化。而不会出现其他情况。
(更多…)

Go to Top