Oracle WebLogic Server 与 Oracle Database 12c 的集成 (1)

时间:2023-01-26 21:36:45

引言

Oracle WebLogic Server 11g 引入了 Active GridLink for Real Application Clusters (RAC)。这一功能强大的软件技术同 Oracle 数据库一起通过运行时连接、负载平衡和亲和性功能简化了管理,提高了可用性并确保了快速的连接故障切换。
Oracle WebLogic Server 12c (12.1.2) 与 Oracle Database 12c 之间的紧密集成,在全局云环境中通过增强的可用性、更好的资源共享、固有的可伸缩性、轻松的配置及自动管理工具使如上功能得以增强。Oracle WebLogic Server 是唯一与 Oracle Database 12c 之间实现了这种集成程度的应用服务器。
本白皮书说明了这些独特的数据库、集群和应用服务器技术如何协作来针对您的业务实现更高的可用性、可伸缩性和性能。我们首先介绍了 Oracle Active GridLink for RAC,重点关注轻松配置、可管理性和性能。然后,我们介绍了 Oracle WebLogic Server 对 Oracle Database 12c 的几项领先特性的影响,这些特性包括可拔插数据库 (PDB)、数据库驻留连接池 (DRCP)、应用程序连续性和全局数据服务 (GDS)。

Oracle WebLogic Server 与 Oracle Database 12c 的集成 (1)
图 1:Oracle WebLogic Server 12c 与 Oracle Database 12c 的集成方式的图形描述

Active GridLink for RAC

Oracle WebLogic Server 11g (10.3.4) 引入了一个称为 Active GridLink for RAC 的单数据源实现来支持 Oracle RAC。该数据源对快速应用程序通知(FAN) 事件进行响应来提供快速连接
故障切换 (FCF)、运行时连接负载平衡 (RCLB) 以及 RAC 实例的正常关闭。在全局事务 ID 级支持 XA 亲和性。Active GridLink for RAC 在 Oracle WebLogic Server 内是作为 GridLink 数据源实现的。
通过与 Oracle RAC 的更深层次的集成,Oracle WebLogic Server 中的这个单数据源实现支持完全且不受限制地将数据库服务用作数据源的连接目标。对池中连接的主动管理基于在连接池自身上配置的静态设置(最小/最大容量、超时等等)和连接池从 RAC Oracle 通知服务 (ONS) 子系统收到的实时信息,该子系统向客户端通知 RAC 集群中的任何状态更改。
通用连接池 (UCP) Java 库已集成到 Oracle WebLogic Server 中。WebLogic GridLink 数据源利用该库来实现快速连接故障切换、运行时连接负载平衡和亲和性特性。

Oracle RAC 和 WebLogic Server 的简化配置

此新的实现通过 GridLink 数据源方法简化了 Oracle RAC 数据库与 Oracle WebLogic Server 的集成,然后该集成又降低了使用 Oracle RAC 时所需的配置和管理的复杂性。Oracle 还支持针对 RAC 环境的 WebLogic 多数据源配置。从 WebLogic 多数据源到 Grid Link 数据源的升级简单明了。它们仅涉及使用与多数据源相同的 JNDI 名称创建单个 Grid Link 数据源。此方法提高了吞吐量,同时减少了需要维护的配置构件的数目。

Active GridLink:主要特性概览

WebLogic GridLink 数据源已集成了通用连接池的快速连接故障切换功能,用以实现以下目标:
  • 快速检测故障
  • 中止和删除连接池中的无效连接
  • 针对计划内和计划外 Oracle RAC 节点中断执行正常关闭
  • 适应拓扑更改,例如添加或删除节点
  • 将运行时工作请求分配到所有活动的 Oracle RAC 实例,包括那些重新加入集群的实例
WebLogic GridLink 数据源和 JDBC 连接池利用 Oracle RAC 数据库通过 FAN 通知提供的运行时连接负载平衡功能来提高吞吐量和更高效地使用资源。
Oracle WebLogic Server 与 Oracle Database 12c 的集成 (1)
图 2:Active GridLink for RAC 负载平衡/XA 亲和性/故障切换
在 Oracle WebLogic Server 11g (10.3.6) 中,Active GridLink for RAC 支持许多 Oracle Database 11g 特性,例如,针对只读操作的应用程序连续性,以及 Web 会话亲和性。
应用程序连续性是一个通用的、独立于应用程序的基础架构,它在发生中断时对工作进行恢复,并且对许多系统、通信和硬件故障和挂起进行屏蔽。此版本仅支持只读操作。
Web 会话亲和性是适用于 GridLink 数据源的一个新的策略选件,它将在一个 web 会话中执行的数据库操作定向到同一个 RAC 实例。该技术改善了数据库利用率并提高了总体应用程序性能。

Oracle WebLogic Server 与 Oracle Database 12c 的集成

提供集成式技术平台始终是 Oracle 的整体战略的一个核心组成部分。为达到此目的,Oracle WebLogic Server 12c (12.1.2) 支持并已经过 Oracle Database 12c 的全面认证,特别是在与应用程序连续性、事务防护、数据库驻留连接池、可拔插数据库、多承租方和全局数据服务等相关的领域。Oracle WebLogic Server 是市场上唯一提供了与 Oracle 数据库的此种集成程度的应用服务器。表 1 显示了 Oracle Database 12c 的哪些功能已经与 WebLogic Server 12.1.2、12.1.1 和 10.3.6 相集成。

数据库特性

WLS 10.3.6/12.1.1/12.1.2

11G 驱动程序

11GR2 DB

WLS 10.3.6/12.1.1/12.1.2

11G 驱动程序

12C DB

WLS 10.3.6/12.1.1

12C 驱动程序

11GR2 DB

WLS 12.1.2

12C 驱动程序

11GR2 DB

WLS 10.3.6/12.1.1

12C 驱动程序

12C DB

WLS 12.1.2

12C 驱动程序

12C DB

JDBC 重放(读取/写入)

(通过 Active GridLink 读取/写入,无 XA)

(通过通用数据源和 Active GridLink 读取/写入,无 XA)

可插拔数据库(PDB)

PDB之间的动态切换

数据库驻留连接池(DRCP)

Oracle通知服务(ONS)自动配置

是(仅限 Active GridLink)

全局数据库服务(GDS)

(仅限 Active GridLink)

(仅限 Active GridLink)

(仅限 Active GridLink)

JDBC 4.1(ojdbc7.jar 文件和JDK 7)

表 1:Oracle Database 12c 对 Oracle WebLogic Server 的认证

应用程序连续性和事务防护

作为 Oracle Database 12c 中提供的关键功能,应用程序连续性是一个通用的独立于应用程序的软件实用程序,它在发生中断期间对工作进行恢复,并且对系统、通信和硬件故障和挂起进行屏蔽。Oracle 数据库是首个针对故障情况时实现最多一次执行语义 提供通用基础架构的数据库管理系统。此执行类型表示操作必须只执行一次,或者在某些情况下根本不执行。例如,在日历中添加或删除预约通常使用最多一次语义。
应用程序连续性只需要最少的工作即可针对 Oracle JDBC 驱动程序或 Oracle OCI 驱动程序启用事务重放。这些语义确保了最终用户事务按时执行并且最多执行一次。只有当发生了无法恢复的中断时,最终用户才应当会察觉到服务中断。
数据库会话中断会被屏蔽,用户不会察觉。应用程序连续性允许在系统中的其他位置安全地重试请求,且不会发生重复操作的风险,从而增强了应用程序可用性,提高了开发人员的生产效率并改善了用户体验。
Oracle Database 11g 仅对读取操作支持应用程序连续性。包含事务防护的 Oracle Database 12c 允许对本地事务进行故障切换,因此也支持写入操作。
应用程序连续性将只重放可恢复的错误,即在前台、网络、节点、存储设备和数据库的计划内和计划外中断后发生的那些错误。虽然应用程序有时会收到未反映所提交的最后一个操作的状态的错误代码,但对于可恢复的错误,应用程序连续性会重新建立数据库会话并重新提交未完成的工作。它不会在因为不可恢复的错误(例如当提交了无效的数据值时)而发生调用故障后重新提交工作。
事务防护为每个数据库事务提供了一个唯一的逻辑事务标识符 (LTXID)。可以使用该标识符来查询事务的提交结果并确保事务仅被应用一次。事务防护由应用程序连续性使用并由其自动启用,它还可以独立启用。它防止应用程序连续性重放的事务被应用多次。
要在 Oracle WebLogic Server 中使用此特性,请将 GridLink 数据源配置为以 oracle.jdbc.replay.OracleDataSource 作为连接工厂。(此连接支持 FAN/快速连接故障切换和运行时负载平衡以实现快速的错误检测和智能重新平衡。)您必须有一个数据源池以允许驱动程序在发生故障后重新连接到一个不同的实例。它不支持 XA 事务并且不能与 PL/SQL 代理验证一起使用。
Oracle WebLogic Server 与 Oracle Database 12c 的集成 (1)
图 3:在 Oracle WebLogic Server 中配置应用程序连续性

在 Oracle WebLogic Server 中应用应用程序连续性

当 Oracle WebLogic Server 首次创建一个连接时,它会在该连接上设置所有属性并启用重放。到连接池的后续连接将包括一个“begin”语句以便通过最终的 Commit 记住 JDBC 操作。当连接返回到池中时将发出一个“end”语句。下面列出了其他重要的注意事项:
  • 在连接上禁用重放 — 从所配置的 Oracle WebLogic Server Active GridLink 数据源获取连接,将此连接转换为 oracle.jdbc.replay.ReplayableConnection,然后在此连接上调用 setReplayableEnabled(false)。
  • 使用重新连接回调 — 在故障中止后,新的连接请求将触发对此已注册回调的调用,并且 getNewPhysicalConnection() 方法的 WebLogic 实现将随新连接重用以前的数据源属性。它还将触发池以更新每个 RAC 实例的统计信息并可能更新亲和性上下文。
  • 配置重放 — 要配置超时,请使用 replay-initiation-timeout MBean 参数。超时从 beginRequest 启动开始算起,持续到 Replay 结束。当 replay- initiation-timeout 的值为 0 时,不会设置超时。默认值为 3,600 秒。建议的设置是与 HTTP 超时值匹配。

针对 Oracle 驱动程序和数据库的 JDBC 重放

JDBC 重放驱动程序存储影响 JDBC 对象的内部状态的 JDBC 操作以及这些操作的参数。每个重放驱动程序对象还存储其上可能会发生后续 JDBC 操作的其他代理对象。例如,Connection 对象存储它已创建的所有 Statement、PreparedStatement 和 CallableStatement 对象以及它们已创建的所有 ResultSet 对象。
为减少内存消耗,JDBC 重放驱动程序会根据需要清除所记录的操作。应用程序在使用 ResultSet 和 Statement 后会通过标准 JDBC 调用正确将它们关闭。
JDBC 重放驱动程序会清除所存储的操作历史记录和所有与 Statement 或 ResultSet 相关的特定于重放的对象(例如校验和、游标重放上下文)。当 Statement 或 ResultSet 已关闭且没有绑定的活动事务时,此清除包括 PreparedStatement 和 CallableStatement。如果连接已关闭,还将清除这些对象。
Oracle WebLogic Server 与 Oracle Database 12c 的集成 (1)

图 4:应用程序连续性的工作原理

如图 4 中所示,客户端应用程序请求被传递到 Oracle WebLogic Server,然后使用 JDBC 重放驱动程序传递到 Oracle 数据库。
  • JDBC 重放驱动程序发出请求中的每个调用。
  • 发生 FAN 计划外或计划内中断或可恢复的错误。FAN/FCF 然后中止死掉的物理会话。
  • 应用程序连续性开始重放并执行以下操作:
    • 使用新的干净的会话替换死掉的物理会话,并且在重放期间或之后再出现错误时重新连接 FAN
    • 通过使用事务防护确定正在进行的事务的输出(如果已打开了一个)来准备重放
    • (可选)使用标签回调或重新连接回调针对初始状态进行回调
    • 重新建立数据库会话,恢复事务性和非事务性状态,并验证在每个步骤客户端驱动程序所看到的数据和消息与客户端可能已看到的并可能基于其进行决策的数据和消息是否相同
    • 结束重放并返回到运行时模式
    • 提交队列中的最后一个调用
  • 这是发现中断时进行的最后一个调用。在重放期间,只有此调用可以执行提交。在重新建立会话的中途进行提交将导致重放中止(自主事务除外)。
  • 响应返回到应用程序。
如果重放成功,则应用程序可以在屏蔽问题的情况下继续执行。如果重放不成功,则应用程序将处理原始错误。