利用 WebSphere eXtreme Scale 和 Cognos Real-time Monitoring 实现的低延迟分析交付可操作的业务洞察

数据分析的采用带来了无尽的机会,让企业能够跨所有计算应用领域实现前所未有的业务洞察。因此,组织迫切需要实现支持多种数据分析模式的集成化信息平台。本文介绍了 IBM Cognos® Real-time Monitoring 如何利用写入基于 IBM® WebSphere® eXtreme Scale 的分布式缓存的数据来实现低延迟的分析处理。 本文来自于 IBM WebSphere Developer Technical Journal 中文版

Dr. Alan Hopkins, 高级 IT 专家, IBM

Alan 是 IBM Software Group Services for WebSphere 的高级 IT 专家,具有超过 16 年的中间件和 Internet 相关技术方面的经验。在他的职业生涯中,大部分时间都将工作重点放在事务中间件系统及其在电子商务中间件领域的应用上。最近,Alan 在专门从事业务流程集成的重要策略领域方面的研究。他尤其对基于开放标准的方法在业务流程集成领域的应用感兴趣,包括面向服务的体系结构的发展及其在基于企业服务总线的基础设施上的部署。目前,Alan 是 Business Integration Solution Services Team 的成员,该团队隶属位于英国的 IBM Hursley Park Laboratory 的 IBM Software Services for WebSphere。



2013 年 6 月 18 日

简介

在如今这个日渐物联化、互联化的世界中,生成的数据量呈指数级增长,通过分析数量如此庞大的数据能实现的潜在收益让人兴奋不已。这种兴奋之情主要源于 大数据 的承诺 — 分析海量数据,这通常是指利用批量处理的方法来处理分布在多台物理计算机的磁盘中的数据。日益流行的批量处理式分析技术的潜力纵然可观,但我们也不应忽视能与这些批量处理技术形成补充关系的较低延迟的分析方法。

事实上,图 1 展示了信息半衰期的概念(参阅 参考资料 部分),这张图片表明,从创建或更改的时间点开始,数据的价值将随着时间的推移而迅速降低。希望受益于数据分析的组织迫切需要构建一种内聚、集成的信息平台,支持跨整个 延迟频谱 分析数据。

图 1. 信息半衰期
信息半衰期

近年来,许多组织在其技术基础架构内引进了一个独立的缓存层,以此促进应用程序的外扩,从而满足不断提高的并发和响应时间要求。IBM WebSphere eXtreme Scale 提供了一种内聚的分布式缓存工具,它能够线性扩展以支持对海量缓存数据的访问。分析工具可以利用位于这种缓存中的数据,获得有关业务机遇和威胁的接近实时的洞察。因此,这项功能构成了企业集成化信息平台的基础支柱。

本文展示了利用 WebSphere eXtreme Scale 的分布式缓存功能与 Cognos Real-time Monitoring 的分析功能的近实时分析场景的实现细节。该场景旨在演示如何利用这两种产品互为补充的功能,满足企业集成化信息平台的核心需求。

本文所述场景是使用以下软件实现的:

  • IBM Cognos Real-time Monitoring Version 10.2
  • IBM WebSphere Application Server Network Deployment V7.0
  • IBM WebSphere eXtreme Scale Version 8.6
  • IBM DB2 Database Version 9.7。

低延迟分析场景

本文展示的简单用例以一个虚构的金融服务场景为中心,该场景需要实现股票交易相关指标的接近实时的分析报告功能。图 2 给出了该场景中主要组件的简要概览。

图 2. 场景概览
场景概览

在实际实现中,股票交易的处理将由一个或多个企业应用程序套件管理。为了缩短关键数据的检索延迟,许多组织在其中间件环境中引进了分布式缓存层。封装关键业务数据的事件将传播到缓存,使用户可高效地从缓存中检索这些数据。

本文的重点在于展示如何利用传播到企业中间件环境中缓存层的数据来提供基本数据,从而通过业务仪表板展示重要数据。因此,我们将利用一个简单的程序将数据传播到缓存。

Cognos Real-time Monitoring 将负责以可视化 widget 的形式聚合和呈现数据,从而生成业务仪表板视图。可以通过多种方式将数据传播到 Cognos Real-time Monitoring,本文采用的是一种基于 Web 服务的方法。从 Cognos Real-time Monitoring 的角度来看,也就是提供了一种 Web 服务机制,支持按照可配置的时间间隔从服务终端获取数据。此外,还可以通过 Cognos Real-time Monitoring 公开的 Web 服务接口,从数据源推送数据。本文的示例场景实现采用的是第二种功能。

写入 WebSphere eXtreme Scale 的数据将利用通用的直写架构模式,推送到 Cognos Real-time Monitoring。此模式的实现是由 WebSphere eXtreme Scale 提供的架构代码扩展点支持的。此处在缓存执行过程中的关键点调用了插件代码模块封装的特定方法。


场景实现细节

下面我们来看一下场景的实现。本文不会提供用于单独构建本场景的具体分布式说明。我们将仔细观察共同构成该场景的各工件。本文提供了一个包含场景工件的 zip 压缩文件,可供 下载

Cognos Real-time Monitoring 的配置

我们首先来看 Cognos Real-time Monitoring 的配置,这是 IBM Cognos Business Intelligence 套件的一个组件,专门用于支持通过可配置的仪表板实现关键业务数据的低延迟分析报告。Cognos Real-time Monitoring 提供了一系列可视化小部件,可用于组成仪表板。本场景使用了其中的多个小部件,旨在演示可用功能的广度,表 1 给出了功能汇总。

表 1. Cognos Real-time Monitoring 小部件
小部件的类型用途
条形图 每小时股票总交易量
条形图 NASDAQ 每小时股票交易量
条形图 DJIA 每小时股票交易量
条形图 FTSE100 每小时股票交易量
可向下钻取的条形图 交易价值 – 可按照市场、地区和行业向下钻取
饼图 交易类型百分比 - 购买/销售/空头
警告 在交易价值超过 1,000,000 美元时触发
速度计 相对于 SLA 范围的平均交易执行时间

入站数据流定义

为支持 Cognos Real-time Monitoring 接收外部数据源通过 SOAP/HTTP 推送而来的数据,您必须定义 Web 服务类型的入站 DataStream。可以在定义 DataStream 时指定入站数据内需要填充的字段,本文示例场景中出现的字段如图 3 所示。

图 3. Datastream 字段
Datastream 字段

为了通过 StockTradeDataStream 公开的 Web 服务接口将股票交易数据传播到 Cognos Real-time Monitoring,您需要利用 WSDL 接口规范。为此,可以使用 Web 浏览器访问以下 URL:

http://<hostname:port>/realtime/wsdl/eventstream.wsdl

其中的 <hostname:port> 表示 Cognos Real-time Monitoring HTTP 主机名和端口号。

将导出的 WSDL 接口定义保存到您的文件系统中。此定义可用于生成 Web 服务客户端,以便将股票交易事件传播到 Cognos Real-time Monitoring。通过 WSDL 服务定义生成 Web 服务客户端超出了本文的讨论范围,此处不再赘述。请注意,所生成的客户端存根将用于支持将缓存更新事件从 WebSphere eXtreme Scale 传播到 Cognos Real-time Monitoring,本文稍后部分将加以介绍。

交易量视图定义

Datastream 使用的入站数据可通过视图在仪表板对象中显示。View 构造函数允许您通过囊括多个入站事件的聚合表达式来计算度量指标。举例来说,您想在业务仪表板中以条形图的形式显示每小时的总交易量,因此需要使用一个基于入站 Datastream 的 View,这个入站 Datastream 要计算支持该 Dashboard 对象的聚合指标。图 4 展示了每小时交易量视图。

图 4. 创建视图
创建视图

表 2 给出了计算 Time_Hour 和 Hourly Volume 这两项指标的表达式。

表 2. 指标表达式
指标 表达式
Time_Hour SUBSTRING (StockTrades.DataStreams.StockTradeDataStream.tradeTime, 12, 2)
Hourly Volume SUM(StockTrades.DataStreams.StockTradeDataStream.volume)

另外请注意,我们选中了 Time_Hour 的 Group By 选项,指定每小时汇总一次交易量。

此外还定义了三个视图,支持显示 Nasdaq、Dow Jones 和 FTSE100 交易所的每小时交易量。这些视图的定义方法与前文所述的每小时交易量视图相似,但额外使用了一个如图 5 所示的 Where 筛选子句。

图 5. 其他视图
其他视图

交易量业务仪表板

Cognos Real-time Monitoring Workbench 允许您根据交易量视图定义业务仪表板对象。有多种可视化对象类型可供使用,因此您可以通过不同的方式显示数据。例如,图 6 采用柱形图显示了每小时交易量。

图 6. 交易量
交易量

维度分析

维度可以视为多级筛选器参数,可促进不同程度范围上的数据分析。计算得出的数据指标与一个或多个预定义的维度相结合,形成多维数据集。随后基于这些多维数据集,定义业务仪表板视图,以实现可视化。通过这种方法,最终用户可以通过适当的可视化方式,在最通用的维度级别查看数据,还能逐步向下钻取,查看更具体的数据。

这里的业务仪表板采用可向下钻取的条形图形式,允许用户动态向下钻取股票总交易量,按地区、市场和行业查看相关数据值,甚至查看具体一支股票的交易量。为了定义基于多维数据集的维度分析功能,必须在 Cognos Real-time Monitoring 中定义一些工件。下面简单介绍了必要的工件。

可以在一个或多个查找表中提供定义维度及其层次级别的元数据。在 Cognos Real-time Monitoring 中,访问 JDBC 代理提供的这些表。图 7 展示了 JDBC 代理的详细信息。

图 7. JDBC 代理
JDBC 代理

层次级别在可通过 JDBC 代理访问的查找表内定义。根据示例,图 8 中的屏幕快照展示了 Stocks 表的填充方式(图中仅显示了前三行)。

图 8. Stock 表
Stock 表

Cognos Real-time Monitoring 查找表中的对应定义如图 9 所示。

图 9. Stocks 查找表
Stocks 查找表

实现了基本的查找表之后,就可以开始定义维度。本例中使用的 Stocks 维度中的级别顺序如图 10 所示。

图 10. 级别顺序
级别顺序

最后,您可以定义一个多维数据集,以封装您最后希望通过业务仪表板显示的聚合指标;另外还可定义维度,用户可将其作为基础向下钻取数据。

图 11. Cognos Real-time Monitoring 多维数据集
Cognos Real-time Monitoring 多维数据集

请注意,尽管这个多维数据集的定义包含两个聚合指标,以及一个用于辅助执行动态数据分析的多级 Stocks 维度,但您还可以在一个多维数据集内定义其他维度。


可向下钻取的业务仪表板对象

在本例中,维度数据将以条形图仪表板对象的形式显示。

图 12 展示了如何在已定义维度的不同级别显示股票交易量数据。最高级别上的单一条形显示了所有股票的总交易量。再向下钻取,您可以查看所定义各地区(欧洲或美国)的交易量,还可以进一步向下钻取,查看各市场、行业乃至单独一支股票的交易量。

图 12. 维度向下钻取
维度向下钻取

交易类型饼图

定义了入站 Datastream 结构之后,您可以轻松添加更多的仪表板对象,以便利用其他显示样式。接下来,我们将增加一个饼图仪表板对象,显示购买、销售、空头这几种交易类型的百分比。

在配置时,需要为饼图仪表板对象指定两种类型的指标。第一种是 Value 指标,提供要显示的数字,另一种是用于确定饼图各扇区的类别。这个仪表板对象分别使用 Count 和 Trade Type 指标作为 Value 和 Category 参数。图 13 展示了这些指标的定义,这些指标封装在一个专用视图中。

图 13. 交易类型视图
交易类型视图

对应的饼图以百分比的形式显示了各股票交易类型的相对频率,如图 14 所示。

图 14. 交易类型饼图
交易类型饼图

高价值交易警告

Cognos Real-time Monitoring 允许定义在出现用户定义的条件时触发的警告。这个场景配置了一个警告,此警告将在单笔交易的价值超过 1,000,000 美元的阈值时触发。首先,您要定义一个视图,稍后此视图将用于确定是否触发警告。这个视图封装了将用于确定是否触发警告的数据字段,并用于填充所触发的警告中内嵌的消息。

图 15. 警告
警告

不同于我们之前考虑的结构,警告是在 Cognos Real-time Monitoring Workbench 的 Scenario Modeler 选项卡中配置的。图 16 展示了为这个警告配置的定义和订阅细节。(此处的警告被配置为仅对用户 rtmadmin 可见,警告消息的正文采用了 TradeValue 视图中的值。)

图 16. 警告细节
警告细节

触发给定警告的条件是通过将警告与业务规则相关联来配置的。同样,该值是从专门为此目的而定义的 TradeValue 视图得出的。

图 17. 警告的业务规则
警告的业务规则

交易执行时间 SLA 速度计

Cognos Real-time Monitoring 提供了 Indicator Dashboard Object 类型的选项,允许在一个量表上显示数字指标。这些指示器可以在定义时进行定制,支持根据预定义的目标和范围值显示当前值。本例中使用了一个速度计指示器,根据虚构服务水平协议中的预定义范围显示平均交易执行时间值。

这里还定义了另外一个视图,基于前文所述的 StockTradeDataStream,保存与交易执行时间相关的指标。速度计中显示的平均交易执行时间是通过以下表达式计算的:

AVG(StockTrades.DataStreams.StockTradeDataStream.duration)

在定义仪表板对象时,指定了三个范围,显示 Good、Average 和 Poor 执行时间 SLA 范围(如图 18 所示)。

图 18. 交易执行时间范围
交易执行时间范围

所得到的速度计指示器如图 19 所示。

图 19. 交易执行时间速度计
交易执行时间速度计

WebSphere eXtreme Scale 配置

下面我们来看一下如何配置 WebSphere eXtreme Scale 缓存。此处需要关注的领域有四个:

  • 股票交易缓存条目的结构
  • WebSphere eXtreme Scale 客户端程序
  • WebSphere eXtreme Scale 缓存的定义
  • 将缓存更新传播到 Cognos Real-time Monitoring。

首先要介绍的是封装股票交易事件相关细节的 Java 值对象。清单 1 展示了为保存我们关注的数据而定义的属性。(值对象还包含 getter 和 setter 方法,但此处为简便起见而忽略了这两种方法。)

清单 1. WebSphere eXtreme Scale 缓存对象定义
public class StockTrade implements java.io.Serializable
{
	String			ticker		= null;		 
   	BigDecimal		price 		= null; 
    	BigInteger		volume		= null;
    	BigInteger		duration 	= null;
   	String 			market		= null;
    	String 			type 		= null;
    	String 			sector		= null;
    	XMLGregorianCalendar 	tradeTime 	= null;
	
	.
	.
	.
}

可以为本例使用一个简单的 WebSphere eXtreme Scale 命令行 Java 程序,模拟出现股票交易事件的情况。在实际场景中,这些事件应由企业运营系统发出,但在最终插入 WebSphere eXtreme Scale 缓存时可以利用与清单 2 和清单 3 类似的客户端 API 调用。

清单 2. 模拟 WebSphere eXtreme Scale 数据源
public class WXSStockTradeClient {
	
   String cep 		= "localhost:3809,localhost:3810";
   String gridName 	= "AnalyticsGrid";
   String mapName 	= "StockTrades";

   public static void main(String[] args) 
   {
	WXSStockTradeClient client = new WXSStockTradeClient();
		
	client.execute("IBM",100.0f,1000,12,"DJIA","Buy","Technology");

	.
	.
	.
   }

execute() 方法将实例化 StockTrade 值对象,并使用 ObjectMap upsert() API 调用将其插入缓存。

清单 3. 模拟 WebSphere eXtreme Scale 数据源(续)
void execute(String ticker, float price, int volume, int duration, 
                          String market, String tradeType, String sector)
{
	StockTrade trade = new StockTrade();
		
	trade.setTicker(ticker);
	.
	.
	.
		
	try
	{
		og = getObjectGrid(cep,gridName);
		Session session = og.getSession();
		ObjectMap cache = session.getMap(mapName);
			
		session.begin();		
		cache.upsert(ticker, trade);
		session.commit();
		.
		.
		.
}

(在上面的清单中,WebSphere eXtreme Scale 的初始客户端引导程序封装在 getObjectGrid() 方法之中,如清单 4 所示。)

清单 4. 获取 ObjectGrid 的句柄
synchronized static public ObjectGrid getOG(String cep, String gridName)
{		
   if (og == null)
  {
	try
	{		
	   ClientClusterContext ccc =
                      ObjectGridManagerFactory.getObjectGridManager().
connect(cep,null,null);
					
	   ObjectGridManager ogm = ObjectGridManagerFactory.getObjectGridManager();
			
	   og = ogm.getObjectGrid(ccc,gridName);			
	}
	catch (Exception e)
	{
		System.out.println("Exception caught in 
WXSStockTradeClient.getOG() - " + e);
		System.out.println("Message = " + e.getMessage());
		System.out.println("Cause = " + e.getCause());
		e.printStackTrace();
	}			
  }		
  return og;
}

将缓存更新传播到 Cognos Real-time Monitoring

此处使用了一个定制的 Loader 插件,使您能够将缓存更改传播到 Cognos Real-time Monitoring。在为 WebSphere eXtreme Scale Grid 配置这种类型的插件时,将调用 BatchUpdate() 方法来支持将更新传播到外部系统。所提交的 API 调用以及键和值对象的详细信息是通过参数列表来提供的。BatchUpdate() 调用的频率是可以配置的。在本例中,更新将在向缓存提交更改的事务中传播到 Cognos Real-time Monitoring,以确保了最低限度的延迟。但在某些情况下,最好成批处理需要传播到外部的更新。这种 “后台写入” 缓存模式往往用于降低外部终端系统中的工作负载,如果在将缓存更新传播到外部系统时,可以接受一定程度的延迟,那么就可以考虑采用这种模式。

清单 5 展示了 BatchUpdate() 方法的主要代码元素。对于 insert()、put() 和 upsert() 调用,我们的定制代码将调用 propagateToCRTM() 方法。

清单 5. WebSphere eXtreme Scale 定制 Loader 插件
public void batchUpdate(TxID tx, LogSequence sequence)
			throws LoaderException, OptimisticCollisionException 
{
    try 
    {
        Iterator iter = sequence.getPendingChanges();
	  while (iter.hasNext()) 
	  {
	      LogElement logElement = (LogElement) 
iter.next();
	      String key = (String)logElement.getKey();
	      StockTrade value = (StockTrade)logElement.
getCurrentValue();
	                
	      switch (logElement.getType().getCode()) 
	      {	                    
	           	case LogElement.CODE_UPSERT:
	          		propagateToCRTM(key, value);
	                  break;	        
	       }
	    }           
	} 
      catch (Exception e) 
      {
	            LoaderException ex = new LoaderException(e);
	            throw ex;
	}
}

propagateToCRTM() 方法封装了一个 Web 服务终端调用,表示入站 Cognos Real-time Monitoring DataStream,使用之前从 Cognos Real-time Monitoring 中导出的 WSDL 描述。

清单 6. WebSphere eXtreme Scale 定制 Loader 插件(续)
void propagateToCRTM(String key, StockTrade value)
{		
   PublishEventSoapProxy proxy = new PublishEventSoapProxy();		
   String endpoint = "http://localhost:9090/realtime/webservice/eventstream";
   
   Descriptor descriptor = proxy._getDescriptor();
   descriptor.setEndpoint(endpoint);
		
   StockTradesDataStreamsStockTradeDataStreamInput input = new
                                   StockTradesDataStreamsStockTradeDataStreamInput();
		
   EventInfoType eventInfo = new EventInfoType();
   eventInfo.setEventname("StockTrades.DataStreams.
StockTradeDataStream");
   eventInfo.setUsername("rtmadmin");
   eventInfo.setPassword("manager");		
   input.setCqesi(eventInfo);
		
      List sqData = input.getStockTradesDataStreamsStockTradeDataStreamData();
		
   StockTradesDataStreamsStockTradeDataStreamDataType trade = new
                                StockTradesDataStreamsStockTradeDataStreamDataType();
   trade.setTicker(value.getTicker());
   .
   .
   .
   sqData.add(trade);
		
   try
   {
	proxy.
publishDataStockTradesDataStreamsStockTradeDataStream(input);
   }
   catch (Exception exc)
   {
	System.out.println("Exception caught ...."+ exc.getCause());
   }
}

业务仪表板

最后可以利用前文介绍的多种仪表板对象,组成业务仪表板(如图 20 所示)。

图 20. 完整的仪表板
完整的仪表板

在将一系列股票交易对象注入因定义多笔交易而超出高价值交易警告阈值的场景时,将会触发一组相应的警告。登录后访问仪表板时,仪表板主区域中将会显示一个 Alert Manager 指示器按钮(如图 21 所示)。

图 21. 警告指示器
警告指示器

闪烁的红色感叹号标记告知业务仪表板用户,已经触发了警告。单击 Alert Manager 按钮即可显示提供信息的消息,以及 Alert Manager 的链接,在 Alert Manager 中可以查看有关所生成警告的更多细节(如图 22 所示)。

图 22. 警告
警告

结束语

本文展示了 Cognos Real-time Monitoring 如何利用写入 WebSphere eXtreme Scale 缓存的数据。通过这种方式,组织可以利用动态数据,通过基于业务仪表板的展示方法来提供基于低延迟分析的洞察。接近实时的分析可以补充综合企业信息集成平台中其他延迟较高的分析技术。


致谢

感谢 Greg Reid 审读本文并提出许多有用的反馈意见。


下载

描述名字大小
代码样例SupportingArtefacts.zip294 KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=934389
ArticleTitle=利用 WebSphere eXtreme Scale 和 Cognos Real-time Monitoring 实现的低延迟分析交付可操作的业务洞察
publish-date=06182013