当前位置: > Linux集群 > 云服务器 >

使用 Bluemix 缓存服务在云中构建缓存应用程序

时间:2014-11-20 12:47来源:linux.it.net.cn 作者:IT

注册使用 IBM Bluemix ™

这个云平台提供了许多免费的服务、运行时和基础架构,可以帮助您快速构建和部署下一个移动或 Web 应用程序。

作为开发人员,我们希望使用服务和运行时框架来构建、部署和管理快速云应用程序,但我们认识到,云本身的运行速度无法超过更加传统的资源。在这里,内存型缓存找到了它的用武之地。IBM Bluemix 提供了缓存服务,使您在构建云应用程序时无需过于担忧基础架构、节点、集群和代理。

为了引入 Bluemix 中提供的缓存服务,我们构建了一个示例应用程序 Airport Sample。我们的应用程序展示了如何使用 IBM Data Cache 服务和 IBM Session Cache 服务存储大量数据(在本例中为全球数千个机场的信息),如何快速地为这些服务完成 CRUD 功能(创建、读取、更新和删除)。

 

通过结合使用 Data Cache 服务和 Session Cache 服务,您可以在 Bluemix 中构建应用程序来存储大量数据并在几毫秒内完成对这些数据的检索。

在示例应用程序中,显示了完成任何 CRUD 操作的时间,并演示了该操作访问网格的速度。Session Cache 服务允许 Airport Sample 在集群场景中快速高效地处理数千个键-值对,而 Data Cache 服务允许用户快速检索和存储数据。通过结合使用 Data Cache 服务和 Session Cache 服务,您可以在 Bluemix 中构建应用程序来存储大量数据并在几毫秒内完成对它们的检索。

运行应用程序

获取代码

构建一个类似应用程序所需的准备工作

  • 一个 IBM Bluemix 帐户
  • Eclipse Java EE IDE for Web Developers
  • Java™ 代码的基础知识
  • Java Servlet 和 Java Server Pages (JSP) 的基础知识
  • WebSphere eXtreme Scale API 的基础知识
  • 一个按以下方式设置的开发环境

开发环境设置

要构建一个使用 IBM Data Cache 服务和 IBM Session Cache 服务的应用程序,必须设置正确的环境。除了安装 Eclipse Java EE IDE for Web Developers 之外,还需要安装:

  • Cloud Foundry
  • WebSphere Application Server Liberty 配置文件
  • WebSphere eXtreme Scale

安装 Cloud Foundry 客户端

在您环境中创建一个文件夹,例如 myWS 。转到 https://www.ng.bluemix.net/docs/#starters/BuildingWeb.html#install_cf 并将 cf command v6 下载到您创建的文件夹中(例如 myWS )。运行下载的文件并按照说明将它安装在同一个文件夹中。

安装 Liberty 配置文件

转到 Liberty 配置文件的 下载页面 (https://developer.ibm.com/wasdev/downloads/),将 WebSphere Application Server Liberty 配置文件 下载到您创建的文件夹中(例如 mycWS )。按照说明将它安装在同一个文件夹中。如果要求提供安装位置,可以按下 Enter 键接受默认设置。

安装 WebSphere eXtreme Scale

转到 Liberty 配置文件的 下载页面 (https://developer.ibm.com/wasdev/downloads/)。在 Liberty 配置文件搜索框中键入 extreme ,以便找到 WebSphere eXtreme Scale for Developers Liberty 配置文件 。将它下载到您创建的文件夹中,并按照说明将它安装在同一个文件夹中。如果要求输入安装位置,可以按下 Enter 接受默认位置。

在安装 WebSphere eXtreme Scale 后,可以在 wlp 文件夹中找到 wxs 文件夹。这是安装之后的文件夹结构:

部署示例应用程序

  1. 在 CloudFoundry 文件夹中创建一个新文件夹,比如 sample
  2. 从 DevOps 项目 下载 AirportSample/deploy/airportSample.war 文件,将它保存到刚创建的文件夹中,然后按照下面的说明将示例应用程序部署到 Bluemix。
  3. 转到新创建的 sample 文件夹。使用下面这个命令连接到 Bluemix。
    cf api https://api.ng.Bluemix.net
  4. 使用 cf login 进行登录。然后按照说明进行操作,输入用户 ID 和密码。
  5. 使用下面这个命令部署 WAR 文件,其中 <app name> 是一个惟一应用程序名称。
    cf push <app name> -p airportSample.war
  6. 为应用程序创建一个 DataCache 服务实例。使用下面这条命令创建该服务实例,其中 free 是服务计划名称, <service instance name> 是服务实例的惟一名称,它应该使用 DataCache 作为前缀。例如, DataCache-apsDWDemo001
    cf create-service DataCache free <service instance name>
  7. 为应用程序创建一个 SessionCache 服务实例。使用下面这条命令创建一个服务实例,其中 <service instance name> 是服务实例的惟一名称。我们使用了 airportSessionServiceDWDemo001 作为例子。
    cf create-service SessionCache free <service instance name>
  8. 在部署应用程序并且 DataCache 服务实例可用后,您可以使用下面这条命令将它们绑定在一起:
    cf bind-service <app name in step c> <service instance name in step 6>
  9. 在部署应用程序并且 SessionCache 服务实例可用后,您可以使用下面这条命令将它们绑定在一起:
    cf bind-service <app name in step c> <service instance name in step 7>
  10. 在完成绑定后,它会要求您再次运行推送命令。再次执行第 5 步。有关的更多信息,请参阅 安装 cf 命令行接口 。

测试示例应用程序

  1. 要测试示例应用程序,首先需要登录到 Bluemix。您应该在仪表板上看到已部署的示例应用程序。
  2. 要在日志中检查错误,可以单击导航面板中的 Apps ,然后选择部署的示例(在我们的例子中为 Airport Sample)。然后单击 Files and Logs
  3. 单击应用程序图标中间的链接访问该应用程序。试用一下!
    • 搜索某个机场:

      单击 Search by Airport Code 下拉框,然后选择一个机场,或者输入您自己的代码并单击 search。可以在页面底部找到搜索所花费的时间(以毫秒为单位)。

      机场搜索框 搜索应返回一个类似下图的结果: 机场结果

      点击查看大图

      关闭 [x]

      机场结果

    • 检查服务状态和空间使用:

      搜索多个机场之后,返回到 Bluemix 仪表板。在导航面板中,单击 Apps 并选择部署的示例应用程序(在我们的例子中为 Airport Sample)。在 Services 部分中,单击服务中间位置的链接调出 Service Status 页面。

    • (可选)删除示例应用程序和服务:

      在 Bluemix 仪表板中,单击应用程序框右上角中的设置图标,选择 Stop App 。单击应用程序框右上角的设置图标,选择 Delete App 。在该窗口中的 Services 选项卡和 Routes 选项卡中勾选您的应用程序和服务的方框。单击 OK 删除示例应用程序和服务。

绑定一个示例应用程序

现在已设置好环境,而且您已经熟悉 Airport Sample,可以开始构建自己的缓存应用程序了。

  1. Airport Sample 应用程序使用了 Java 代码和 WebSphere Extreme Scale Java API。关于 Node JS 示例和 REST API 的使用,请参阅我们的 DevOps 项目 中的 CacheServiceRESTSampleCacheServiceJSRESTSample
  2. 在开始之前,需要向项目添加一个新的类库。
    1. 要添加一个库,可以右键单击项目并选择 Properties 。然后从左侧选项中选择 Java Build Path 属性。选择右侧的 Add External Jars... 按钮并导航到 myWS/wlp/dev/api/spec
    2. 添加以下 jar: com.ibm.ws.javaee.servlet.3.0_1.0.1.jar
    3. 在构建上面这个库后,导航到 myWS/wlp/dev/ibm-api 并添加以下 jar: com.ibm.ws.xs.client_1.1.jar
  3. 必须与目录端点建立一个连接,使 Airport Sample 能够与 Data Cache 交换信息。

    下面给出了使用对象网格管理器连接网格所需的必要步骤。如果用户的凭据有效,则会使用该网格创建一个会话,允许 Airport Sample 使用 Data Cache。Data Cache 允许用户采用一个类似地图的 API 来存储信息。

    ObjectGridManager ogm = ObjectGridManagerFactory.getObjectGridManager();
    
    ClientSecurityConfiguration csc = null;
    if (username != null) {
      csc = ClientSecurityConfigurationFactory.getClientSecurityConfiguration();
      csc.setCredentialGenerator(new UserPasswordCredentialGenerator(username,password));
      csc.setSecurityEnabled(true);
    }
    
    ClientClusterContext ccc = ogm.connect(endpoint, csc, null);
    
    ObjectGrid og = ogm.getObjectGrid(ccc, gridName);
    ivObjectGrid = og;
    
    Session sess = ivObjectGrid.getSession();
    		
    ObjectMap map = sess.getMap(mapName);
  4. 为了让 Airport Sample 尽可能快速而且高效,以下代码支持客户端从属性文件将数据预加载到 Data Cache。Airport Sample 中的任何数据更改,都将在 WEB-INF 文件夹内的 .props 文件中反映出来。这个 .props 文件包含所有机场信息,并使用以下代码,以键-值对的形式将其传递给 Data Cache:

    点击查看代码清单

    关闭 [x]

    AirportCodes apCodes = new AirportCodes();
    Properties ivData = new Properties();
    ivData.load(this.getClass().getClassLoader().getResourceAsStream("WEB-INF/airport.props"));		
    
    if (ivObjectGrid == null) {
    	connect(null);
    }
    // Create a session to the specified grid
    Session sess = ivObjectGrid.getSession();
    
    // Create a map to load data in to
    ObjectMap map = sess.getMap(mapName);
    
    // Load the ivData into the map
    for (Object key : ivData.keySet()) {
    	
    	String raw = key + "=" + ivData.getProperty((String) key);
    	AirportData data = AirportData.newAirportData(raw);
    	if (data != null) {
    		try {  
    			map.insert(key, data);
    			apCodes.addCode(key.toString());
    		} catch (ObjectGridException e) {
    			e.printStackTrace();
    		}
    	}
    }
  5. 以下代码利用方法 getAttribute()setAttribute()

    来检索和存储会话中的数据,以便使用 Session Cache 服务实现持久存储。

    首先,该代码会使用 getAttribute() 方法检查会话能否返回所有机场代码。如果无法在会话中找到机场代码,那么它会使用 setAttribute() 方法在会话中填入机场代码。

    通过在集群场景中使用 Session Cache,会话将继续持久保存数据。在 Airport Sample 中,这特别重要,因为有数千个机场键-值对。

    if (allCodes == null) {
    			// populate the codes  
    	  	  try {
      		allCodes = ivAirportClient.getAllCodes();
    	  	  }
    	  	  catch (ConnectException e) {
    
    	  		e.printStackTrace();
    	  	  }
    	  	  catch (TransactionCallbackException e) {
    
      		e.printStackTrace();
    	  	  }
    	  	  catch (ObjectGridException e) {
    
      		e.printStackTrace();
    	  	  }
    	  	  session.setAttribute("allCodes", allCodes);
    	  }
  6. 因为它绑定到一个 Session Cache 实例,所以在部署 Airport Sample 时,Liberty 配置文件构建包会使用任何需要的配置,自动生成一个 server.xml 文件。

在本文中,我们介绍了如何与网格建立连接,以及如何使用 Bluemix 中提供的 Data Cache 和 Session Cache 服务。我们还介绍了如何开发和部署一个使用这些 IBM 缓存服务的应用程序。此外,在我们的 Airport Sample 中,我们还演示了如何记录和显示每次检索的时间,帮助用户直观地了解 Bluemix 中的缓存速度。

BLUEMIX SERVICES 在下面教程中的使用:

  • Data Cache 从缓存中快速地管理检索信息。
  • Session Cache 通过将许多 HTTP 请求存储在 session 状态信息中来提升应用程序弹性。


(责任编辑:IT)
------分隔线----------------------------