ColinOrg 2012-04-18
要实现云计算的随需应变的目标,关键在于运算能力和存储能力的适应性。我们先看看如何实现存储的随需应变,这里的随需应变的需主要是指存储空间和吞吐能力(性能),当然,安全性,可靠性,可扩展性等指标都是基本的。基于单台存储设备的能力总是有限的这种事实,下面的存储分析都是基于分布式存储,而不基于单台存储设备。因为我们是基于分布式存储来满足云存储的要求,我们不关心操作系统级的存储设备访问和管理,我们只关心基于操作系统文件系统之上的逻辑存储部分。我们先看一下要云存储要达到的几个关键目标:高安全,高可靠,高扩展,高性能(吞吐),高易用。
为了更好的分析数据存储后面所采用的技术和架构,我们从两个方面来分析一下数据存储的一些特性:
1)首先来看数据的存储形式,基本的数据存储有两种形式,一是基于文件系统,二是基于数据库系统,但这两种形式本质上都是基于文件系统,为了便于后面的说明,我们还是分开。前者就是通常的文件,而后者就是数据库;
2)其次我们分析一下数据本身的特性,可以从几个方面来看:
A)从组织形式,我们可以把数据分为结构化数据和非结构化数据;数据内部或外部的关系是否复杂;
B)从操作特性,我们可以分析数据是否修改频繁,文件操作是新增多,附加多还是修改多;
C)数据量级别。
上述分析的这些数据特性直接影响到我们对存储模式和技术的选择,在实际架构存储模型时,我们需要综合考虑到这些特点来权衡所采用的技术或者架构策略。大而全的架构策略在云计算和海量数据处理方面将不再是首选。我们需要一种因地制宜,有针对性的架构策略来平衡各方面的需求。
我们先看看传统的存储解决方案针对这些问题是如何解决的:
1)在扩容方面:当然是增加存储设备;但单台设备扩容会受到寻址能力的限制;
2)可靠性方面:一般采用磁盘阵列,大多采用的都是同时多路写模式,由于设备大多在一个物理点,可靠性并不能完全保证,性价比方面也很一般;不是真正意义上的分布式存储;
3)在安全方面:由于一般都是针对特定用户的,具有物理边界隔离,所以安全性比较好;
4)扩展性反面:受限,比较难以扩展,特别是动态升级;
5)性能方面:一般情况下性能不是很好,特别是写,专门存储设备会好些;
6)易用性:有些方式简单,比如RAID1,有些比较复杂;但对于用户来说是透明的,也就是透明性比较好;
7)存储能力:可以扩充,但会出现要不不足,要不剩余浪费的矛盾;
8)综合效益:对单点设备要求比较高,性价比比较低,利用率也比较低。如果我们应用系统采用的数据库系统,很显然,上面这些特性的实现依赖于数据库系统本身,一般厂商都会提供完整的解决方案,比如Oralce的RAC,微软的sql Azure等。这里我们不考虑别人成熟的方案,而是基于传统的技术来看看如何实现和保证上述云存储的目标的:
首先来看看基于传统的数据库系统(这对于大多数企业级业务系统来说是可选的方案)的情况,数据存储使用数据库,一般都是SaaS应用,这种方式下一般多采用多客户租赁模式,数据隔离分为表级共享,表结构共享和数据库共享三种方式(大家可以去搜一下,原理非常简单),在这种情况下,数据存储是可以实现随需应变的,但数据存储的可靠性和性能都依赖于数据库厂商对这些问题的解决方案(比如Oracle的RAC技术等);而对于计算部分,可以采用集群负载均衡的方式,这种技术现在比较成熟,需要注意的是缓存方面。这种方式一般只针对用户和应用程序,对于内部的大规模数据处理是不行的,因为这种模式是部署分布,而不是计算分布。下面来看看采用这种方式的一些指标分析:
1)在扩容方面:利用数据库厂商提供的技术来解决;
2)可靠性方面:依赖于数据库厂商提供的底层技术;但架构,管理相对容易,因为使用的都是别人成熟的技术。
3)在安全方面:如果是私有云,安全问题不大,但如果是公有云,表级共享的安全相对比较差,后面两种情况要好些;需要应用程序完全自己控制数据的隔离和访问权限,系统设计和实现上比较复杂。
4)扩展性反面:应用程序动态升级比较难,如果采用分服务器逐步切换还是可以的;
5)性能方面:采用应用服务器负载均衡和数据库系统负载均衡,性能上没什么大问题;
6)易用性:比较好,只要处理好隔离和数据库连接,跟传统的开发方式区别不大;
7)存储能力:可以实现随需应变;
8)综合效益:对单点设备要求比较高,性价比比较低,利用率也比较低。
这种方式跟传统的管理系统一样存在着一个大数据量处理的问题,一般采用按年(时间)分数据库或者表来存储数据的方式来避免数据表过大而导致的性能问题,当然,在上面的模式中依然可以用这种方式来进行,只不过这个系统的复杂度会大大增加。这个问题的解决最好的方式还是选择有比较好的解决方案的数据库产品(云数据库,比如sqlAZure,GreenPlum).
另外注意,上面的解决基本是基于应用(SaaS)来讲的,不涉及到IaaS,PaaS。PS:写这两篇感觉压力比较大,可能题目开大了,所以对GFS,BigTable,Hadoop,Greenplum,Dynamo等云方案的解构,下一篇再讲。后面的文章继续讲存储,计算部分(分布式计算,操作系统虚拟等)。也欢迎大家指正探讨。
更多信息请查看 java进阶网 http://www.javady.com/index.php/category/thread