文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» 微软SQL Server专区 » 微软商务智能 » Oacle实体应用程序集群及其在集群并行与可用性的工业趋势       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: Oacle实体应用程序集群及其在集群并行与可用性的工业趋势  ( 查看:493  回复:2 )   
 
xiaoxinlucky
助理工程师  点击可查看详细


十二生肖之鼠   双子座   行业勋章   技术勋章   诚信兄弟  
帖子 602
精华 12
无忧币 2017
积分 1390
阅读权限 40
来自 (保密)
注册日期 2007-12-12
最后登录 2008-6-21 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-1-24 15:49   标题:Oacle实体应用程序集群及其在集群并行与可用性的工业趋势
上一帖 |


QUOTE:
摘要
共享磁盘集群数据库管理系统被认为是解决应用程序可扩展性和健壮性问题的一种潜在方案,如Oacle实体应用程序集群RAC。本文讨论了一种没有单点故障的且可以用来支持geo-集群的最佳解决方案。Oacle实体应用程序集群RAC是位于数据库管理系统与磁盘之间的提供单点故障功能的成百万行的共享软件,它作为一种可用性解决方案是不合适的,而它更适合作为一种多点扩展的解决方案。本文重点介绍了高扩展性、数据集中的应用程序的两个重要特性:1)应用可用性,2)可负担起的性能。RAC最初的设计点是多节点可扩展性,但它并不是解决应用程序可用性的理想选择。

目录
1.介绍
2.应用程序的可用性
2.1 简单性
2.2 冗余性
2.3 独立性       
2.4  可用性总结
3.可负担的性能
3.1硬件的发展和数据库扩展性能的提高
3.2中间层缓存与扩展技术
3.3可负担起的性能总结
4.总结
参考文献

版权说明
本文档中的信息代表 Microsoft Corporation 到发布之日对所讨论问题的最新观点。由于 Microsoft 必须对不断变化的市场情况作出反应,这些信息不能解释为 Microsoft 一方的承诺。Microsoft 不保证所提供的任何信息在发布之后仍然正确。
本指南只用于提供信息。Microsoft不对本文档的信息做任何明示或者暗示的保证。
用户有责任遵守所有生效的版权法。根据版权法的规定,如果没有 Microsoft Corporation 的书面许可,不得以任何形式或者利用任 何手段(电子、机械、影印、录音带或其他方式),为了任何目的,对本文档的任何部分进行复制、存储、在检索系统引用以及传播。
Microsoft 对本文档中的所有内容都拥有专利、专利应用、商标、版权或其他知识产权。除非 Microsoft 通过书面许可协议明确提供,此文档并不意味着授予您对这些专利、商标、版权或其他知识产权的任何许可。
除非特别提到,本处示例所涉及的公司、组织、产品、域名、电子邮件地址、图标、人名、地名和事件均为虚构,不与任何真实的公司、单位、产品、域名、e-mail 地址、徽标、人员、地点和事件有联系,也不应从中做任何此类联系方面的推断。

© 2005 Microsoft Corporation。保留所有权利。

Active Directory, Microsoft, Visual Basic, Visual C++, Visual C#, Visual Studio, Windows and Windows NT是 Microsoft Corporation 在美国和/或其他国家(或地区)的注册商标或商标。
这里提到的真实的公司名称和产品的名称可能是它们各自所有者的商标。




最全面的资料《SQL Server数据管理》
2008-1-24 15:491楼
[ 顶部 ]
 
xiaoxinlucky
助理工程师  点击可查看详细


十二生肖之鼠   双子座   行业勋章   技术勋章   诚信兄弟  
帖子 602
精华 12
无忧币 2017
积分 1390
阅读权限 40
来自 (保密)
注册日期 2007-12-12
最后登录 2008-6-21 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-1-24 15:58 


QUOTE:
1.介绍
在部署以数据为中心的应用程序时面对的问题经常用Oacle实体应用程序集群RAC来进行解决,作为一种非常重要的方案,它经常要受到许多因素的影响,有些是技术上的,而有些则不是,但是所有这些相关因素都会带来对数据库技术的影响。本文将针对这些围绕Oacle实体应用程序集群RAC的观点展开分析,研究技术问题,以及对与数据库管理系统的发展趋势有关的相关问题进行探讨。

首先,让我们来了解一下作者的技术背景以及在接下来的讨论中所持有的观点。James Hamilton是Microsoft SQL Server研发组的软件架构师,在他的领导下,组员们共同对包括SQL语言编译器、最优化查询、查询执行引擎、数据定义语言DDL、元数据、目录管理组、安全、可扩展标记语言XML、客户网络协议组、全文本搜索开发组、公用语言运行时(CLR)等付出了努力。James在IBM工作了11年,那时他作为DB2 UDB的首席构架师,帮助发布了很多产品。帮助客户成功地配置了DB2并行版本(现在它已经是DB2企业版的重要组成部分),有些客户会明确指出他们倾向于使用基于磁盘的解决方案,而不是Oacle实体应用程序集群RAC所基于的核心技术——数据库并行。当然,其中的利害关系是很明显的,幸运的是,该观点涉及的内容是复杂的,这也不是仅仅通过对技术架构的偏见和爱好简单作出的决定。。所有潜在的并行集群技术都有它的优点和不足,并且每一个成功开展的例子都可以被引用,本文中将主要引用那些用RAC解决了的问题,通过选择Oracle和他的竞争者的不同解决方案来进行比较。

Oacle实体应用程序集群RAC解决方案,执行的状况,它的品牌名称,以及它的销售状况自从这项技术作为Oracle并行服务器的最初构想,在近十年来都有了很大地发展。[MORL02, YDNR02] Oracle 10g  RAC 已经致力于解决面向以数据为中心的应用软件的两个最为核心的问题:1)应用程序的可用性,2)可负担起的性能,而这些要求对数据管理人员来说是非常重要的。因此,Oracle以及整个行业,要从整体上解决基于应用程序设计、需求分析和具体部署场景的所有需求。

2.应用程序的可用性
在寻找更多外来的可用技术之前,更应该先要回顾一下几个核心的技术原则。应用程序的可用性,尤其是当面对未知的障碍时,几个普遍原理将会适用于系统设计的整个过程:简单性、冗余性,以及独立性。

2.1 简单性
用来提高整个应用程序可用性的任何产品或功能都应该被设计的简单易用,在大多数情况下,操作和管理失误是导致应用程序中断的主要原因。例如,在最新发布的Oracle RAC白皮书中指出,在一个典型的服务器端系统中有36%的未知故障来源于管理失误[ORCL02]。David Patterson在他的论文“一种用来评价事故成本的简单方法”中也证实了这一点,同时他在文中还指出,在各种事故中,人为的失误占到53% [PATT01]。

系统的复杂性会导致管理失误,有时这些失误并不是最终结果,通常数据库管理员(DBA)被复杂的系统占据了大量的时间。这些日常冲突是经常存在的,这就使得管理组织不能将更多的时间用来设计长期方案和改善整个业务的基础构架。而且还需要指出的是,管理的复杂性,对于不同的数据库管理系统提供者来说可能会是完全不一样的,这是需要仔细研究的。然而,RAC忽视了不同竞争者之间存在的不一致性,并且只关注Oracle的产品,因为这要比它所提供的单点产品要复杂的多[FORE02]。长期以来Oracle的咨询报告指出,一个典型的、运行良好的、单点Oracle系统可以获得99.9%的可靠性,然而同样的应用工作负荷在两点的Oracle RAC上运行,投入同样水平的管理,则可以获得得适应性要明显的低,通常只能达到98%[YDNR02]。
关于这些报告的结果还有很多可以讨论的空间,因为它们是数据库管理员在管理不同的系统时所用到的工作负荷与质量的乘积。但是,关于复杂性问题可能带来的浪费数据库管理员大量的时间还是可能会产生适应性问题或者两者都有可能的问题,则很少有争议。

运营和管理的简单性是应用程序可用性的最强有力的驱动因素。

2.2 冗余性
组件可能会发生错误,因此在整个系统中就应该存在足够的冗余,从而使得在硬件、软件、以及管理过程中必然存在的组件错误能够得以幸免。许多高可靠性的系统一定会存在很多冗余的组件,因为在目前不可避免的错误中,要避免单点故障,这是一种有效的方法。硬件和软件组件可能会发生错误,如果在系统中没有足够的冗余,组件错误将会变为系统适应性的降低。

在过去的15年中,针对产生数据库数据冗余的最新技术已经形成了很多协议:在独立的数据节点之间进行日志传送。对它最早的公开描述是在1989年在加利福尼亚的Asilomar召开的高性能事务处理系统会议上由Burkes 和Treiber提出的[BURK89]。Oracle,DB2,以及 SQL Server都有共同点,Oracle提供的基于日志传送的解决方案具有数据保护功能[ORCL01],IBM提供的DB2日志传送[DB203],微软提供的SQL Server 2000日志传送[SQLS01],以及SQL Server 2005数据库镜像功能[SQLS02]。数据库镜像可以在讨论这种类似于数据库有效性的各种优点时作为例子来使用。如图1所示,带有数据库镜像(日志传送),首节点与次要节点之间不共享任何资源,除了在两个系统之间以低层次的事务日志格式存在的唯一链接。值得提及的是,在关系型数据库系统中,日志和恢复、与事务日志相交互的组件,是最经得起测试的可靠代码路径。

在日志的传送配置中,两个系统的独立硬件、软件和数据拷贝将被100%的保留下来,同时,硬件或软件组件的错误则不会被传送。



如图2所示的Oracle RAC系统缺乏图1中所示的日志传送设计中的冗余度,并且集群中的所有节点共享存储子系统。对RAC来说,数据库计算的点是多余的并且是可替换的,这是非常好的现象。然而,只有一份数据库备份,也就是说,如果数据库的一部分遭到破坏,数据便不再有用,并且整个集群将会失效。

通过使用基于廉价冗余磁盘整列(RAID-based)的存储子系统,在任何RAC部署中数据冗余都是很容易实现的,但是这只能防止物理存储系统失败。如果存在失败,数据破坏或数据完整性的丢失在逻辑上是要比存储系统失败严重的多,存储区域网络(SAN)将会把这些受损的数据冗余存储在各数据文件中,不过这些数据在整个集群的各个点中将不再有用。然而,通过诸如数据保护或者数据库镜像等日志传送措施,数据将会受到保护,因为逻辑上存在的数据冗余将会位于存储子系统、主机总线适配器、驱动设备和操作系统之上。

需要记住的一个关键点是存储区域网络(SAN)可以存储多个数据冗余文件,这戏数据冗余的获得可以避免其他在数据库、操作系统和存储堆栈中产生的软件和硬件组件错误。



总之,Oracle RAC配置可以计算出多点冗余(运行数据库节点可以防止发生错误),特别的,在使用基于廉价冗余磁盘整列(RAID-based)的存储子系统时可以用来配置物理数据库冗余。然而,它仅仅是一个逻辑数据库文件备份,而且这是系统中非常重要的资源。在下一部分中,失败的方式将会导致在RAC中难以获得数据,因为这些点点失败将会存在于更多的细节中,而且这些点点错误在进行共享、并发的访问磁盘系统来获得高可用性的应用软件时会让我们很不舒服,这需要很高程度的可靠性。存储区域网络(SAN)系统提供了很优秀的管理性能和高质量的数据保护措施,但这却不是数据库可用性的全部解决方案。用户只是配置RAC而不增加数据保护或其他有用技术的解决方案,这将使得系统在日益增多的公共系统错误面前不能受到保护。

包括Oracle在内的所有数据库管理系统的主要供应商都可以提供完全的日志传送冗余,这是一种更好的可用性解决方案。


QUOTE:
2.3 独立性
从图1中我们可以看出,单点故障可以通过基于日志传送的解决方案来避免,两个数据库系统在存储栈中不共享任何的硬件或软件组件,而仅仅是通过处理它们之间的日志传送来进行通信,这是日志传送区别于基于共享磁盘的解决方案的主要标志,像RAC,他们是在数据库节点中共享一个单一的存储系统(如图2所示)。

通过一些例子可以证明,一些依赖于磁盘子系统的可用性设计可以抵消具有负面作用的可用性,同时被所有数据库节点共享(许多节点对SAN存储结构的连续或离散的共享并不能解决所有的这些问题),同时多个节点的共享磁盘访问可以一个海森堡臭虫(Heisenbug,是一种在数据库管理系统存储引擎中罕见的、由时间触发的错误)来破坏存储在该数据页上的并与RAID设备共享的所有备份,而它对数据页的破坏将是无法挽回的。因为这些资源在集群中被所有的节点所共享,同时,所有的数据库管理系统节点将不能访问该数据页上的数据,而且,由于这些错误是发生在磁盘子系统层次之上的,RAID子系统将可能会产生多个关于这个遭到破坏的数据页的副本,此时在存储子系统中的所有副本将拥有同一个错误的数据页,对于这个数据而言,整个集群将不再有用,由此得出显而易见的结果是通过管理干预长期停顿的可能性,幸运的是,在这里描述的这种存储引擎错误是比较少见的。将数据栈降低将会导致失败的风险上升,从而增加不满意的水平。例如,当数据库管理系统节点成功地读取数据页的情况,但是可能会遭到在数据库管理系统和存储系统设备驱动程序之间进行传输的成百万条操作系统代码的破坏,在这种情况下,将会产生同样的结果:所有的数据备份都被破坏,并且所有的节点都不能再访问这些遭到破坏的数据页。

如果将操作系统或者数据库受到的破坏忽略不计,仍然会有许多数据遭到破坏的可能,并且在像RAC这样依赖于并发的、共享的存储权限的系统中不再有用, 主要的存储区域网络提供商们现在正在开发、维护和扩展超过成百万条的存储子系统微码来解决这个问题。也就是说,存储硬件是目前最常用的软件系统,而且这个子系统对于错误并不比包括数据库管理系统在内的其他组件有更强的免疫力,考虑到SAN控制器或固件的错误,SAN尝试了各种形式的不可重复的通信失败,磁盘子系统硬件或软件也经历了一系列软件错误。值得注意的是大多数的SAN供应商使用可重写缓冲器管理原则,当存储网络结构或部分SAN系统需要进行部分的读写操作时,该系统将会把那些丢失的数据页全部开放。所有这些操作也将会产生相同的后果:在RAC集群众产生的主要的计算点和所有的次要节点的数据可用性将会丢失。这将要通过不正常的停顿来披露错误,同时,如果这是一个重复出现的错误,则要将其发现并纠正是非常困难的也是很费时间的。

不论从本质上还是从运作的角度来看,RAC都是非常复杂的,任何突发事件和错误状况都可能导致整个集群的失败。然而幸运的是,这些集群范围的错误不是经常发生的,但是他们一旦发生,问题的检测将是非常困难的,通常需要特别的技术和数小时(甚至是几天)的连续工作,其根本的原因甚至都不会被发现[YDNR02]。

在很多高级的可用系统中,独立性和故障牵制政策是不可缺少的组成部分。

2.4 可用性总结

在将近十年前当技术是首要的构思和实现的前提时,RAC的最初设计思路是多点可测量性,因此,当RAC遭受到单点故障时不要感到惊讶,因为它作为原始的可用性装置是别无选择的,而且并不是设计点。当根据应用程序执行特点需要一个多点集群数据库管理系统时,RAC是可测量的并且也是最适用的。对于高价值的应用程序要获得有用的结果这并不是最好的技术选择,此时可用性是系统设计最重要的出发点,Oracle和其它的数据库管理系统提供商提供了一些更好的选择可供使用。


QUOTE:
3.可负担的性能
对于以数据为中心的应用系统而言,性能和数据库的可测量性是最为重要的因素,数据库的可测量性还是应用系统开发商所要考虑的核心因素,因为要扩展同步的回归状态是非常困难的(很多应用程序提供全部的ACID属性(原子性、一致性、独立性、持久性)来使得它易于操作)。应用程序的扩展能力受到我们关于共享的应用程序规定的管理扩展能力的制约,如果应用程序是真正无状态的,或者应用程序的状态是完全非共享的,线性的应用程序扩展将很容易获得,要想扩展这样的一个应用程序,只需要增加它的实例。不幸的是,绝大多数有用的应用系统都具有相当多的状态,并且在不同的实例之间需要共享这些状态,这样可以支持更多的应用程序实例。这些共享的状态通常被存储在关系型数据库管理系统(RDBMS)中,因此,数据库管理系统的扩展会对应用程序设计者带来巨大的挑战。

应用程序设计者使用很多窍门和技术来降低数据库瓶颈,但是这些技巧是需要通过努力获得的,并且经常会限制应用程序的编写,这样就可能潜在的导致管理或操作成本的增加,因此,这就强烈的需要数据库管理系统基本设施提供者来解决这些问题,使得应用程序提供者更多地关注应用而不是关注集群的并行。

这些对性能扩展的探讨可能会被应用于工业领域,主要有以下两个方面:
1.硬件的发展和数据库扩展性能的提高。
2.中间层的缓存和扩展。
3.1硬件的发展和数据库扩展性能的提高

在过去的十年中,硬件得到了持续快速的发展,同时单点数据库性能也以摩尔定律的速度不断改进,在1994年,工业界中最好的单点TPC-C性能是1,470tpmC(IBM RS6000 PowerServer R24)
,然而,十年后的今天,三个主要数据库提供商可以生产出相当于当时1000倍的性能。同时,我们也可以看到性能改进了将近三个数量级,十年前的领先系统,IBM的产品,达到了$666.12/tpmC,而现在则通常是在$5/tpmC左右。

硬件以这样的速度不断发展,Intel认为在今后的十年中发展速度还会继续加快[INTL03]。



在前面的讨论中,之所以会产生TPC-C这样的结果仅仅是因为数据具有广泛的可用性,而且在两个大的数据库管理软件公司提供的产品中具有可比性,然而,作者所使用的大多数的客户端应用程序都明显的要比TPC-C复杂的多。虽然如此,在过去十年中硬件的发展以及由主要供应商所提供的数据库管理系统技术的改进都是非常巨大的,这一点毫无争议。例如,在90年代中期,作者帮助传送256个无共享数据库系统节点给客户,在最近的一次会议中,对于同一个客户,它与一个现代的单点系统进行了比较,在除了占地面积、重量和能量消耗之外的所有因素中,它与当时可用的单点系统相比要差很多。

由此可以得出结论,大多数的联机事务处理(OLTP)工作可以由高级别的单点系统顺利完成,但这并不意味着所有的工作负荷都可以通过这种方式来完成,其它因素也在起着作用,最应该关注的是它们都集中围绕更高级别的系统,这可能会导致发生与较低级别的系统不成比例的成本。也就是说,8个4 –ways要明显的比一个32-ways便宜得多,因此,尽管通常可以用单点系统来完成的工作负荷,也仍然存在有利于集群部署的好的意见。这些意见有:“一个单点系统可以在一个可接受的性能水平下完成整个工作负荷,如果使用基于集群的数据库管理系统体系,则所需要的硬件要比普通价格的硬件更昂贵。”高端的决策支持、实时的数据存储的工作负荷,以及应用程序的主体都可以用一个单点系统来完成,但是由于这些主机类型的系统相对比较昂贵,大多数的工业界人士倾向于“可负担的性能”,这从工程学的角度来说才是真正有意义的。实际上,整个解决方案使用的都是顾客的资源。

可以通过Oracle的RAC作为一个例子来说明讨论单一系统作为数据库管理系统集群映像的两个原因:1)在单点的数据库管理系统中工作负荷不能被完成;2)使用一个常用的多点系统更为便宜。不幸的是,就像对许多技术进行选择一样,这并没有明确的答案。

从图4中可以看出,管理和运行成本在硬件和软件成本中占有很大的比重,每年的硬件成本下降使得这一点变得更为明显,软件成本由不变逐渐下降,系统复杂性提高,同时人们的消费升高。



管理和运行成本仍占主导地位,在接下来的十年中,如果得不到改进这种状况将会继续。关于这些数据存在两种观点:1)复杂性是可以被避免的;2)在数据集中型应用系统中,硬件成本在不断降低,并且在整个成本构成中所占的比重将会变得很小。

尽管这个观点是在很多年前出现的,但目前它仍然是正确的:应用程序的工作负荷能够在单个系统上运行,而且也应该是这样的。虽然如此,有时数据库管理系统需要在多个系统中进行扩展,至少有两个基本的方法可以实现数据库管理系统工作负荷的扩展:1)依赖于单个系统映像,基于集群的数据库管理系统,例如Oracle的RAC;2)使用中间层的缓存或者数据分割。代表巨大进步的数据库管理系统供应商们明显对此有意见,因为这似乎很简单,但是实际上并非如此。本文重将更为详细的分析这些观点,讨论当选择一个基于集群的数据库管理系统时可能存在的潜在成本和所需要的替代技术,并且对比高速缓存和数据分割方法的各种优点和不足。

集群数据库管理系统所产生的费用:运行一个基于集群的数据库管理系统体系会产生很多相关的成本,以下作者将进行简单的总结;

按照目前的价格,Oracle(数据库)企业版每个CPU的消耗是40,000美元,或者每个用户许可证(NUP)的消耗是800美元,RAC的成本要在上述成本的基础上多出50%,也就是说,每个CPU的消耗是60,000美元或者每个NUP的消耗是1200美元[YDNR02]。

除了初始的采购价格之外,还需要年度维修费用,因此,尽管RAC可以使用常规的硬件,这也只能在软件授权价格方面有所提高,很讽刺的是,要对每个CPU花费60,000美元才能使用成本更低的、通用的硬件。

性能影响:Scale Abilities 的James Morle在他的论文Unbreakable [MORL02]中对一个RAC系统的运行进行了概括性的研究,在这篇论文中,他记录了在同一硬件环境下,使应用程序在Oracle的非RAC系统下运行,并且在单点RAC系统下执行同样的操作,通过比较发现,在完全相同的硬件条件下,同样的工作负荷在RAC系统中运行的消耗要增加18%,Oracle公司一位专家在一次幽默的但是公开的讨论中解释说,RAC系统就像一个放大器 [ASKTOM04]。他的意思是说,RAC系统产生了一个不好的应用,但是它同样也可以产生一个更好的应用。Tom继续发言道:

我曾经听开发者们说过“如果共享池出现问题是因为我们没有绑定,那么我们将选择使用RAC——这样我们将会拥有两个共享池,问题就解决了。” Bzzzt—你有两个保持一致的共享池,这需要依靠慎重的、复杂的分析——如果在一个单点出现了问题,那么就会导致一个多点的错误。

Morle 也作了类似的报告[MORL02],在报告中指出“应当非常关注集群的配置、调优和运行。”

很多应用程序可以不经过任何修改就能在RAC上运行,但是大多数的则需要对应用程序进行投资和调优来实现合理的性能,这不是RAC的真正问题,而只不过是集群的普通现象:不管数据库管理系统是如何运作的,要使得应用程序在集群中运行良好,都非常需要进行应用程序的开发投资。众所周知,这是与目前市场上的很多产品相冲突的,但这却很显然是与通过进行多集群部署得到的结果相吻合的。

常规硬件:RAC依赖于共享磁盘的支持,使用共享多重存取启动的计算机系统接口(SCSI)来运行在技术上是可行的,但是通常所说的“基于Linux的Oracle RAC最佳实践” [ORCL03],事实上是可以运行RAC的。

. . .与双向端口共享SCSI驱动器和10MB/S的以太网,理解运行RAC功能所需的最少的需求是非常有意义的,但是在实际运行中是不太有用的。

RAC需要特定的存储系统软件,而且这可能会带来额外的开支,如图4所示,所有的硬件成本在整个系统的总成本中约占12%的比重,仅仅看硬件成本,磁盘组件占有很大的比重,而且在硬件成本中磁盘组件正呈现出增长的趋势,国际数据公司IDC的报告中指出,大型数据库开发的硬件成本的75%是用于磁盘子系统的,在Terraserver 中Jim Gray的结论与此类似,Terraserver的基础硬件成本投入中78%是用于存储系统的[GRAY04]。



对这些结论进行总结可以得出,在大型系统部署中比重以磁盘形式存在的硬件开支大约占75%,而
系统硬件(非磁盘形式的硬件部分)存在的系统硬件的支出仅占25%,从图4中可以看出,硬件支出大约占整个系统成本的12%,因此,在整个系统成本中,以磁盘形式存在的硬件支出约占9%,而以非磁盘形式存在的硬件支出约占3%,这些数据并非是不可见的,但是在系统决策时他们并没有出现很多而成为首要驱动,在使用RAC时他们必须承担其它的成本和约束限制。

在考虑这些数据时,有两个因素是很明确的:1)RAC侧重于使用通用硬件,这仅仅是全部成本的3%;2)在前面章节中所讲到的由于使用RAC所带来的额外的软件成本以及额外的管理成本将在下面的章节中进行更深入的研究。

管理成本和复杂性:随着计算机系统解决方案的增加,运行和管理成本直线上升,这也就是为什么在需求允许的情况下,操作人员在较少的系统中花费的工作负荷在不断增加。只有很少的扩展系统价格便宜,然而,在提供解决方案时要承担更多系统的额外运作成本,这些附加的工作负荷使得通用系统的成本优势不再明显,这一观点也进一步说明了前面的结论:管理成本占据最大部分的系统成本(约为58%),系统成本(非磁盘硬件)占系统成本得很小部分(约为3%)。

如果可以使用通用硬件,那就应该使用它,然而,在一个特定应用程序部署中,所有的成本都应该被明确以保证他们是紧耦合、多节点配置是改善成本的重要因素。作者曾见过有些工作负荷可以在一个单点系统中可以运行得更好,也见过有些工作负荷在集群中运行是更好的选择,正确的选择是要根据特定的应用程序来确定,然而,也必须要考虑到管理复杂性的其他情况,首先,到目前为止最为重要的,70%的中断是由管理或运行错误所导致的,很明显,良好的管理是非常重要的因素,但珍重关键的因素仍然是系统的复杂性,系统复杂性和管理错误所带来的风险之间的关系是近似线性的,系统复杂性是中断的主要原因。

系统设计者,不管他们是数据库管理系统的工程开发者还是应用程序构架师,都应该对系统开发的高扩展性负责,随着他们经验的增多,也越来越担心系统的复杂性,复杂性使得系统容易瘫痪并且是难以理解的,难以配置和难以维护的,实际上,当与高级系统设计者交流时作者想要要找的关键技能是对于谦虚和担心的有机结合,作者最感兴趣的是与有足够能力设计和运行最为复杂的系统的工程师合作,然而只要有可能,他们都努力工作来避免问题的发生,复杂性,只要能被避免,就应该避免。

调试一个紧耦合的、多系统的数据库管理系统是非常困难的,当出现问题时,往往要一直追朔到系统开发者才能找到问题的解决方案,这往往需要好几个星期的时间,一个具有10年Oracle工作经验的员工通过一个详细的分析,很简单的说明了以上问题:

在我的一生中,我曾经历过很多的集群在不知原因的情况下发生停止,当这种现象发生时,有可能使得操作系统或者集群软件产生一个记录文件/日至文件。


这些问件(通常以GB为单位)被打包给供应商,在数月之后他们会返回报告,不能查明整个集群停止或瘫痪的真正原因,但是这种现象可能会很少见,也可能会很常见。

这是经常发生的事,我真的没有真正看见过任何一个供应商可以对一个停止运行的集群或者是一个瘫痪的集群给出准确地判断和解释。

对一个复杂系统进行判断是很困难的,也是很浪费时间的,Mr. Norgaard继续说:

一种有效的方法是:如果你使用一个独立的Unix box,那么在一年之内,它通常保持99.9%的有效性(有人认为是99.5%,有人认为是99.9%),他仍然正常的运行,使用Oracle的系统也是如此,如果使用的是一个双节点的Unix集群,运行一年之后的有效性将会降低至98%。

是的,的确很惊奇,两个主要的原因是,在集群和RAC中增加的复杂性(特殊的代码层,特殊的硬件等)将会导致许多额外的停止,这将会延长导入集群、启动RAC,以及运行一些其它的管理任务的时间,

基于集群的数据库管理系统是复杂的软件系统,因此,在安装、配置、升级和调试时要更加细心,Orbitz RAC配置的失败就是一个在有故障的前提下进行调试的例子[EWK04],并且导致了非常严重的系统中断。尽管导致中断的真实原因还没有被完全明确(这通常也是导致集群错误的原因),而重新使用Oracle的单点系统则可以完全解决这个问题,同时会产生这样的疑问:应用程序是否需要将RAC作为首选方案。在这个例子中,在后续的报道中没有产生主要错误,有点讽刺意味的是,似乎单点系统要比多点系统更为有用,很明显,其实并非如此。然而,这样的现象却一再的重复出现,复杂的系统很难得到发展。

所有的主流数据库管理系统都是有缺陷的,并且都会偶尔出现问题,因此冗余是很重要的,必须解决单节点的错误,并且最为重要的是,要不断地消除系统中的复杂性,如果出现难以消除的故障,错误将会迅速增加并且难以控制,在联机数据处理的时代,要想将一周的错误进行恢复几乎是不可能的。
[ 本帖最后由 xiaoxinlucky 于 2008-1-24 15:59 编辑 ]



最全面的资料《SQL Server数据管理》
2008-1-24 15:582楼
[ 顶部 ]
 
xiaoxinlucky
助理工程师  点击可查看详细


十二生肖之鼠   双子座   行业勋章   技术勋章   诚信兄弟  
帖子 602
精华 12
无忧币 2017
积分 1390
阅读权限 40
来自 (保密)
注册日期 2007-12-12
最后登录 2008-6-21 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-1-24 16:06 


QUOTE:
总结
在第2节中,我们研究了有用性解决方案,结论是,与RAC那样的单系统映像集群解决方案相比,日志传送是一个更好的有效性解决方案。幸运的是,包括Oracle在内的主要的数据库管理系统供应商们都提供这种技术。在3.1中,侧重的则是性能和扩展优势,结论是单点系统也可以有效的支持数据库工作,对于这些工作来说通常需要多个数据库管理系统,这至少存在两种观点:1)依赖于像Oracle RAC 那样的单系统映像数据库管理系统;2)使用中间层缓存和其它的扩展技术。在前面介绍的章节中,像RAC那样紧耦合、基于集群的解决方案所产生的成本包括用户许可成本、使用常规硬件所产生的潜在成本,以及为了寻找更深入的解决方案所带来的管理复杂性。

在下一章节中,将选择介绍基于多终端系统的扩展数据库管理系统工作负荷,需要了解的是:1)多节点解决方案是否是必须的;2)如果多节点解决方案是必须的,是选择配置最优的、管理最简单的、成本最少的共享磁盘集群解决方案,还是其它更为合适的技术?


QUOTE:
3.2中间层缓存与扩展技术
如前面所列举的依赖于紧耦合集群引起的成本、健壮性以及性能约束,在任何可能的情况下都是值得反思的。一般地,至少有两种方法可以用来扩展应用程序,而无须依赖于紧耦合数据库集群,它们是:1)中间层缓存技术,2)数据分割技术。这些技术架构通过使用多个常用硬件系统被用来扩展数据库的承载能力,从而支持应用程序的扩展,这也减少了使用主机的成本,降低了复杂性以及避免了由于使用紧耦合系统引起的单点失败。更进一步来说,它避免了迁移到紧耦合、单系统镜像数据库管理系统的一般趋势,从而降低了由单个管理过失、错误或者系统缺陷可能带来的部分或整个系统崩溃的可能性。事实上,在健壮性得到增强的同时,管理的灵活性也大大提高,正是这样使得若干高强度承载能力的系统采用了这些技术。

例如,eBay公司采用分割技术对它们极其严格的联机事务处理系统进行缓存处理,而没有采用RAC技术,即便他们作为Oracle的客户或者他们很容易地选择并执行单点或RAC方案。

接下来让我们更详细地介绍一下这些可选择的技术。

可选择的技术架构-----中间层缓存:这是一种很普通的技术,而且很多应用也已经采用了一些通用的中间层缓存技术。例如,在标准的部署中,SAP就使用了一种通用的中间层数据缓存层。其他一些应用则采用了主内存缓存或者主内存数据库技术,其中最为著名的也许当属TimesTen了。很多J2EE供应商提供了基于框架的方案,就像微软公司提供了.NET框架一样。这种缓存技术以独特的方式支持.NET框架,因为SQL Server 2005紧密集成于.NET框架中,数据库中被监控的数据一旦发生变化,缓存失效就从数据层被发送到缓存以保持其最新。在这种方法中,事实上用来载入缓存的查询可以在SQL Server中以通知机制被注册。当数据发生改变时,SQL Server发送缓存失效到中间层。SQL Server2005中对这种通知机制作出了限定,使得只有在查询结果真正发生改变时才会发出通知。其它的实现以表粒度的方式对变化进行跟踪,而不是以表内的特定查询作为跟踪范围。相应地,通知机制也随之变化。保持最少程度地通知机制以及当数据发生改变时从SQL Server直接产生通知,显著地提高了缓存失效的效率。

数据库减载的另一个相关方法是从一个事务性服务器复制数据到另一个只读传送服务器。这种方法对于那些高负载的情况常常是有效的。

缓存是一种有用的工具,它可以使应用程序的健壮性和可扩展性得到很好地保障。事实上,在几乎所有的高扩展性电子商务站点中,缓存被作为它们应用程序扩展策略的一种砝码。

可选择的技术架构-----分割系统:另一种常用来实现扩展数据存储层的方法是分割数据库技术。大多数高扩展系统采用了下面的两种分割技术,当它们最初没有充分采用分割技术时。第一种形式是功能分割。采用功能分割技术的系统从应用程序的不同组件中分离出数据到不同的数据库中。例如,相对于订单系统来说,客户信息系统更可能被存储在不同的数据库中。功能分割技术是相当容易实现的,并且是非常有效的,因此许多应用程序无不采用这种方案。

第二种形式的分割是基于范围的(range-based)或基于哈希的(hash-based)分割技术。这种技术应用的时候需要较多些的工作,但它是非常高效的,而且当应用时会提供相当可观的灵活性。

基于范围的分割技术通过允许用户把大量收集数据(通常存在于单个表中)拆分到多个更小的、更易管理的块中。它是通过识别适当的分割点并明确基于每一个块所管辖的分割点的数据范围。这些块被称为分割区,并且这些分割区的所有集合作为一个范围分割表被收集起来。

在很多工作负荷下很好地运行的另一种分割形式是基于哈希的分割技术。这种方法通常应用于高扩展性电子商务站点中。基于哈希的分割技术允许表分布于潜在的大量数据库后端,并有优势来消除查询延迟和更新热点。通过使用这种技术,很多数据依赖点被选择用于中间层,以便决定哪个分割可以被操作。在很多运行良好的系统中,这种分割信息并不是以硬编码的方式存于中间层的,而是在中间层启动时从数据库中载入,如图6所示。



如图6所示的模型允许一个工作负荷分布在多个服务器上,并且它允许通过更新存储在数据库中的配置信息和重新载入分割信息到中间层中的方式来完成分割重配置。

更进一步来说,还有两个小方面的提升可以使系统既具有动态性又具有快速适应性。第一个方面是支持在线重配置。这种方式的分割可以在不影响任何系统可用性的情况下完成离线、迁移及在线工作。这可以通过以下方式很容易地被控制:为每一个分割在一个位置上引入两种状态:1)离线,2)在线。每一个分割被注册于位于这两个状态其中的一个的分割数据库中。每一个中间层在可调的间隔内检查配置的变化。如果它们不能载入配置数据,那么它们就会离线。如果没有发生配置变化(仅使用一个配置生成数),那么它们就什么都不做。如果发生了配置变化,那么它们就会更新自己的路由表。因为每一个中间层保证每N分钟更新自己的配置数据,因此一个分割可以在N分钟带来离线。使用这种技术,现在分割可以在服务器间独立地被管理和迁移。然而,这种数据迁移的粒度仍是相当大的,仍然需要更进一步的细化。


QUOTE:
如前所述的架构带来的问题描述如下:如果你有8个服务器以及8个分割,并决定更新系统从8个服务器升至10个服务器,那么使工作负荷分布于所有的10个服务器是不可能的。其解决方案是跨越式分割,如图7所示。



在前面的例子中我们使用了跨越式分割,而不是拆分表到8个分割区中。我们可以使用更大的数量来说明。任何数量都可以运行,只要分割的数量多于可提供服务器的可能数量。分割的数量应当充分地大,以使得分割离线所引起的维持业务运营的影响最小。通过跨越式分割技术,当新增加一批服务器时,数据也会很快地并且很容易地重新分布于新服务器中。如果一个系统发生故障,数据可能会重新分布于其他服务器中,而不会给其他服务器的性能带来本质上的影响。

既支持基于哈希的分割又支持基于范围的分割是有用的,这是因为前者带来了很好地数据分布,后者则是带来很多管理上的优势。这两种分割策略都是有用的,尽管与作者一起工作的很多客户在最初时常常选择只实现基于哈希的分割。

报表统计是通过定义跨越所有服务器的视图以及从每一个表中的所有分割区中收集结果来实现的。

这种技术带来一个约束即交叉服务器操作应当最小化。选择高度相关的分割被存储在同样的服务器中的通用分割策略是明智的,这样也使得交叉服务器更新操作最小化。显然,这样会在一定程度上限制了应用,但反过来看,受益的则是巨大的管理灵活性。在大多数应用程序的生命周期中,在运行及管理上的花费通常数量级地多于在最初编写应用程序的花费,这通常是一个好的权衡,也正是被在MSN运营中心的高扩展性应用所采用的架构。

使用基于哈希的分割与跨越式分割,一个应用程序最初可以被部署在一个服务器上。如果应用程序是受欢迎的,则可以在不做改变的情况下被部署在多个服务器上。每一个服务器通过使用日志传送可以互相保护对方,因此不会存在任何系统、数据库或硬件可用性的削弱或丧失。系统可以每次一个地独立升级。回归升级可以毫无约束地完成,即使在不同的数据库版本之间,甚至在不同数据库版本的元数据发生改变时。因为每一个系统都是完成自治性的进行管理,因而也就在失败、管理错误等方面独立。

这种方法构建于单个系统数据库中,而不是更复杂的、集群的系统,因此也是更为健壮的方案。因为每一个数据库都是100%独立的,所有潜在的失败都是被包含的。不存在会使整个系统崩溃的失败模式,诊断问题也不需要那些稀缺的、费用昂贵的集群数据库专家。也不再需要为每一个CPU支付使用复杂软件的成本$60,000。

事实证明,这种技术被当今市场上的一些集群数据库管理系统采用作为其实现架构,它也是很多高扩展性的电子商务站点构建的基石。起初实现这种方案需要作一些工作。错误独立性、管理节点自治性以及随工作负荷改变时的快速增长或衰退的灵活性的这些特性,对于那些紧耦合集群的可用性风险是无法实现的、类似主机的软件成本的集群数据库管理系统也是无法承担起的高度动态的工作负荷来说是一个理想的方案。


QUOTE:
3.3可负担起的性能总结
作者一直认为可扩展数据库管理系统集群很好地解决了很多应用问题,然而对于某些问题来说却有些大材小用,不是具有最好成本效益的方法。很多应用工作负荷可以在花费较少成本的情况下被部署在单个SMP系统中,仅使用了较少的数据库管理系统软件和维护成本以及最小限度的管理复杂性。当单个数据库管理系统不能提供足够的峰值空间时,存在两种方案:一种是构建于分割和(或)缓存的基于应用的方案,另一种是数据库管理系统宿主方案,如Oracle RAC。这两种方法都可以用来解决数据层扩展问题。通过理解每一个设计方法带来的约束来作出适当的选择,同时在成本、复杂性、应用约束方面作出适当的权衡。很多权衡已在前面作了概述。很多高扩展性电子商务系统选择分割与缓存技术来实现他们的可扩展性需求,而这不会带来额外的运营或管理复杂性。

4.总结
共享磁盘集群数据库管理系统被认为是解决应用程序可扩展性和健壮性问题的一种潜在方案,如Oacle实体应用程序集群RAC。本文讨论了适用性的最佳解决方案,它没有单点系统的错误并且能够支持geo-集群,Oacle实体应用程序集群RAC是位于数据库管理系统与磁盘之间的提供单点故障功能的成百万行的共享软件,它作为一种可用性解决方案是不合适的,而它更适合作为一种多点扩展的解决方案。最健壮的可用性解决方案是基于日志传送的,包括Oracle在内的三个主要的数据库管理系统提供商,都提供基于这种方法的系统。Oracle的数据保护、IBM的日志传送以及微软SQL Server的日志传送和数据库镜像,都是很好的可用性解决方案。在获得数据库有效性方面,共享磁盘集群既不是最经济的也不是最有效的方式,如Oracle RAC。

在将近十年前,这项技术首次被提出并且在市场上的名称尚未统一时,Oracle RAC最初的设计出发点是多点扩展,之后这项技术得到了很好的应用。从健壮性角度考虑,如果RAC被使用,那么我们就可以认为扩展性解决方案可以与日志传送(例如数据保护)结合起来,从而达到更高的可用性。

在确定对于一个特定的应用系统来说多系统集群是否合适时,需要考虑整个成本因素。其中,有几个因素是非常重要的:1)在大型可扩展数据库硬件系统中,磁盘子系统的成本占全体硬件成本的绝大部分,在产品部署中RAC需要的也是非通用的磁盘子系统;2)在大型可扩展部署中,在硬件成本中管理成本占有很大的比重,后端数据库管理系统的复杂性也明显地影响这些成本;3)在使用多点集群时数据库软件成本会升高,像RAC这样的单系统镜像集群就变得非常重要。这并不是说在解决可扩展负荷时多系统数据库管理系统解决方案就是不合适的。在许多应用中他们仍然是很好的选择。

当多节点数据库解决方案要实现应用系统的目的时,可以使用两种常用的方法,第一种方法是完全委派于数据库管理系统,依赖于集群数据库管理系统,如RAC。另一种方法是利用数据导向的路由和中间层缓冲来进行数据分割。第二种方法需要增加应用程序设计投入,但如果采用这种方法,会产生更健壮的、更低成本的、更强大的应用灵活性。对于很多应用程序来说,可负担的、可扩展的、最健壮的方案是分割技术。这些应用系统的设计技术在较多的细节中作出介绍。

全球可扩展性电子商务系统需要相邻的连续的可用性,然而可扩展的需求在部署阶段是很难预测的,典型地采用分割技术来实现可扩展性和节点自治性,采用日志传送技术来实现可用性需求。

本文重点介绍了高扩展性、数据集中的应用程序的两个重要特性:1)应用可用性,2)可负担起的性能。RAC最初的设计点是多节点可扩展性,但它并不是解决应用程序可用性的理想选择。
       
幸运地是,所有主要的数据库管理系统供应商,包括Oracle公司,都提供了更适合的技术来实现这个目标。我们推荐使用这些方法。在部署高扩展性、数据集中的应用工作负荷时,如果仅考虑性能,RAC是一个可取的选择;而文章中也展示了存在的更多的更具有成本效益的架构方案可供使用。

参考文献
[ASKTOM04] Ask Tom Q & A
http://asktom.oracle.com/pls/ask ... :F4950_P8_DISPLAYID,F4950_P8_CRITERIA:22006637216777

[BURK89] Burkes, D., and Treiber, K. 1989. Design approaches for real time recovery. Presentation at the 3rd International Workshop on High Performance Transaction Systems (Pacific Grove, Calif., Sept.).

[DB203] DB2 Log Shipping
http://www-106.ibm.com/developer ... is/0304mcinnis.html

[EWK04] If Oracle RAC Crashed Orbitz, Can We Trust 10G?
http://www.eweek.com/article2/0,1759,1429002,00.asp

[FORE02] Oracle 9i RAC Adoption Rate Is Slow, Unlikely To Change Soon
http://www.forrester.com/go?docid=19456
[ 本帖最后由 xiaoxinlucky 于 2008-1-24 17:15 编辑 ]



最全面的资料《SQL Server数据管理》
2008-1-24 16:063楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号