分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无复本、数据存于哪个站点以及事务在哪个站点上执行等。
Hadoop
Google的伟大很大程度上得益于其强大的数据存储和计算能力,GFS和Bigtable使得其基本摆脱了昂贵的人力运维,并节省了机器资源;MapReduce使其可以很快看到各种搜索策略试验的效果。鉴于此,国内外出现了很多的模仿者,它们都是所谓的“高科技”企业,且往往还打上“云计算”的标签。从头到尾实现一套Google的存储/计算/查询系统是极其复杂的,也只有寥寥无几的几个巨头可以做到,Hadoop做为一种开源的简化实现,帮了很多科技公司的大忙。前些时候,Yahoo将Hadoop的创始人收于麾下,使得Hadoop完成华丽大转身,性能实现了一个飞跃式提升。
Hadoop主要包括HDFS(分布式文件系统,对应GFS),MapReduce(分布式计算系统)和HBase(分布式查询系统,对应Bigtable),其中以HDFS和MapReduce较为成熟。另外,Hadoop还包括一些辅助系统,如分布式锁服务ZooKeeper,对应Google Chubby。这一套系统的设计目标如下:
1. 简化运维:在大规模集群中,机器宕机,网络异常,磁盘错都属于正常现象,因此错误检查,自动恢复是核心架构目标。Google的解决方案就已经做到了机器随时加入/离开集群。
2. 高吞吐量:高吞吐量和低延迟是两个矛盾的目标,Hadoop优先追求高吞吐量,设计和实现中采用了小操作合并,基于操作日志的更新等提高吞吐量的技术。
3. 节省机器成本:Hadoop鼓励部署时利用大容量的廉价机器(性价比高但是机器故障概率大),数据的存储和服务也分为HDFS和HBase两个层次,从而最大限制地利用机器资源。
4. 采用单Master的设计:单Master的设计极大地简化了系统的设计和实现,由此带来了机器规模限制和单点失效问题。对于机器规模问题,由于Hadoop是数据/计算密集型系统,而不是元数据密集型系统,单Master设计的单个集群可以支持成千上万台机器,对于现在的几乎所有应用都不成问题;而单点失效问题可以通过分布式锁服务或其它机制有效地解决。
Google的其它模仿者包括,Microsoft dyrad(模范Google MapReduce),Hypertable(Hadoop HBase开发团队核心成员开始的一个开源项目,C++实现的Bigtable)。Google的解决方案不是万能的,然而相对我们普通人已经是几乎不可逾越了。Hadoop做为Google的这个模型的简化实现,有很多不足,这里先列出几点,以后将通过阅读Hadoop源代码和论文逐渐展开分析。Hadoop的几个明显缺点如下:
1. 采用Java实现。Java的IO处理虽然没有性能瓶颈,但是对于CPU密集型的任务是一个噩耗。这点可以通过对比HBase和Hypertable两个开源的Bigtable实现来做初步的验证。
2. 开源项目。开源本身是一柄双刃剑,它方便了大多数人,但是对于一个有一定规模的公司,项目发展方向的把握,技术保密,技术支持等都是采用Hadoop这种开源项目必须考虑的问题。另外,Hadoop作为一个比较新的项目,性能和稳定性的提升还需要一定时间。
3. (待续)
转载:http://blog.csdn.net/architects/article/details/3931027
hypertable介绍-1
一 Hypertable 是什么:
Hypertable 是一个正在进行中的开源项目,以google的bigtable论文为基础指导,使用c++语言实现。目的是为了解决大并发,大数据量的数据库需求。目前 只支持最基本的查询功能,对于事物,关联查询等都不支持。对单条查询的响应时间可能也不如传统数据库(要看数据量,量越大,对hypertable越有 力)。好处是,可以处理大量并发请求,和管理大量数据。可扩缩性好,扩容只需要增加集群中的机器就ok了。任何节点失效,既不会造成系统瘫痪也不会丢失数 据。在集群节点足够的情况下,并发量和数据量对性能基本没有影响。
注意:Hypertable不是关系数据库。而且它对稀疏数据是只存储其有效部分的。举个例子来说,假设一个表有10列。表中的一条记录,只有第三列有 值。那么实际上只有第三列被存储了,无值的列没有保留空位。这些特点使得 Hypertable 在使用的时候与关系数据库不同。