分布式系统浅析

      应一个朋友的承诺,整理一下当前业界存在的几种优秀的分布式系统。特别对淘宝的后台系统做了一些分析,看看在未来的几年,symantec能够在未来的云计算,云存储的浪潮中,机会点在哪里? 当然,这里主要指的是技术切入点.

一  眼下业界存在的几种分布式系统

Company using Distributed Filesystem Master Node (Y/N)
Google GFS&Bigtable Y
Amazon Dynamo N
Microsoft Azure Y
Yahoo PNUTS Y

有中心节点的分布式架构:

无中心节点的分布式系统架构:

     眼下对数据訪问的几大问题: 高吞吐,高并发,低延迟

几个文件系统的分析:

GFS&Bigtable

GFS主要有八个特点:

    1  大文件和大数据块:数据文件的大小普遍在GB级别,并且其每一个数据块默认大小为64MB,这样做的优点是降低了元数据的大小,从而能使Master节点能够非常方便地将元数据都放置在内存中以提升訪问效率。

    2  操作以加入为主:文件非常少会被删减或者覆盖,通常仅仅是进行加入或者读取操作,这样能充分考虑到硬盘线性吞吐量大,但随机读写慢的特点。

    3  支持容错:首先,尽管当时为了设计方便,採用了单Master的方案,可是整个系统会保证Master节点会有其相相应的替身(Shadow),以便于当Master节点出现故障

    4  时进行切换。其次,在Chunk层,GFS已经在设计上将节点失败视为常态,所以能非常好地处理Chunk节点失效的问题。

    5  高吞吐量:尽管以单个节点来看,GFS的性能不管是从吞吐量还是延迟都非常普通,但因为其支持上千的节点,所以总的数据吞吐量是非常惊人的。

    6  保护数据:文件被切割成固定尺寸的数据块以便于保存,并且每一个数据块都会被系统至少复制三份。

    7  扩展能力强:因为元数据偏小,使得一个Master节点能控制和管理上千个存数据的Chunk节点。

    8  支持压缩:对于那些稍旧的文件,能够通过对它进行压缩,来节省硬盘空间,并且压缩率非常惊人,有时甚至接近90%。

    9  基于用户空间:GFS主要执行于系统的用户空间(User Time),尽管在效率方面,用户空间比内核空间略低,可是更便于开发和測试,还有,就是能更好利用Linux的自带的一些POSIX API。 

      因为GFS主要是为了存储海量搜索数据而设计的,所以它在吞吐量(Throughput)和伸缩性(Scalability)这双方面表现非常优异,可谓业界的“翘楚”,可是因为其主要以64MB数据块形式存储,所以在随机訪问方面速度并不优秀,尽管这点可谓是它的“软肋”,可是这本身也是其当初为了吞吐量和伸缩性所做的权衡。

 

二  淘宝分布式数据服务系统的分析和思考

三  symantec的机会点

未来几年中,symantec做为业界率先的软件提供商,机会点在哪里?

这里面有两关,必须过,一个是数据安全性,一个是收费模式(事实上就是商业模式)

数据安全性,能够用一个比喻来完毕,非常早曾经,才出现银行这个概念,可是在美国西部,银行常常被打劫,大家的钱都被抢走。可是随着银行的安全的提高,如今,大家都已经非常喜欢的把钱放入银行。通过这个比喻,我们能够看到,事实上,一方面,我们确实要加强云端的数据安全性,不能再传输以及存储计算过程中被偷窥,篡改,和丢失。另外一个,须要培养客户对云端的信心,这个就须要比較长的时间了。

安全软件,无疑是symantec的强项。在云端,详细怎样保护数据,可能又须要非常长的一个篇幅来探讨这个问题了。我相信symantec在这个方向是,是肯定大有作为的。

再看一看商业模式的问题,早在2002年,沃达丰就已经有过这样的概念的提出,极力希望能够将云设备挂在运营商的后端,然后向前端提供各种服务。也就比較相似亚马逊的EC2,PAAS。可是,关键问题来了,没有找到盈利点。这个游戏须要全部人得到优点,才可能玩的下去。因此,这个时候须要一个比較好的游戏规则。

因此,我们能够看到:运营商提供的是接入云端的网络,设备商提供的是大量的计算 存储和网络资源,而symantec可继续在软件上面大作文章。比方:帮助淘宝等 完毕底层软件的构筑(与SSD裸设备直接读写,去掉文件系统那一层,速度能够提高5-6倍。业界成功的有百度的MySQL在SSD上的应用,通过改动MySQL存储引擎,实现了MySQL Flashcache的功能,通过软件与硬件结合的方式,实现了SSD性能的最大化利用,在SSD应用的方面,百度走在了国内同行的前面。) ,完毕统一的平台管理

最后就是接入软件的驾驭:主要是浏览器     以及   client与云端的通信软件

经过这一系列的分析,我们能够看到,不管是哪一种分布式系统,都是以应用为中心,环绕它展开:便有了数据可用性,数据安全性,数据的读写效率,以及方便的管理,自己主动化的



References:

Key Value 数据模型:

Key-value这样的数据模型在结构方面和传统的关系型相比較简单,有点相似常见的HashTable,一个Key相应一个Value,可是其能提供非常快的查询速度、大的数据存放量和高并发地操作,并非常适合通过主键(Key)来对数据进行查询和改动等操作,尽管不支持复杂的操作,可是能够通过上层的开发来弥补这个缺陷。

http://forchenyun.javaeye.com/blog/744935

http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandra/



EAV 数据模型: Entity – Attribute – Value 的缩写,是数据库模型的一种,使用eav建模的优点是能够动态为数据模型添加或移除属性。比方: 最早用于医学用途,医生在就诊时须要记录非常多病人的參数,如体温,年龄,过敏药等情况,而这些參数并非每一个病人都须要记录的。

http://en.wikipedia.org/wiki/Entity-attribute-value_model



ER数据模型: 数据库模型,数据之间的relation



NoSQL(非关系型的数据库): 随着互联网web2.0站点的兴起,传统的关系数据库在应付web2.0站点,特别是超大规模和高并发的SNS类型的web2.0纯动态站点已经显得力不从心,暴露了非常多难以克服的问题,而非关系型的数据库则因为其本身的特点得到了非常迅速的发展。

1、High performance - 对数据库高并发读写的需求

     web2.0站点要依据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,可是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。事实上对于普通的BBS站点,往往也存在对高并发写请求的需求。

2、Huge Storage - 对海量数据的高效率存储和訪问的需求

对于大型的SNS站点,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再比如大型web站点的用户登录系统,比如腾讯,盛大,动辄数以亿计的帐号,关系数据库也非常难应付。

3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求

      在基于web的架构其中,数据库是最难进行横向扩展的,当一个应用系统的用户量和訪问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过加入很多其它的硬件和服务节点来扩展性能和负载能力。对于非常多须要提供24小时不间断服务的站点来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往须要停机维护和数据迁移,为什么数据库不能通过不断的加入服务器节点来实现扩展呢?

如今主流的NoSQL数据库有BigTable、HBase、Cassandra、SimpleDB、CouchDB、MongoDB和Redis等。



CAP理论:

2000年,Eric Brewer教授在ACM分布式计算年会上指出了著名的CAP理论

Brewer, E. A. 2000. Towards robust distributed systems. In Proceedings of the 19th Annual ACM Symposium on Principles of Distributed Computing (July 16-19, Portland, Oregon)

即分布式系统不可能满足一致性(C: Consistency),可用性(A: Availability)和分区容错性(P: Tolerance of network Partition)这三个需求。

大约两年后,Seth Gilbert 和 Nancy lynch两人证明了CAP理论的正确性:

Gilbert , S., Lynch, N. 2002. Brewer‘s conjecture and the feasibility of consistent, available, partition-tolerant Web services. ACM SIGACT News 33(2)

尽管关系型数据库已经在业界的数据存储方面占领不可动摇的地位,可是因为其天生的几个限制,比方扩展困难、读写慢、成本高和有限的支撑容量等,使其非常难满足上面这几个需求。


时间: 2024-11-03 21:17:11

分布式系统浅析的相关文章

分布式系统浅析及学习路线

前言 昨天夜里,突然冒出来的想法,应该有规划性地学习分布式系统,带着目的及问题去学习.结合从寒假期间看的,大数据及分布式文章中的知识,加之自己的思考及想法,写下了这篇文章. 由于笔者对分布式系统研究水平尚处入门,文章着笔较浅,并希望此文能抛砖引玉,同时欢迎读者勘误及指教. 从单机到分布式 其实从宏观上看,单个机器的处理机,就是一个简单的模型"输入->处理->输出",把这个模型看做计算节点(compute node). 当单个计算节点,无法满足海量数据的高效率计算时,就需要引

分布式系统缓存设计浅析

1. 分布式缓存面临比较大的三个问题: (1) 数据一致性. 在分布式系统这点显得尤为重要,主要原因有三点: 缓存系统与底层数据的一致性.这点在底层系统是“可读可写”时,写得尤为重要 有继承关系的缓存之间的一致性.为了尽量提高缓存命中率,缓存也是分层:全局缓存,二级缓存.他们是存在继承关系的.全局缓存可以有二级缓存来组成. 多个缓存副本之间的一致性.为了保证系统的高可用性,缓存系统背后往往会接两套存储系统(如memcache,redis等),以上的ppt也主要是讲这方面的内容. (2)缓存雪崩

浅析分布式系统

作者:wadehan,腾讯后台开发高级工程师 本文转载自 腾讯云技术社区--腾云阁 https://www.qcloud.com/community. WeTest导读 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ.微信.淘宝.那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念. 承载量是分布式系统存在的原因 当一个互联网业务获得大众欢迎的时候,最显著碰到的技

分布式系统事务 浅析

谈谈本人结合实际,对分布式系统事务的应用与理解.     我们在架构系统时,通常会做N层,分层的意义在于系统结构更清晰,易于维护,易于扩展等.我将拿四层结构举例,谈谈对分布式系统事务的实际应用.     首先,系统四层做如下定义:模型层,数据层,业务层,服务层.     然后,阐述四层的意义:               模型层:作为ORM的Object,不作详细说明               数据层:访问具体DB,实现SQL执行               业务层:实现简单,独立业务    

zookeeper技术浅析

Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zookeeper,而是zookeeper到底有哪些实际的运用,哪些类型的应用能发挥zookeeper的优势,最后谈谈zookeeper对分布式网站架构能产生怎样的作用. Zookeeper是针对大型分布式系统的高可靠的协调系统.由这个定义我们知道zookeeper是个协调系统,作用的对象是分布式系统.

浅析 Bigtable 和 LevelDB 的实现

在 2006 年的 OSDI 上,Google 发布了名为 Bigtable: A Distributed Storage System for Structured Data 的论文,其中描述了一个用于管理结构化数据的分布式存储系统 - Bigtable 的数据模型.接口以及实现等内容. 本文会先对 Bigtable 一文中描述的分布式存储系统进行简单的描述,然后对 Google 开源的 KV 存储数据库 LevelDB 进行分析:LevelDB 可以理解为单点的 Bigtable 的系统,虽

干货:分布式系统详解

先讲个黑色笑话: 半年前,一个谁也没见过的日本浪人推出的理财产品突然在七侠镇火爆起来,据说买上点屯着,不出几月就能把同福客栈,甚至龙门镖局都盘下.我们家小六的七舅老爷,卖掉祖宅也嚷嚷着要 all in.我觉得这事吧很是蹊跷,好歹也是自家人嘛,不能让老人家上当受骗 -- 所以 - 放着我来.我用我无双的智慧,和堪比丞相的三寸不烂之舌给七舅老爷拦下来,让他打消了念头.没出半年,小六七舅老爷全家就和我们斩了联系,死生不复相见. – 摘自<无双日记> 有朋友问,那做技术的,怎么入行? 我虽不算入行,但

Python之encode与decode浅析

 Python之encode与decode浅析 在 python 源代码文件中,如果你有用到非ASCII字符,则需要在文件头部进行字符编码的声明,声明如下: # code: UTF-8 因为python 只检查 #.coding 和编码字符串,为了美观等原因可以如下写法: #-*-coding:utf-8-*- 常见编码介绍: GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换. GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码.

浅析PHP的开源产品二次开发的基本要求

浅析PHP的开源产品二次开发的基本要求 第一, 基本要求:HTML(必须要非常熟悉),PHP(能看懂代码,能写一些小系统,如:留言板,小型CMS),Mysql(至少会一种数据库),Javascript(能看懂,能改现成的一些代码),Div+Css(能进行界面的调整,明白CSS是怎么使用的) 第二, 熟悉开源产品的使用,比如 Dedecms,你要知道怎么登录,怎么新建栏目,怎么添加文章,模板标签的使用方法,模型的概念和使用方法等等一些功能 第三, 要熟悉这个开源产品的数据库结构,还要理解里面核心文