ibm websphere_使用WebSphere DynaCache开发用于IBM Cognos集成的高性能API

ibm websphere

在当今的API经济中,将API应用于业务解决方案和体系结构设计的接受率很高。 但是,对API的质量因素的关注并不多。 如果您认真对待业务解决方案的质量,则需要认真对待所构建的API的可伸缩性,可访问性,性能和安全性。

说到性能,在某些情况下,API可以与所有类型的数据源和服务集成,并且依赖于可能在几秒钟内不返回响应的后端服务。 该后端服务可能成为您API客户端的瓶颈,因此可能影响整个业务解决方案。

例如,在数字营销领域,丰富的用户界面(UI)调用从IBM Cognos报表中提取数据的API。 由于数据处理以及商业智能逻辑的复杂性,执行时间可能只有几分钟。 无论如何,对于面对关键业务应用程序的最终用户来说,这是不可接受的。

您可以构建一个性能优于其后端服务的API吗? 答案是“是”。 您可以通过将WebSphere DynaCache充分利用到API设计中来实现此目标,并使该资产具有与缓慢的后端服务集成的高性能API,从而可以在类似的业务场景中高度重用。

用于Cognos BI报告的RESTful API概述

Cognos Business Intelligence(BI)可以创建报告并分析来自各种数据源的数据。 Cognos BI模块由许多组件组成。 Cognos Report Studio用于编写报告并将其发布到Cognos BI服务器。 您可以通过Cognos门户访问这些报告。

Cognos BI还允许使用Cognos Mashup Services通过REST和SOAP以编程方式访问已发布的报表。

如图1所示,Cognos Mashup Service(CMS)为个人提供了远程访问报告的基本可访问性。 但是,对于为成千上万的用户服务的高需求业务应用程序,除了现成的CMS提供的服务之外,您还需要解决可访问性,可伸缩性和数据质量。

图1. Cognos Mashup Service界面概述
Cognos Mashup Service界面概述

在以下各节中,我们将讨论如何使用REST为现有Cognos报表构建API。

Cognos Report Studio中编写的每个报告均由用户提供的唯一名称标识,以标识报告。 此外,Cognos Framework Manager会为每个报告生成唯一的ID,该ID也可用于标识报告。 客户端应用程序需要此唯一搜索路径或唯一ID来调用报告。

以下是使用报告名称及其路径来调用报告的示例URL结构:

http://webservername:portnumber/<cognos contextpath>/rds/reportData/path/<report name with 
the complete path>?reportOption1=value1&reportOption2 = value2&p_parameter1=
value1&p_parameter2=val2...

以下是使用报告ID调用报告的示例URL结构:

http://webservername:portnumber/<cognos context path>/rds/reportData/report/<unique report id>
?reportOption1=value1&reportOption2 = value2&p_parameter1=value1&p_parameter2=val2...

报告采用各种报告选项,其中一个这样的选项是fmt=DataSet.

此报告选项允许以XML格式提供Cognos报告的结果,该XML格式仅包含数据,但不包含报告布局。 有关各种报告选项,请参考Cognos mashup文档

从Java应用程序访问Cognos报告

在本教程中,我们将展示如何使用简单的HTTPClient访问Cognos报表,而无需将任何Cognos SDK依赖于该应用程序。 但是,您可以使用Cognos SDK进行更多控制和复杂操作。 有关使用Cognos SDK的信息 ,请参考Cognos文档

清单1显示了通过Apache HTTPClient库调用Cognos报告URL的示例应用程序。

清单1.通过HTTP调用Cognos报告
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost(<hostname>, <port number>, "http");

// parameter strings are application specific parameters separated by &

String cognosReportUrl = http://webservername:portnumber/<cognos context
path>/rds/reportData/report/<unique report id>?fmt=DataSet” + parameterString;  


GetMethod reportUrl = new GetMethod(cognosReportUrl);
client.executeMethod(reportUrl);

String xmlReturnString = getResponseBodyAsString(redirect.getResponseBodyAsStream());
	
reportUrl.releaseConnection();

如果Cognos服务器是安全的,则不要使用http ,而是使用https并进行多个HTTP调用进行登录以执行报告,然后最终注销。 对于登录和注销到Cognos URL,可以使用以下格式: https://webservername:portnumber/<cognos context path>/rds/auth/logon

登录凭据作为XML字符串传递。 有关更多详细信息,请参考Cognos Mashup Service文档 。 图2显示了从API客户端到具有各种数据源连接的Cognos报表的交互

图2.用户应用程序与Cognos报告中的数据集成
将用户应用程序与Cognos报告中的数据集成

使用WebSphere DynaCache框架

默认情况下,DynaCache框架是WebSphere随附的服务。 这是一种轻量级的缓存解决方案,适用于分布式应用程序以利用您的缓存需求。

动态缓存在应用程序服务器Java™虚拟机(JVM)中工作,拦截对可缓存对象的调用。 例如,它通过servlet服务方法或命令执行方法拦截调用。 它要么将对象的输出存储到高速缓存,要么从动态高速缓存提供对象的内容。

在本教程中,我们将使用cachespec.xml缓存对象。 首先,您需要在WebSphere中启用动态缓存。 然后,您可以创建一个cachespec.xml文件并将其放置在Web模块的WEB-INF中。

WebSphere安装中打包了一个默认的高速缓存监视器企业应用程序(EAR)。 您可以根据需要部署和配置此EAR。 它为用户提供了一个简单的UI,用于监视缓存对象并从缓存中使它们无效。 图3显示了在运行时通过WebSphere Cache Monitor缓存的对象及其属性的示例。 有关使用cachespec.xml设置动态缓存的信息 ,请参阅可缓存对象文档

图3.通过缓存监视器的运行时缓存对象的属性
通过缓存监视器的运行时缓存对象的属性

放在一起

现在,您可以从Cognos报告中检索数据并将其与您的应用程序集成。 下一个问题是如何提高性能。

在许多情况下,Cognos报告可能通过跨分布式系统获取复杂数据来构建分析,因此该报告可能需要几分钟才能运行。 如果将这些报告集成到应用程序中,那么让用户等待这么长时间不会增强用户的交互性。 下一节讨论如何将Cognos报表与用户应用程序集成以更快的速度执行。

从前面的部分中,您已经了解了如何在用户应用程序中集成来自Cognos报表的数据。 我们还简要讨论了WebSphere提供的DynaCache。

对于需要长时间运行的报表,动态缓存非常有效。 除了常规的按需API服务之外,您还可以安排选定的API在非高峰时段运行,以便将那些高需求和长期运行的报表对象预加载到动态缓存中。

当用户请求应用程序从报表中加载数据时,应用程序将查找DynaCache并从缓存中加载内容,从而立即将数据呈现给用户。 您可以设置高速缓存以在数据过时时启用生命周期并丢弃它。 图4显示了DynaCache如何工作以增强Cognos API的性能。

图4.使用WebSphere DynaCache增强应用程序性能来缓存报告数据
使用WebSphere DynaCache增强应用程序性能来缓存报告数据

创建CognosReportHelper POJO来封装逻辑并使用HTTP客户端调用Cognos报告。 然后,实现了扩展com.ibm.wbephere.command.CachealeCommandImpl CognosReportCacher类。 此类包含XML字符串格式的报告数据,并且是在DynaCache中为每个唯一的报告实例缓存的数据。 isReadyToCallExecutedperformExecute这两个方法对于在此类中实现至关重要。 performExecute方法是通过在CognosReportHelper类上调用暴露的方法来调用Cognos报表的地方(请参见图6)。

然后,用户应用程序代码将调用CognosReportCacher上的execute方法(参见图5),该方法继承自CacheableCommandImpl

注意:本教程中的示例代码仅供参考。 建议针对您的生产用途进行进一步的定制和测试。

图5. CognosReportCacher的示例代码
CognosReportCacher的示例代码
图6. CognosReportHelper的示例代码
CognosReportHelper的示例代码

在用户应用程序中,如图7所示调用Cognos报告。

图7.用户应用程序的示例代码
用户应用程序的示例代码

图8展示了示例代码的序列图。

图8.序列图
顺序图

清单2显示了cachespec.xml定义。

清单2. cachespec.xml定义
<?xml version="1.0"?>
<!DOCTYPE cache SYSTEM "cachespec.dtd">
<cache>
	<cache-entry>
		<class>command</class>
		<sharing-policy>not-shared</sharing-policy>
		<name>com.myservice.cognos.reports.CognosReportCacher</name>
		<cache-id>
			<component type="method" id="getReportKey">
				<required>true</required>
			</component>
			<timeout>604800</timeout>
			<inactivity>604800</inactivity>
		</cache-id>
	</cache-entry>
</cache>

getReportKey()cachespec.xml对于DynaCache框架所需的回调方法。 该功能用作缓存ID,为缓存中的报表对象提供唯一键,您可以在其中将重复的API调用路由到该缓存。 如果相同的报表由不同的参数调用,则将这些参数添加到键中以使其唯一。 如您在图5所示的示例代码中所看到的, getReportKey()返回调用者请求的完整URL。 超时参数值以秒为单位,之后该对象将从高速缓存中丢弃。

解决方案设计中的另一个重要考虑因素是缓存失效规则。 此规则指定希望缓存对象过期的方式,以便正确刷新缓存。 这应该是一项业务驱动的任务,具体取决于数据源更改的频率以及将API返回值与数据源同步的重要性。

在此示例中,数据源每周刷新一次。 因此,代替它的是由高速缓存超时(604800)制成的简单规则。 对于更复杂的方案,您可以按规则使缓存无效或设计触发器事件以通过编程方式清除缓存。 这对于具有生产强度的高性能API来说意义重大。 换句话说,您希望根据业务需求在高性能和数据一致性之间取得平衡。

升级到WebSphere eXtreme Scale

动态缓存引擎是API的基本动态缓存功能的默认缓存提供程序。 但是,如果需要扩展功能,例如事务支持,改进的可伸缩性和高可用性,则可以以额外的成本将WebSphere eXtreme Scale配置为缓存提供程序。

好消息是,您无需重写API代码即可与eXtreme Scale一起使用。 这样做的步骤是:

  1. 在应用程序服务器中分别为远程服务器和其他拓扑安装eXtreme Scale客户端或eXtreme Scale客户端和服务器软件包。
  2. 将eXtreme Scale动态缓存提供程序配置为WebSphere Application Server上的缓存提供程序。
  3. 重新启动服务器。

结论

本教程介绍了如何通过REST使用Cognos Mashup Service将应用程序与来自现有Cognos报表的数据集成。 此外,它还展示了如何使用WebSphere DynaCache来缓存报表数据以获得更好的性能。

您可以使用慢速后端服务将此解决方案扩展到其他集成方案。 一旦使用了DynaCache配置,无论后端服务如何,都可以保持相同的集成模式。 要获得更多的缓存容量,建议您将默认的缓存提供程序WebSphere DynaCache替换为WebSphere eXtreme Scale作为可插入服务提供程序,以避免为该开关重写API。


翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/1507_xie-trs/1507_xie.html

ibm websphere

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值