利用 IBM Application Pattern for Java 部署到云中

在几分钟内构建和部署 Java 虚拟应用程序

IBM Application Pattern for Java 允许您轻松将现有的 Java 应用程序移到基于云的环境中,并使它能够作为一个平台或一个可修改的模板进行重用。您能了解这个模式是如何工作于 IBM 云产品的,并通过利用分步指南(包括两个视频演示)开始在各种使用场景中创建、部署和监控 Java 虚拟应用程序。

Chris Bailey, Java 支持架构师, IBM

Chris BaileyChris Bailey 是位于英国的 Hursley Park Development Lab 的 IBM Java Technology Center 团队成员。作为 IBM Java 服务和支持组织的技术架构师,他负责支持 IBM SDK for Java 用户交付成功的应用程序部署。Chris 还参与收集和评估新需求,交付新调试功能和工具,改进文档并提高 IBM SDK for Java 的质量。



2012 年 11 月 20 日

云计算的目标之一就是让开发人员降低理解和管理软硬件基础架构的复杂性,使他们能够专注于应用程序的功能。这个目标通过基础架构即服务 (IaaS) 云和平台 (PaaS) 云在不同程度上得到了实现。IaaS 云提供了硬件并允许您携带自己的软件。PaaS 云还额外提供了软件,通常允许您关注于构建和部署应用程序、代表您处理基础架构和中间件的部署。本文简单调查了在云中运行 Java 的一些 PaaS 和 IaaS 选项,然后通过 IBM Application Pattern for Java 深入研究了 IBM 为您提供了什么。

云中的 Java 应用程序

大多数的云供应商都允许或支持在其云产品中使用 Java 技术。Amazon EC2 就是其中的一个例子,它实际上是一个 IaaS 云。您可以部署 Amazon Machine Images (AMI),Amazon 将其描述为 “一种特殊类型的预设置操作系统和虚拟应用程序软件,用于在 Amazon Elastic Compute Cloud (EC2) 中创建虚拟机”。也就是说,您需要部署一个包含了所需软件的自构建映像或预构建映像,并可包括一个 Java 运行时。

接下来的另一个例子是 Microsoft Azure 和 Salesforce.com Heroku。二者都是 PaaS 云,提供了软件环境并允许运行 Java 应用程序。不过,这二者中只有 Heroku 通过启用 OpenJDK 6 提供了 Java 运行时。对于 Azure,您必须提供自己的 Java 运行时。

Google App Engine 和 Amazon Elastic Beanstalk 提供了大多数的产品应用。您无需担心虚拟机和软件的安装;只需提供自己的应用程序即可。不过,您可以只运行基于 Web 的应用程序,而且这两项服务均对应用程序的功能强加了一些限制。


部署到 IBM 云中

IBM SmartCloud Application Services 的免费试用版

IBM SmartCloud Application Services 通过 developerWorks 提供了一个 90 天的 免费试用版,您可以部署多达 5 个虚拟机,并最多使用 30GB 的存储。这个试用版为您提供了对 IBM Application Pattern for Java 以及 Web Application、Transactional Database 和 Data Mart 模式的访问。这意味着您可以立即开始将您自己的应用程序部署到 IBM 云中,也可以只是尝试使用样例应用程序模板中的一个。

IBM 的做法是提供一整套 IaaS 和 PaaS 类型的功能技术。IaaS 类型的功能示例是部署虚拟设备的功能。虚拟设备是使用标准的 Distributed Management Task Force (DMTF) Open Virtualization Format (OVF) 规范的某个映像中的预打包的软件堆栈,包含操作系统、软件应用程序、中间件 、应用程序和额外的库以及用来配置和启用软件堆栈的元数据。它还支持使用脚本来重新配置此设备中包含的软件堆栈。

而更加类似 PaaS 的功能是由两种类型的工作负载模式提供的,即 虚拟系统 模式和虚拟应用程序 模式:

  • 虚拟系统模式是一种以拓扑为中心的部署定义。Pattern Editor 使您能够通过定义一些虚拟机映像、将在这些虚拟机映像上安装软件组件和配置虚拟机映像所需的脚本包(元数据)来定义一种拓扑。为此,您可以使用手动创建的虚拟机、导入的虚拟机或者是一些 IBM Hypervisor Edition 映像。一旦为反复出现的拓扑和用来安装应用程序的配置脚本创建虚拟系统模式,就可以将它重用为一个标准的平台。
  • 虚拟应用程序模式是一种以应用程序为中心的部署定义。Virtual Application Builder 使您能够配置应用程序本身、使用组件(包括数据库连接、消息队列等)所需的资源定义,以及包括可伸缩性、服务水平协议 (SLA) 等在内的策略。

图 1 展示了这三种部署到 IBM 云的机制:

图 1. 部署到 IBM 云的机制
部署到 IBM 云的机制。虚拟设备在一个堆栈中汇总了操作系统、应用程序和元数据。虚拟系统模式是虚拟设备的集合。虚拟应用程序模式是以应用程序为中心的。

表 1 对比了这三种部署机制各自的特点:

表 1. 部署机制的比较
虚拟设备虚拟系统模式虚拟应用程序模式

OS 上的标准软件安装和配置

传统监管和管理模型

基础架构驱动的弹性

通过扩展/捕获创建的映像

现有应用程序的标准的总体拥有成本 (TCO)

中间件技术的自动部署

传统监管和管理模型

应用程序和基础架构驱动的弹性

针对虚拟化应用程序而改进的 TCO

使用专家模式的高度自动化部署

利用弹性的工作负载管理服务

业务策略驱动的弹性

为云环境而构建

适用于云应用程序的最佳 TCO

IBM 云产品

虚拟设备、虚拟系统模式和虚拟应用程序模式在所有这三种 IBM 云产品中都可以使用。这些云产品既包括 IBM 提供的公共云,也包括用于私有云的集成了软硬件的设备:

  • IBM SmartCloud:IBM SmartCloud 是 IBM 托管的云,它可以是私有云,特定于某个给定的客户,也可以在完成配置后成为公共云。您可以将它想象成为 IBM 提供的云解决方案
  • IBM Workload Deployer:IBM Workload Deployer 是一个硬件设备,提供了相应的配置和管理,可以将虚拟设备和工作负载模式部署到用户提供的硬件上,使现有的硬件资源具备云功能。您可以将它想象成为自带的云
  • IBM PureApplication System:IBM PureApplication System 是一个优化了工作负载的集成式软件和硬件设备(提供了配置和管理功能),以及优化了的硬件,工作负载将部署在该硬件中。您可以将它想象成为云套装解决方案

这三种产品使用了相同的部署和管理机制,这意味着能够轻松的将应用程序从一个产品到另一个产品,并且有可能采用使用了两个或多个部署产品的混合模型。


IBM Application Pattern for Java

IBM Application Pattern for Java 是一种虚拟应用程序模式,使您能够轻松而又快捷地将新的和已有的基于 Java 的应用程序部署到 IBM 云中。过程之所以简单是因为提供了预定义的构建块,而且还内置了一些默认功能。提高了速度;大多数 Java 虚拟应用程序均可在三秒内完成构建!

Java 虚拟应用程序的构建块

IBM Application Pattern for Java 目前提供五种简单的构建块,您可以用它们创建一个新的 Java 虚拟应用程序。它们使您能够部署应用程序和应用程序所需的额外的库或配置文件、配置对内防火墙和对外防火墙,并将应用程序日志文件添加到所提供的监控框架中:

  • Java 应用程序:这个组件能够提供并配置 Java 应用程序的主要部分。您必须为应用程序提供包含了已编译的 Java 应用程序代码的归档文件,比如,ZIP、TAR.GZ 或 TGZ 文件。在提供了应用程序之后,就可以声明用于说明应用程序运行方式的适当方式了:Main method(比如 com.ibm.sample.HelloWorld 以及所有参数和额外的类路径项)或 Command line(如果某个启动脚本,比如 /bin/start.sh,启动了您的应用程序)。

    Health Center

    IBM Monitoring and Diagnostic Tools for Java - Health Center 是一个免费的低成本的诊断工具,可监控运行在 IBM Java Virtual Machine 上的应用程序。该工具作为 IBM Support Assistant 的一部分。IBM Application Pattern for Java 使用了它的 "late attach" 功能让您能够在运行时就开始监控。

    除了可以配置部署中的 Java 应用程序外,您还可以选择添加 JVM Policy,使用它来改变基础 Java 运行时的配置。您可以设置 Java 堆的最大和最小值、启用调试模式、启用 Health Center 监控或添加其他的 Generic JVM Arguments。调试模式或 Health Center 监控的启用还会导致打开必要的防火墙端口,您可以限制连接到 Java 应用程序的 IP 地址的范围。

  • Additional archive file:这个组件使您能够向虚拟应用程序添加文件,可通过提供一个包含其他文件的归档文件来完成。该组件可以是一个按原样部署到指定位置的 Java 归档文件(比如 JAR、WAR 或 EAR),也可以是一个包含其他文件的普通归档文件(比如 ZIP、TAR.GZ 或 TGZ),随后需要将它解压缩到指定位置。Java 归档文件对于添加额外组件(比如 JDBC 驱动器)很有用,或者在主 Java 应用程序的一个应用服务器(比如 Apache Tomcat),因此在需要部署一个 Web 应用程序时,该方式也非常有用。在添加或覆盖默认的配置文件(比如 server.xml 文件)来更改默认的端口使用或添加 userID 时,普通归档方式是非常有用的。
  • Generic listener:默认情况下,所部署的应用程序不允许任何网络流量的进出。而 generic listener 组件让您能够进入网络浏览并配置防火墙。请注意配置这个防火墙,且不会导致 HTTP 服务器的重新部署。但它的确允许您使用 IP/网络掩码来限制可以连接到此应用程序的 IP 地址的范围。
  • Generic target:generic target 与 generic listener 相对应,用于配置网络连接。同样能够指定应用程序连接的 IP 地址或 IP 地址范围。比如,如果应用程序连接到某个数据库,则需要通过 generic target 来允许进行此连接。
  • Monitored file:monitored file 组件使您能够将一个或多个文件添加到 IBM SmartCloud、IBM Workload Deployer 和 IBM PureApplication System 用户接口提供的工作负载在控制台的 Log Viewer 中。monitored file 组件允许使用通配符,如果需要将多个文件或目录添加到 Log Viewer,则允许添加多个已监控的文件组件。例如,/logs/*.log 会将 logs 目录中以 .log 为后缀的所有文件添加到 Log Viewer。

这五个简单组件的组合使得构建和部署大量基于服务器的 Java 虚拟应用程序成为了可能。

专家集成:默认功能

除了提供了一组可用来轻松部署应用程序、配置 JVM、允许使用对内和对外的网络连接、监控文件的组件之外,这个模式还为基于部署 Java 应用程序的专业知识构建了大量默认功能。其中包括:

  • 生命周期监控:在 IBM SmartCloud、IBM Workload Deployer 和 IBM PureApplication System 的工作负载控制台中监控和显示 Java 应用程序的状态。这个 UI 显示了应用程序是否运行、出现故障(以非零返回码退出、因 crash 或 OutOfMemoryError 故障),还是退出。如果出错,那么预定义的日志、监控和首次故障数据捕获 (FFDC) 功能可以帮助您判断错误发生的原因。
  • 预定义记录和监控:除了监控通过 Monitored file 组件提供的必需监控之外,所有已经部署的应用程序都具有通过 Log Viewer 捕获的 stdoutstderrverbose:gc 数据。预定义监控可以通过 Virtual Application Console 中的 Monitoring 选项卡进行使用,而且您也可以连接 Health Center 实时监控工具。如果在启动时未通过 JVM Policy 启用 Health Center,那么可以在运行时启用它。
  • 预定义 FFDC:如果错误出现在所部署的应用程序中,那么某些数据集是预先定义的。这包括适当生成 javadump 和系统转储文件,以及针对系统转储自动运行的 jextract 实用工具。

创建一个 Java 虚拟应用程序:Hello World

利用所提供的构建块和默认功能创建一个 Java 虚拟应用程序是一个相对简单的任务。我将使用传统的 Hello World 例子来显示如何使用 IBM Application Pattern for Java 创建和部署一个 Java 应用程序。

如何构建和部署应用程序

在部署应用程序之前,需要编写它,然后将其打包为一个归档文件(ZIP、TAR.GZ 或 TGZ)。清单 1 显示了 HelloWorld 的一个简单实现,它添加了一个延时,然后退出,以便为连接监控工具提供时间:

清单 1. Hello World 示例
package com.ibm.sample;

public class HelloWorld {

    public static void main(String[] args) {
        /* Print "Hello World!" to stdout */
        System.out.println("Hello World!");
        try {
            /* Sleep for 5 minutes */
            Thread.sleep(5 * 60 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

编译完此代码后,就有了一个必须添加到 ZIP 文件的 com.ibm.sample.HelloWorld.class 文件。HelloWorld.zip(可通过 下载 获得)只包含一个文件: /com/ibm/sample/HelloWorld.class。

有了这个应用程序后,下一步就是使用 IBM Application Pattern for Java 创建一个新的虚拟应用程序:

  1. 使用 Patterns -> Virtual Applications 打开 Virtual Application Pattern 面板。
  2. 从 Virtual Application Patterns 下拉菜单中选择 Application Pattern Type for Java 1.0
  3. 单击 + 按钮创建一个新的虚拟应用程序。
  4. 单击 Start Building 按钮,开始从空白模板构建一个新的应用程序。

Virtual Application Builder 会在一个新的窗口打开。它的左手边包含可用组件的调色板,中间是构建应用程序的画布,右边是配置应用程序组件的面板。完成如下步骤,如图 2 所示,为 HelloWorld 创建虚拟应用程序:

  1. 将一个Java 应用程序小部件从调色板拖到画布。
  2. 还可以选择在 Name 字段中为此 Java 应用程序填上一个名称(比如 HelloWorld)。
  3. 从配置面板中的 Archive File 字段,浏览到 HelloWorld.zip 文件在您本地系统上所在的位置。
  4. 从 Application 启动类型列表中选择 Main Class
  5. 在 Main Class 下,为您的应用程序指定主类的名称(在本例中为 com.ibm.sample.HelloWorld)。
  6. 使用 Java 应用程序的小部件上的 + 图标随意添加一个 JVM Policy。使用配置面板中的滑动条来配置 Java 堆的大小,选中 Enable Health Center 框来启用 Health Center 监控。
图 2. 在 Virtual Application Builder 中构建 Hello World 的步骤
在 Virtual Application Builder 中构建 Hello World 的步骤

单击左上角的 Save 保存 HelloWorld 的虚拟应用程序,给它提供一个名称和描述。

返回 Virtual Application Pattern 窗口,部署这个新的虚拟应用程序:

  1. 从左侧的应用程序列表中选择 HelloWorld 应用程序。
  2. 单击 Deploy 按钮。
  3. 选择适当的环境概要文件或云组,并单击 OK

正在部署应用程序,不久即可使用它!

如何监控您的应用程序:日志文件

部署完应用程序后,它就会出现在 Virtual Application Instances 面板中。下列步骤(如图 3 所示)让您能够监控 Java 应用程序部署的状态:

  1. 选择 Instances -> Virtual Applications 打开 Virtual Application Instances 面板。
  2. 确保已选中 Virtual Application Instances 下拉菜单中的 Application Pattern Type for Java 1.0

    在左侧面板中应该会列出所有已部署 Java 虚拟应用程序及其状态的高级视图:Running、Stopped 或 Error。要获得有关您的虚拟应用程序的更多细节,请执行以下操作:

    1. 从左侧面板中选择应用程序。
    2. 单击 VM Status 下的 Log 链接打开 Log Viewer。
    3. 单击 Manage 图标打开 Virtual Application Console。
图 3. 启动 Virtual Application Console 的步骤
启动 Virtual Application Console 的步骤

在 Log Viewer(如图 4 所示)中,可使用左侧面板中的三个视图来浏览已部署应用程序的日志文件。下列步骤显示了 Java 应用程序自身的日志文件:

  1. 从三个视图中选择 JAVA -> /opt/java-deploy
  2. 选择 stdout.log 在主面板中显示来自应用程序的 "Hello World!" 消息。
  3. 有选择地选择 verbosegc001.log 来查看垃圾收集历史。
  4. 有选择地选择文件名右侧的下载符号来下载此文件。
图 4. 在 Log Viewer 中查看日志文件的步骤
在 Log Viewer 中查看日志文件的步骤

任何转储文件以及使用 Monitored file 小部件添加到 Log Viewer 的任何文件都会显示在视图的这个部分。

如何监控应用程序:实时监控

在 Virtual Application Console 中,有下列选项可以使用:

  • Monitoring 选项卡用于查看已部署应用程序的资源使用情况的实时监控
  • Logging 选项卡用于打开 Log Viewer
  • Operation 选项卡可对正在运行的应用程序进行修改

IBM Application Pattern for Java 使您能够启用将要附加到应用程序的 Health Cente,即便没有通过 Virtual Application Builder 中的 JVM Policy 对其进行配置。使用下列步骤(如图 5 所示):

  1. 选择 Operation 选项卡。
  2. 从可用操作列表中选择 JAVA 项。
  3. 扩展 Attach Health Center 条目。
  4. 有选择地指定该 Health Center 能够连接的端口。
  5. 有选择地指定此 Health Center 客户端能够从哪个 IP 地址或 IP/网络掩码进行连接。
  6. 单击 Submit 按钮。
图 5. 在运行时启用 Health Center 监控的步骤
在运行时启用 Health Center 监控的步骤

IBM Support Assistant 中提供了 IBM Monitoring and Diagnostic Tools for Java - Health Center 客户端,可以将它连接到应用程序,以便提供对应用程序正在做什么的低开销监控。它还提供了一个请求将要生成的转储文件的路由,并启用了更高级别的数据收集,比如分配分析。


Java Virtual Application Pattern 的使用场景

以便利的方式使用 HelloWorld,展示将 Java 应用程序作为虚拟应用程序部署的步骤。但 HelloWorld 并不是一个应用程序的实用示例,尤其是当将它部署到基于服务器的云环境时。现在,我将提供一些更为有用的示例,展示如何通过 IBM Application Pattern for Java 将现有应用程序移动到云中。它们都基于的是开源 Java 应用程序的使用,所以您可以尝试这些示例,无需花费许可成本。

开源中间件:Apache Tomcat

通过提供中间件作为应用程序的一部分,您可以使用 IBM Application Pattern for Java 创建一个虚拟应用程序或任何基于 Java 的中间件。这方面的一个良好示例是部署 Apache Tomcat 和一个 Web 应用程序。您可以采用两种方式完成此操作:将二者捆绑到您上载到 Java 应用程序组件中的某个归档文件中;或者将 Apache Tomcat 作为 Java 应用程序进行部署,并使用 Additional archive 组件部署此 Web 应用程序。第二种方法通常更可取,因为它不要求处理归档文件,并且您也可以将 Apache Tomcat 配置保存为一个模板,仅添加此 Web 应用程序来创建一个新的虚拟应用程序。

作为一个练习,您可以创建一个 Apache Tomcat 7.0.27 的部署,并在 Virtual Application Builder 中单独添加一个 Web 应用程序样例。从我随本文一起提供的 Apache.org 和样例 Web 应用程序 (simpleapp.war) 中下载并保存一个 Tomcat 归档(参见 下载)。然后遵循下列步骤(如图 6 所示):

  1. 将一个 Java 应用程序小部件从调色板拖到画布,使用它作为 Tomcat 服务器。为它提供一个名称(比如 Apache Tomcat 7.0.27 Server)。
  2. 在 Archive File 配置字段中,浏览到刚刚从 Apache.org 下载的 Tomcat 归档(例如 apache-tomcat-7.0.27.tar.gz)。按原样使用此文件;无需对它做任何变更。
  3. 选择 Command Line 作为此 Java 应用程序组件的 Application 启动类型,并指定 Tomcat 启动脚本,比如 /apache-tomcat-7.0.27/bin/startup.sh。该脚本就是用来启动 Tomcat 服务器的启动脚本(在 apache.org 的下载中提供)。
  4. 添加一个 Generic listener 方法是将它从调色板的 Assets 下的 Other Components 拖到画布,并配置它,以便允许在端口 8080 上进行连接。该端口会在防火墙内打开,以便在 Tomcat 将要侦听的端口 8080 上进行对内连接。
  5. Monitored file 从 Other Components 列表拖动到画布,并配置它,以便监控 Tomcat 日志文件,比如 /apache-tomcat-7.0.27/logs/*.log。这会将 Tomcat 创建的日志文件添加到 Log Viewer 中。使用 *.log 通配符意味着它会挑选该目录中的所有 .log 文件:catalina.log、manager.log 等。
  6. 添加一个额外的归档文件来部署此 simpleapp.war Web 应用程序。为它提供 /apache-tomcat-7.0.27/webapps/ 的部署路径值,并选择 Java 归档文件作为归档文件的类型。
图 6. 在 Virtual Application Builder 中构建 Apache Tomcat 部署的步骤
在 Virtual Application Builder 中构建 Apache Tomcat 部署的步骤

现在就有了一个具有可部署的 SimpleApp Web 应用程序的 Apache Tomcat 实例。部署它之后,就可以在提供的 IP 地址和端口 8080 上使用它(http://IP address:8080/ 会给出 Tomcat 首页)。

一个更丰富的 Web 应用程序虚拟模式

IBM 提供了一个专用的 Web Application Pattern,它提供了将 Web 应用程序(以及企业应用程序和 OSGi 应用程序)部署到云中的一组更丰富的功能集,包括配置好的到数据库的连接和消息队列,以及负载均衡的自动伸缩。但是,如果您想要在云中运行一个特定的应用服务器(比如 Tomcat),那么使用 IBM Application Pattern for Java 就具实现该操作的一种简便方法。

与其添加额外的归档文件组件并用 Deploy 路径配置它,但不添加 Web 应用程序,还不如添加 SimpleApp Web 应用程序。随后可以将此虚拟应用程序保存为一个可重用的模板,并使用 Additional 归档文件选项作为此模板中惟一未锁定的(可修改的)字段。后续用户可以根据标准的 Tomcat 7.0.27 概要文件创建自己的应用程序,使用该功能添加到自己的 Web 应用程序。

基于云的负载测试:Apache JMeter

IBM Application Pattern for Java 的另一个使用场景是基于云的负载测试,因此要为负载测试 Web(或其他)应用程序部署基于云的引擎。为此,您可以使用 IBM Application Pattern for Java 来部署 Apache JMeter,并使用它的服务器负载测试引擎功能。

假设您已经从 Apache 下载并保存了一个 JMeter 归档,遵循下列步骤(如图 7 所示)在 Virtual Application Builder 中的服务器模式下创建 Apache JMeter 2.7 的部署:

  1. 从调色板中拖入一个 Java 应用程序 小部件作为 JMeter 服务器。您可以为它提供一个名称,比如 Apache JMeter 2.7 Server。
  2. 在 Archive File 配置字段中,浏览到已从 Apache.org 下载的 JMeter 归档,比如 apache-jmeter-2.7.tar.gz。您无需对这个下载进行任何更改。
  3. 从 Application 启动类型列表中选择 Command Line,并在 Command Line 字段中输入 /apache-jmeter-2.7/bin/jmeter-server -Jserver.rmi.localport=6437。该脚本就是启动 JMeter 服务器的启动脚本(在来自 apache.org 的下载中提供),还提供了一个设置 RMI 连接端口的额外选项,而不是使用一个随机分配的端口(这会导致防火墙问题)。
  4. 在 1099 上为 RMI Registry 添加一个 Generic listener,在 6437 上为 RMI 连接添加另一个 Generic listener(使用 localport 选项指定)。需要两个 Generic listener 是因为您只能在每个侦听器内指定一个端口。RMI Registry 的默认端口是端口 1099,RMI 连接端口会使用命令行上的 Jserver.rmi.localport=6437 选项指定。
  5. 在 9080 上为托管了将要测试的这个 Web 应用程序的应用服务器添加一个 Generic target。0.0.0.0/0.0.0.0 的服务器 IP/网络掩码允许使用任何应用程序-服务器 IP 地址。如果 generic target 组件具有端口 9080,则意味着它能将流量发送到目标服务器上的端口 9080,用 Web Application Pattern 部署的应用程序将会使用此端口。在您不知道目标应用程序的位置时,这非常有用。您还可以将其限制为特定的 IP 地址或 IP 地址范围。
  6. 拖入一个 Monitored file,并将其配置为监控 JMeter 的日志文件,比如 /jmeter-server.log,默认的 JMeter 日志文件显示了通过服务器运行的加载测试的状态。
图 7. 在 Virtual Application Builder 中构建 Apache JMeter 部署的步骤
在 Virtual Application Builder 中构建 Apache JMeter 部署的步骤

在完成 JMeter 服务器应用程序的部署之后,就可以从 JMeter 的一个客户端/桌面安装运行一个负载测试,方法是使用 -Jremote_hosts=comma-separated server list 选项来启动此客户端,并使用 JMeter Client UI 中的 Run -> Remote Start 选项从云中的服务器加载测试。

在部署作为 Web Application Pattern Type 2.0 模式的一部分提供的 "Sample Web application only" 样例时,可以运行一个样例 JMeter 测试计划(参见 下载 和相关脚注),并使用以下步骤:

  1. 使用 JMeter 服务器部署的地址从命令行运行 JMeter,例如:
    jmeter -Jremote_hosts=172.17.108.222
  2. 在 JMeter 中,单击 File -> Open 打开一个测试计划。
  3. 选择 SampleWebAppTestPlan.jmx 文件。
  4. 从左侧面板中的三个视图内选择 Test Plan -> Thread Group -> HTTP Requests Default
  5. 将主面板中的 Web Server: Server Name or IP address 修改为您所部署的 "Sample Web application only" 样例端点的地址部分。sample.
  6. 将 HTTP Request: path 修改为 /webapp/ 之前的端点地址的其他任何部分。
  7. 选择 Run -> Remote Start -> JMeter Server Address 来启动测试。

下列步骤使您能够了解负载是否由 "Sample Web application only" 样例驱动的:

  1. 对于已部署的样例,请选择 Manage 来启动 Virtual Application Console。
  2. 选择 Monitoring > Middleware
  3. 从此列表中选择 Web 应用程序项,比如 Web-Application-was.11342004774648。

主面板应随后显示一组图片,可使用它们来监控已部署的 Web 应用程序。如果 Web 应用程序从 JMeter 服务器中接收负载,那么 Web Application Request Count 图片应该显示正接受服务的请求,如图 8 所示:

图 8. 测试负载下的一个样例 Web 应用程序部署的 Web Application Request 视图
测试负载下的一个样例 Web 应用程序部署的 Web Application Request 视图

其他用例

除了使用 Apache Tomcat 和 Apache JMeter 的虚拟应用程序部署之外,还可以为其他许多用例和中间件创建虚拟应用程序。这些用例和中间件包括:

  • Eclipse Jetty
  • JBoss
  • Apache ftpServer
  • Apache Derby
  • Apache MINA

通常,使用第三方中间件创建任何新的虚拟应用程序是需要了解使用 generic listener 和 generic target 配置对内和对外以及防火墙端口。如果产品文档并未列出需要打开的端口,那么您就可以部署应用程序并查看 SocketException 的产品日志,或者本地部署该产品,以便使用像 netstat 这样的工具来查看哪些端口正在使用。

为了帮助您入门,本文提供了用于 Tomcat 和 JMeter 的模板(参见 下载),而用于 Eclipse Jetty、JBoss、Derby、ftpServer 等的模板可以从 IBM Application Pattern for Java 博客获得(参阅 参考资料)。要使用此模板,只需下载适当的中间件包,通过 Virtual Application Builder 将其上载到 Java 应用程序组件,并单击 Deploy


结束语

从真正意义上讲,IBM Application Pattern for Java 既不是 IaaS,也不是 PaaS。它所提供的部署需要任何应用程序的灵活性涉及到一个权衡:用户必须定义一些拓扑,并(在需要中间件服务时)提供中间件。在这种情况下,它与 IaaS 的定义更为接近。不过,它的确具有不少平台特性:用来以简单而又可重复的方式部署任何纯 Java 应用程序的运行时,具有包括调优、生命周期管理和应用程序监控在内的内置专业技术。任何现有的 Java 应用程序目前都具备了轻松移至基于云的环境的潜力。完成移动后,就可以将它作为一个平台或可修改的模板进行重用,这一点使其更像是一个 PaaS 产品。


下载

描述名字大小
HelloWorld 应用程序HelloWorld.zip1KB
Apache Tomcat 7.0.27 应用程序模板Tomcat-7.0.27-Template.zip2KB
和 Apache Tomcat 一同使用的简单的 Web 应用程序simpleapp.war2KB
Apache JMeter 2.7 应用程序模板JMeter-2.7-Template.zip2KB
样例 JMeter 测试计划1SampleWebAppTestPlan.jmx6KB

注意:

  1. 这个测试计划是参照作为 Web Application Type 2.0 模式的一部分而提供的 “样例 Web 应用程序” 来运行的。您需要调整 IP 地址和路径。

参考资料

学习

获得产品和技术

讨论

条评论

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=Java technology, Cloud computing
ArticleID=846251
ArticleTitle=利用 IBM Application Pattern for Java 部署到云中
publish-date=11202012