热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ibmwebsphere_使用WebSphereDynaCache开发用于IBMCognos集成的高性能API

ibmwebsphere在当今的API经济中,将API应用于业务解决方案和体系结构设计的接受率很高。但是,对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//rds/reportData/path/the complete path>?reportOption1=value1&reportOption2 = value2&p_parameter1=
value1&p_parameter2=val2...

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

http://webservername:portnumber//rds/reportData/report/
?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(, , "http");// parameter strings are application specific parameters separated by &String cognosReportUrl = http://webservername:portnumber/path>/rds/reportData/report/?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//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定义



commandnot-sharedcom.myservice.cognos.reports.CognosReportCachertrue604800604800

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



推荐阅读
  • 1.WebServicea.定义:WebService是一种跨编程语言和跨操作系统平台的远程调用技术b.三大技术:XMLXSD,SOAP, ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 初学SpringBootch06接口架构风格 RESTful
    ch06-接口架构风格RESTful1.1认识RESTful1.1.1RESTful架构风格1.2RESTful注解1.3RESTful风格的使用1.3.1加入Maven依赖1.3 ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • Spring Boot基础教程 ( 五 ) :构建 RESTful API 与单元测试
    首先,回顾并详细说明一下在下面我们尝试使用SpringMVC来实现一组对User对象操作的RESTf ... [详细]
  • 博客分类:restful笔记如何保持可见性?(a)使用HTTP方法(例如GET,POST,PUT)时,其语义要与HTTP所规定的语义保持一致,并添加适当的标头来描述请 ... [详细]
  • Docker 快速入门指引
    本文最早发表于本人博客:Docker快速入门指引Docker是什么?Docker是Docker.Inc公司开源的一个基于LXC技术之上构建的Container容器引擎,基于Go语言 ... [详细]
author-avatar
tcystars_628
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有