69www.dell.com.cn/powersolutions数据库:Oracle可扩展性和灵活性是构建强大的业务集成体系结构时需要考虑的两个重要因素。可扩展性对于支持当前的应用程序至关重要,而灵活性是无缝适应未来变革和需求的关键。设计可扩展和灵活的业务集成体系结构需要制订战略决策。OracleStreams和OracleStreamsAdvancedQueuing(SAQ)设计提供这样的体系结构。OracleStreams可以有效地捕获数据库对象的变更并将这些变更复制到一个或多个数据库。OracleSAQ提供一个应用程序消息排队框架,它通过入队、传播和应用机制将OracleAdvancedQueuing(OAQ)功能和OracleStreams融为一体。OracleSAQ提供一个灵活、统一的框架,旨在为Oracle数据库中关键的业务集成软件构建一个即时通信层。使用基于OracleSAQ的应用编程界面(API),企业可以在OracleDatabase10g环境中高效地构建和部署复杂的应用程序。了解Oracle消息排队数据库基础设施中的队列是保存消息、通知和事件的地方。OracleStreams应用程序使用包含入队、传播和应用机制的Oracle即时通信基础设施。入队机制将消息放在一个队列中;传播机制将消息分段转发到远端的目的地;应用机制从该队列检索和使用消息。消息可以小到一个简单的字符串,也可以大到一个完整的表格。anydata类型是所有支持的消息类型的封装展示,允许一个队列处理多种消息类型,而不仅仅是一种类型。多用户队列通常描述为发布/订阅模式,其最简单的格式是一位发布者和一位用户,即单用户队列。传统意义上,基于即时通信的应用程序使用IBM®WebSphereMQ、JavaMessageService(JMS)或OAQ。基于OAQ的应用程序使用存储的程序、数据库工作和触发器来运行该应用程序即时通信流程。Oracle8i和Oracle9i中最初的OAQAPI都使用DBMS_AQ程序包构建;在OracleSAQ中,DBMS_STREAMS程序包中的一组API包含了这些最初的API,或者对它们的功能进行了扩展。DBMS_AQAPI只支持输入的单用户队列。为了充分利用DBMS_STREAMSAPI允许一个队列处理多种消息而不是一种消息的能力,该队列必须为anydata类型和多用户队列。发布/订阅模式OracleStreams允许应用程序发送不同类型的消息、将这些消息传播给订阅队列、以及通知用户应用程序可以使用这些消息。OracleStreams联合OAQ,相关类别:DellPowerEdgeDell/EMCOracleSCSI(SAS)www.dell.com/powersolutions在应用程序即时通信基础设施中使用OracleStreamsAdvancedQueuingOracle®StreamsAdvancedQueuing(SAQ)提供一个采用入队、传播和应用机制的灵活、可扩展的消息对立基础设施。本文介绍OracleSAQ,同时描述Dell工程师创建并测试的即时通信应用程序实例来展示其功能和性能,以及讨论大量可用的Oracle队列管理工具。RAMKUMARRAJAGOPALMAHMOUDAHMADIAN数据库:OracleDELLPOWERSOLUTIONS70数据库:OracleOAQ向其它即时通信子系统提供多种标准消息排队系统特性,如多用户队列、发布和订阅、基于内容的路由选择、互联网传播、转换和网关。发布/订阅模式及OracleStreams和OAQ互操作性的一个重要优势是OracleSAQ自动处理消息,无需外部API来人工处理消息。消息传播在OracleSAQ中,消息路由选择或传播由传播工作来完成。传播工作设计将消息从一个本地队列中出队,然后使用数据库链接和工作队列流程将它们入队到一个远程队列中。传播延迟缺省为3秒,这意味着在3秒的提交期间内未识别的消息将重新提交。这一参数可以进行配置,以满足不同的应用程序需求。传播规则确定那些远程队列接收一个指定的消息。每个源队列可以有一个或多个根据不同的目的队列设置的传播规则。遵循以下步骤将消息添加到本地队列、传播给多个远程队列、以及从队列中删除:1.在本地数据库中创建一个队列。该队列按预先定义的顺序,通常为先进先出(FIFO)存储消息。2.在远程数据库中创建用于接收和存储传播的消息的队列。3.创建数据库链接,允许传播工作将消息添加到远程队列中。4.创建传播工作。5.在传播工作创建期间创建规则,确定向哪些远程队列传播哪些消息。规则通常基于消息中包含的数据,例如它们可以是确定远程队列的“目的”字段。6.用户流程(最有可能是应用程序)创建和将消息添加到本地队列中。7.传播工作从本地队列中删除消息,并根据是否满足该传播工作的规则将消息添加到远程队列中。如果队列和传播都使用DBMS_STREAMSAPI来实施,那么用户可以是使用任何支持的API,包括JMS、DBMS_AQ和DBMS_STREAMS,将消息从这一队列中人工删除的流程,或者是自动化出列和处理的应用流程。缓冲队列OracleDatabase10g中的OracleSAQ为用户入队引入了缓冲机制,包括持久性(磁盘存储)和非持久性(内存存储)队列的多种优势。只要系统内存可用,缓冲队列就将消息存储到系统内存中。如果系统内存不可用,缓冲队列将消息存储到磁盘中。这类队列结合了磁盘存储的持久性和内存存储的速度。自动化应用流程OracleStreams应用程序是一个OracleStreams队列的事件的自动出列和处理。它还可以应用商业规则、处理消息中的冲突、以及将错误记录到队列表中。这一应用流程由一个或多个Oracle后台流程来执行。该应用引擎包括三个部件:一台阅读机服务器,它删除队列并将它们装配到事务处理中;一个协调器流程,它按从属顺序将消息分发给应用服务器;以及大量并行应用服务器;它们将消息应用到数据库,或者并消息传递给适当的处理器。这些流程可以直接修改数据库对象,或者将消息作为参数传递给一个管理员定义的程序,称为应用处理器。应用处理器可以采用消息处理器、DataManipulationLanguage(DML)处理器、DataDefinitionLanguage(DDL)处理器、预提交处理器、或错误处理器形式。应用流程中发生的错误或冲突由错误处理器或冲突处理器来处理。如果一个应用流程中发生一个错误,系统调用该应用流程的错误处理器;如果应用程序不能排除该错误,它回滚到该事务,并将该事务及所有消息放到一个错误队列中。应用引擎帮助简化了消息处理的编码工作,同时自动从队列中删除消息。OracleSAQ可以显著缩短创建即时通信应用程序需要的时间,因为大多数时间和资源都可以用来设计和开发业务功能、逻辑或流程,以及通过消息处理器对它们进行微调,而不是将时间用于编写程序代码来轮询、开始或向其它应用程序发送告警来处理消息。可扩展性OracleSAQ为简便、快捷地扩展即时通信应用程序提供了一个框架。OracleRealApplicationClusters(RAC)10g实现负载均衡,帮助跨多个节点分发消息。它将消息直接传递给运行流程和提供资源的节点,并自动停止向运行速度慢、系统进入睡眠状态或发生故障的节点发送消息。向一个OracleRAC10g群集添加足够的物理内存可以提升性能和可扩展性来满足应用程序需求。发布/订阅体系结构使添加新用户能够扩展容量和实现未来增长,不会导致关键应用程序宕机。开发一个OracleStreamsAdvancedQueuing测试应用程序为了展示OracleSAQ功能和性能,Dell工程师使用内置的OracleSAQ程序包开发了一个测试即时通信应用程序。测试环境由五个部件组成:基于Web的应用程序、一个两节点群集中央系统、一个两节点地区系统1(Region1)、一个两节点地区系统2(Region2)、以及一个单节点报告系统。该应用程序www.dell.com.cn/powersolutions71www.dell.com.cn/powersolutions在Dell™PowerEdge™2850服务器上使用OracleDatabase10g。Dell™PowerEdge™2850服务器采用两颗Intel®Xeon®处理器和一个Dell/EMCCX700光纤通道存储阵列。图1介绍了了测试环境的软件和硬件配置。传播流程阶段如图2所示,下列信息传播阶段已经配置:•Propagation1:从中央系统到Region1系统和Region2系统的一对多传播•Propagation2:从Region1系统和Region2系统到中央系统的多对一传播•Propagation3:从中央系统到报告系统的一对一传播应用流程阶段如图3所示,测试应用程序应用流程包括五个阶段:•Apply1:应用流程从中央系统让消息出列,消息处理器将它们传播给远端队列。•Apply2:Region1从队列中删除消息,并调用消息处理器来确认传播给中央系统的消息。•Apply3:Region2从队列中删除消息,并调用消息处理器来确认传播给中央系统的消息。•Apply4:中央系统从队列中删除消息、应用使用消息处理器的业务规则、以及将消息发送给报告系统。•Apply5:报告系统从队列中删除消息,并更新报告表。测试应用程序的整个消息排队流程涉及以下传播和应用步骤:1.Web应用程序将消息添加到中央系统的本地队列中。2.中央系统将对象转换成anydata类型。3.在Apply1阶段,应用流程使用OracleStreamsAPI删除消息,使用传播规则设置地区系统位置标识。4.应用流程消息处理器调用一个存储的程序,它将消息添加到Region1系统和Region2系统的远端目的队列中。5.消息传播流程根据应用流程中设置的位置标识验证并将消息发送到特殊的地区系统。6.在地区目的本地队列的Apply2和Apply3阶段,应用流程使用其消息规则将消息从队列中删除和调用消息处理器(一个存储的程序),它创建一条确认消息,然后将其发送回中央系统。7.在中央系统的Apply4阶段,应用流程将消息从队列中删除、应用使用消息处理器的业务规则、然后将消息发送给报告系统。1.OracleOracleDatabase10g10.1.0.5RedHat®EnterpriseLinux®AS2.1Intel3.2GHzIntelXeonDellPowerEdge28508GBDell/EMCCX700Intel2.OracleStreamsAdvancedQueuing3.OracleStreamsAdvancedQueuing数据库:OracleDELLPOWERSOLUTIONS72数据库:Oracle8.在报告系统的Apply5阶段,应用流程调用消息处理器,根据应用规则处理消息、将消息从队列中删除、然后更新报告表。测试OracleStreamsAdvancedQueuing性能关键应用程序的系统体系结构通常不能提供在系统高负载运行期间最大化可用的处理和内存资源需要的快速、灵活的工作负载均衡。企业可以使用OracleSAQ来简化即时通信和数据库操作,帮助提高资源使用率和采用各种有效的手段来扩展系统。为了展示OracleSAQ的潜在优势,2006年7月,Dell工程师对上一节中介绍的测试应用程序的性能进行了评估。Dell工程小组在以下条件下进行了测试:•所有测试都多次运行。•测试结果不包括客户机连接的网络延迟。•没有一个系统超过75%的处理器使用率或75%的内存使用率。Dell工作小组对每秒消息出队率和吞吐量进行了测量,使用一个定制的程序语言/结构化查询语言(ProceduralLanguage/StructuralQueryLanguage,PL/SQL)程序将每次测试的开始时间和结束时间记录到一个Oracle表中。这一出队率取决于与测试应用程序有关的应用程序逻辑和业务规则。测试使用基于Oracl