创建可扩展性系统-6

 数据

 

一个系统处理的对象也许是客户,商品,订单,运单,病人, 纳税人, 银行账户等等, 无论如何,数据总是业务处理的基础。对应近无限可扩展性系统而言,数据模式的设计,数据的存储,复制,查询都有不同于一般信息系统的地方。下面主要讨论2点: 数据的局域化(Local Data Is King) 和数据的异质性(Not All Data Is Created Equal)。

 

(一)数据的局域化(Local Data Is King)

在Apache CouchDB的设计理念中强调有完整商业意义的数据的局域化 。这是类似于Helland 提出的数据实体(Entity)的概念。数据实体是带关键字的数据对象,可以是SQL记录,XML文档,文件系统的文件内容。比如数据库中的使用关键字段作为标识符的SQL记录, 该记录内容不一定是局限于数据库表格的某一行,可以涉及到数个数据库表格。每个数据实体存在于 在 单个机器上(极少数情况可以存在于高度同步的机器集群上)。数据实体 代表了不相交的数据集合。每个数据只存在于一个数据实体, 数据实体 之间没有重叠的数据。

以CouchDB的数据对象文档为例, CouchDB的文档是包含一组【关键字-值 】的JSON对象。每个文档带有一个标识符。 因为数据实体具有完整商业意义, 可以独立完成一个业务操作。

{

"主题": "我想我是海",

"作者": "孩子",

"发表日期": "2005/1/16",

"标记": ["孩子", "诗歌", "或者别的什么"],

"正文": "春不暖,花照开~"

}

 

 

引入数据实体概念的目的是严格避免分布式系统中全局事务处理。 对于分布式系统提供事务管理有很多理论研究,比如阻断性的2PC 和非阻断性的Paxos算法。在实际工作中, 很少使用这个全局事务管理, 一个单独的事务很少跨越不同的机器,除非机器群高度偶联。 相反, 我们假设多个范围没有重叠的事务可串行性。 每台机器就是一个事务可串行性的范围限定。 每个数据对象 在 单人机器或 集群上。 原子交易涉及的所有数据只能在一个事务可串行性的范围中 (单个机器或 集群), 因此多个范围之间没有重叠(Helland,2007)。

数据实体 的唯一限制是必须在一个事务可串行性的范围内。( 单个机器或 集群)。 这也是实体和面向对象编程中的对象概念的区别。 对象之间有可能共享事务范围,而实体之间永远不会共享事务范围。

数据实体具有完整商业意义, 也符合Amazon S3(Simple Storage Service)可扩展性系统架构的两个原则:

  • 自主性:该系统的设计,使各个组成部分可以基于局部信息作出决定。

  • 本地的责任:每个组件负责实现其一致性,从来没有成为同伴的负担。

[其他几点包括:完全分散化:使用完全分散化的技术,清除可扩展性瓶颈和单点故障(SPOF)。受控并发:没有或只有有限的并发控制是必需的。 失效容错:系统考虑 部件出错 是一个正常的操作模式,能够没有或以最小的中断来继续工作。 控制的并行性:在系统中使用的抽象的概念,其粒度有利于使用并行性来提高系统重启或者引入新的节点时系统的性能和稳健性。小而可重用的组件:不要尝试为所有人所有事物提供一个单一的服务, 而是建立可用于构造其他服务的可重用部件。对称性:在系统中的节点在功能方面是相同的,尽可能的降低特定的功能配置要求。简洁性:系统应尽可能简洁而不是简单】

在可扩展性构架中,数据的局域化的另一种表述是:没有共享的架构( Shared nothing architecture ,SN ). SN是一个所有节点独立,自主性的分布式系统,SN中没有节点之间相互共享内存或硬盘。通过使用SN构架, 谷歌对系统简单的添加低端的价廉计算机,获得了近无限的可扩展性。

 

和SN类似的是以空间为基础的架构(SBA, Space-based architecture), SBA是业界在获取系统的近无限可扩展性的努力中反思的结果。认为今天的以层为基础的构架结构, 是可扩展性固有的壁垒 。构架的趋势开始从三层架构,转变到以空间为基础的架构, 来支持线性可扩展性的应用程序。

在SBA架构中,程序是由一组自主性单元(处理单元 PU)构成, PU相互独立。 基于SBA架构的系统具有如下几种组件:(Wikipedia)

  • 处理单元(PU): 扩展性和故障转移的单元。一般情况下是 Spring框架的POJO(Plain Old Java Object,不含业务逻辑的java简单对象)容器。

  • 虚拟中间件:公用的运行和集群模式,包括消息网格,数据网格和处理网格

  • POJO 驱动的服务模式:轻型服务模式,将任何Java程序转换成低偶联的分布式系统

  • SLA驱动的容器 :帮助程序在动态机器池中的基于SLA的部署,

 

(二)数据的异质性(Not All Data Is Created Equal)

汤姆斯杰克逊在《独立宣言> 中宣称“我们认为这些真理是不言自明的,所有的人都生来平等”(We hold these truths to be self-evident, that all men are created equal )。 但在IT世界中,并不是所有的数据都具有相同的商业价值,也并不是所有的数据都应该相同对待。

 

(A ) 按数据的业务重要性差异性对待

上世纪八十年代到九十年代中叶,信息系统只是建立在专用机器上的财务,文档管理等少数应用程序。数据规模很小。集中的硬盘存储模式是为了提供足够的存储空间以支持系统的可用性。随着数据库技术,ERP应用程序,电子数据交换,基于Web的电子商务,商业智能,多媒体,社交媒介整合进企业的各个方面,已经超出最初存储模式的性能和容量的上限。 中等规模的基于SCSI的储存模式在可扩展性和可连接性上有局限;而且基于大型机的Tier 1 存储模式也不能在费用上满足不断发展的开放世界的要求。

从IT部门的预算要求看,从2000年到2004年,IT部门的预算从Y2K和Dot.com泡沫的过度支出而紧缩,需要是发明之母, 迫使IT 进入了新的时代。 其他关键技术 比如低成本存储的 iSCSI ,磁盘到磁盘备份的SATA,降价的光缆都帮助了在 硬件架构上实现多层次的 基础构架。

基础构架的成本更紧密的和数据的业务重要性挂钩,是选择 基础构架 的关键。

 

区分数据不同价值的目的, 是为了系统更好的管理大规模数据。虽然存储介质越来越便宜,不同的存储系统(从SSD 到 磁带)的成本还是差别很大, 对于不同性质的数据需要差别处理;另一方面,数据库系统中数据过多也影响数据更新和查询的效率, 即使对于相同性质的数据(比如客户交易记录)也需要根据价值差别处理。

 

Doug Laney在2001年提出来BigData的概念, 强调BigData的三个特点:量,变动性和多样性。多样性是指许多不同的数据和文件类型, 包括多媒体,文件,地理位置数据,网络日志和文本字符串等。变动性是指数据更新的速度和有效期。

在实践中人们往往忽略了BigData的变动性和多样性,而只是强调其量大的特点。BigData的多样性要求我们选择不同的数据存储模式(见下文),而其变动性含义也包括数据的商业价值不是一成不变的, 很多是有时效性的。数据对客户和企业的价值往往是随着时间的推移而减弱。比如对于客户的交易记录,客户查询10年前交易记录的可能性和频率都要低于5年前的数据。还有一些在不同行业的受法律法规管理的文件数据,比如网上证卷公司的股票交易记录, 生物技术公司开发新药的实验记录等,都有一个法规要求的保存年限。超过这个年限的数据几乎没有任何业务价值。

对于当前业务产生的数据,有一种经验的方法来区分数据的价值:数据对企业的价值贡献分为线性的和非线性的。 如果数据对整个用户群有直接影响,数据的价值增值就是非线性的。当然还有别的区分方法,比如业务流程直接产生的数据, 或者系统监测使用的衍生数据等。 在消息系统一节中我们也提到,针对消息的不同价值,可以选择不同的取样策略。

一个比较系统的策略是使用市场管理中的RFM概念(Martin Abbott , Michael Fisher: Scalability Rules) 来量化数据的商业价值。 在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。RFM模型是衡量客户价值和客户创利能力的重要工具和手段。该模型通过一个客户的近期购买行为(Recency)、购买的总体频率(Frequency)以及花了多少钱(Monetary)三项指标来描述该客户的价值状况(百度百科)。 企业在推行CRM时,就要根据RFM模型的原理,了解客户差异,并以此为主轴进行企业流程重建,才能创新业绩与利润 .

把RFM用在同一类数据上,比如银行用户帐号的交易记录上

R: 一个客户的近期购买行为 => 该交易记录最近一次被查询的时间

F : 购买的总体频率 => 该交易被查询的频率

M : 花了多少钱 =》 数据产生时的商业价值

 

对于交易记录, 在M保持不变的情况下, 10年记录的R和F 都比5年记录的数值低,因此 RFM (10年记录 ) 《 RFM (5年记录). 在程序设计时, 就可以将超过5年的交易记录从数据库表移除(归档到磁盘或磁带), 为超过5年的历史数据的查询提供不同的界面,用户往往需要通过邮件等异步获得查询结果。

当然, RFM更多可以用在分析不同数据的商业价值上。

 

(B ) 选择不同的数据存储模式

数据的异质性(结构化和非结构化数据)

每个企业都依赖于数据作出决定,现在的业务分析软件市场的规模每年超过300亿美元且增长迅速。在计算机生成的文件包含录音,图形,图像,数字数据,文字,录像,它们共同构成了85%以上的所有企业数据,而关系数据模型不能很好地适应。其结果是,至少有85%的业务分析投资只能分析今天不到15%的企业数据。 2011年的数据增长速度显示,在未来三年内,我们将生产近10兆GB的数据。这足以存储近70兆小时的Flash视频。此外,这种非结构化数据的增长速度是结构化数据的两倍以上。

 

随着企业数据量的不断成倍增长,关系数据表越来越大,分析应用程序必须扫描大量的数据来查找结果。大企业需要的IT团队专职处理管理关系数据表的创建,加载,转换和调整。

 

在NoSQL一节中我们介绍了工业界不同于RDBMS的各种选择,不再累述。这里讨论一种对数据挖掘和商务智能有深远影响的不同的数据模式框架。在1999年,W3C发布了资源描述框架 (RDF ,Resource Description Framework)第一版。RDF是无格式要求的一种全新的数据模型,一组标记语言的技术标准 ,以便更为丰富地描述和表达网络资源的内容与结构。

RDF数据模型是由三个资源标识符组成,也被称为三元组(triplestore)技术。很多人认为RDF最终将取代RDBMS。目前市场上的Oracle支持三元组数据库,IBM的Watson系统能够处理自然语言提问而更胜一筹。相信在大数据的前沿,RDF技术上的突破将发挥越来越重要的作用。

 

数据库清理(Database Purging)

为提高数据库性能和便于数据管理,需要定期进行数据库清理。如果数据库清理工作没有合理优化,将对系统的性能产生严重的负面影响。事实上,数据库清理是影响SOA商业程序性能最大的因素之一,影响数据查询的效率,需要临时占用数据库的大量存储空间。

模式名称: 使用具有业务意义的局域化的数据

描述: 使用具有业务意义的局域化的数据, 将全局事务处理分解成相互独立的原子事务。

动机/试图解决问题: 在分布式系统中,跨越不同系统的全局事务管理是整个系统的性能瓶颈。

原理: 如果系统组件的局域数据具有一定的业务意义,组件可以基于局部信息作出决定,完成原子事务, 那么就可以避免使用2PC,应用程序自己通过流程协调各个原子事务的结果。

使用: SOA

相关模式

模式名称: 异类数据考虑其直接的业务重要,

描述: 不同数据的商业价值不同,对数据的存储,搜索使用不同的策略,降低成本,提高效率

动机/试图解决问题: 业务产生海量数据,系统的存储成本和使用成本都上升。

原理: 数据的商业价值不同,使用的方式,频率也不一样。低商业价值的数据应该存储在磁盘磁带等低成本的介质上,甚至定期清除。

使用

相关模式: 同类数据考虑其时效性

 

模式名称: 同类数据考虑其时效性

描述: 商业数据具有时效性,将历史久远的数据从数据库归档,提高可扩展性。

动机/试图解决问题: 随着业务开展,数据不断积累。数据库表越来越大, 影响搜索更新效率。

原理: 商业数据具有时效性,年代越久越的业务数据对客户和企业的价值越低。

客户查询的可能性越低。将超过一定年限的数据从数据库清除,归档,可以将业务主表控制在一定大小。

使用

相关模式: 异类数据考虑其直接的业务重要

 

总结:

为了避免分布式系统中的全局事务管理对系统可用性和可扩展性的影响,数据模式的组织要尽可能做到具有独立业务意义的局域化。 这样可以把复杂的业务流程分解成一个个独立的原子事务单元。为了系统能够高效的处理不断增长的数据,需要按照数据的商业价值对数据的存储,搜索使用不同的策略。 

本文出自 “静水流深” 博客,转载请与作者联系!

你可能感兴趣的:(系统架构,可扩展性)