OFM Web层高可用特性
Web组件是Java EE应用中与最终用户如浏览器进行请求和响应的主要媒介。作为应用服务器的外部组件,它最贴近最终用户,与外部请求和内部响应处理进行交互,因此Web组件的设计能否高可用至关重要。在OFM中主要包括Oracle HTTP Server和Oracle Web Cache两个组件。
Oracle HTTP Server基于Apache2.2.10的基础框架设计,因此拥有Apache的所有特性,同时还有一些OFM自身的组件构成,主要包括如下:
ü mod_dms 使用 Oracle Dynamic Monitoring Service (DMS)实现站点性能监控
ü mod_onsint 提供 Oracle Notification Service (ONS) 和 OPMN的集成
ü mod_oradav 是使用C语言写的Oracle Call Interface (OCI) 应用程序,mod_oradav 对mod_dav组件进行了扩展,用于读取或修改本地文件或数据库信息
ü mod_ossl 增强了Oracle HTTP Server的加密能力,作为一个插件可以确保OHS使用SSL协议
ü mod_osso 提供对 Single Sign-on的支持
ü mod_perl 支持Perl的应用通过OHS访问
ü mod_plsql 提供Web应用通过OHS访问数据库的能力
ü mod_wl_ohs 提供应用程序通过访问OHS的代理访问WebLogic Server
Oracle HTTP Server作为OFM Web层高可用性的重要组件,可以与应用服务器和硬件负载均衡器进行无缝集成,示意图如下:
示意图说明OHS如何将请求路由分发到应用服务器。为了保障高可用性,每组OHS和WLS可以部署到不同的应用服务器,而更为复杂的情况下,OHS和WLS可以完全独立分离到不同的环境。对于故障,OHS主要有以下几种处理方式:
Process 故障 OHS的进程被Oracle Process Manager and Notification system (OPMN)所管理,当一个OHS的进程出现故障时,OPMN会自动重启该进程;
节点故障 当这个节点出现故障的时候,位于OHS前端的负载均衡器或者Oracle Web Cache会将请求转发到另外一个可用的OHS节点进行处理。
WebLogic Managed Server 故障 在集群环境下的WebLogic Managed Server发生故障时,mod_wl_ohs组件会将请求转发到集群环境中另外一个可用成员进行处理。
Database 故障 这只会发生在运行调用了 mod_oradav 或mod_plsql 组件的情况下.这时候如果后台是一个Oracle RAC的数据库集群,那么这种故障将会根据RAC的connection配置方式进行处理。如果配置为一个client connection failover,那么发生故障时所有与之相关的事务将会回滚,并打开一个新的连接进行处理;如果配置为一个Transparent Application Failover (TAF) ,那么除了与之相关的事务将会回滚外,重新打开的连接能够继续进程中未完成的查询操作。这里提及一下Oracle RAC另外一种配置方式-Fast Connect Failover(FCF)。FCF支持JDBC Thin和JDBC OCI驱动,相比TAF,FCF具有更多的灵活性。例如:可以快速为活跃/闲置的连接检测到故障。但Oracle不建议在一个应用中同时配置FCF和TAF。
Oracle Web Cache 是一个完全遵循HTTP 1.0和1.1规范的产品。因此,它可以为一些基于标准规范实现的Web服务器提升运行速度,如Apache和IIS。在OFM架构中,Oracle Web Cache可以位于一个或多个Oracle HTTP Server的前端,可以在浏览器向OHS发送请求时,给予已缓存过得响应。Oracle Web Cache 运行示意图如下:
当客户端请求第三步到达Oracle Web Cache时,如果该请求所对应的内容已经经过缓存处理,并且有效且内容已是最新时,Oracle Web Cache将直接响应客户端,这种模式称为缓存命中;如果该请求所对应的内容缓存池中没有,没有经过缓存处理,或者缓存内容已经失效或已不是最新内容时,Oracle Web Cache将请求转发至应用服务器进行处理,得到应用服务器处理后的响应后,先经过缓存处理,再返回客户端,这种模式称为缓存缺失。Oracle Web Cache作为OFM Web层高可用性的重要组件,在高可用方面主要有以下特点:
负载均衡 Oracle Web Cache 不会将客户端的所有请求都直接转发到原始应用服务器进行处理,即便请求没有命中缓存的情况。Oracle Web Cache 会平衡原始应用服务器的性能吞吐量,并为每一个应用服务器标识加权百分比,当一个没有命中缓存的请求到来需要应用服务器进行处理的时候,Oracle Web Cache会根据各应用服务器的性能吞吐量加权百分比情况,将这个新的请求转发至得分最高最为空闲的应用服务器进行处理,实现软件层面的负载均衡。
故障转移 当指定数量的请求连续遭遇失败的时候,Oracle Web Cache认为后端应用服务器发生故障已不再可用。那么新的请求Oracle Web Cache将会转发至其他可用的应用服务器进行处理。同时,Oracle Web Cache还会不断的自动的尝试测试该不可用的应用服务器状态,一旦该服务器恢复可用,Oracle Web Cache会重新为其进行性能吞吐量加权评估,并标识百分比,再次作为负载均衡可选择的可用应用服务器。
Session绑定 Oracle Web Cache支持配置为Session绑定。即将一个特定网站的用户Session绑定到某一个应用服务器,并维持一段时间的状态。但要使用此功能,源应用服务器本身必须支持用户Session的状态维护,也就是说应用服务器是有状态的。在一个客户端需要进行用户Session绑定的请求访问时,应用服务器为这个请求创建Session信息,并通过Oracle Web Cache以Session Cookie或者参数内嵌URL的形式返回客户端浏览器。当这个客户端随后的请求访问时,Oracle Web Cache会将这些请求绑定到由原始创建这个Session信息的应用服务器进行处理,实现Session Sticky。这种方式在网上购物车或银行在线业务处理场景中极其有效。
集群支持 Oracle Web Cache提供多台缓存服务器集群配置的支持。在缓存集群,多个缓存服务器组成了一个大的逻辑计算单元,为应用服务器与客户端浏览器提供缓存服务。在缓存集群中的成员之间,相互通信形成冗余保护。