为 IBM PureApplication System 开发模式

开发虚拟应用程序和虚拟系统模式的最佳实践和技巧

Comments

IBM PureApplication System 支持两种类型的虚拟模式:虚拟应用程序模式和虚拟系统模式。

  • 虚拟应用程序模式 (VAP) 是一种工作负载级别的虚拟化模式,包括了所有有关应用程序平台的专业知识。
  • 虚拟系统模式 (VSP) 是一种拓扑级别的虚拟化模式,只包括中间件专业知识。

本文针对每个模式开发类型提供了一些最佳实践,这些都是我们在实现模式时所遇到的真实实践。

VAP 实践

本文描述的虚拟应用程序模式实践包括:

  1. 更改 Class Loader 模式和策略。这使模式开发人员能够为需要更改其 Class Loader 模式和策略的应用程序轻松构建 VAP。(Class Loader 策略控制应用程序的隔离)。
  2. 使用 FTP 服务器执行 put/get 操作。这使模式开发人员能够为需要访问外部 FTP 服务器的应用程序构建 VAP。该技巧可以应用到其他服务器,如外部 HTTP 服务器和 RSS 服务器等。
  3. 在遇到 OLTP 错误时,解决无法部署 DB/DBaaS VAP 的问题。这样会使模式开发人员了解(并避免)缺失的 OLTP 错误。

更改 Class Loader 模式和策略

在 IBM WebSphere® Application Server (WAS) 中,您可以通过更改 Class Loader 来更改加载类的顺序。

图 1. 在 WAS 中的 Class Loader
在 WAS 中的 Class Loader
在 WAS 中的 Class Loader

例如,如果您想要先加载您自己的类,则将 Class Loader 模式设置为 PARENT_LAST。在 WebSphere Application Server 中,Class Loader 模式通常在 EAR 安装后通过 WebSphere Application Server 管理控制台进行设置。

然而,在 VAP 中不允许您在部署的 VM 中更改任何配置。相反,Virtual Application Builder 中的 JVM 策略支持与 Class Loader 相关的配置。

要配置 JVM 策略,请执行下列操作:

  1. 在 Virtual Application Builder 中,将 JVM 策略添加到 Enterprise Application 上。
  2. 为 Class Loader Order 选择 PARENT_FIRST 或 PARENT_LAST,并且为 WAR Class Loader Policy 选择 MULTIPLE 或 SINGLE。
    图 2. 通过更改 JVM 策略来更改 Class Loader
    通过更改 JVM 策略来更改 Class Loader
    通过更改 JVM 策略来更改 Class Loader

使用 FTP 服务器执行 put/get 操作

如果您想将虚拟应用程序模式的应用程序连接到 FTP 服务器和 put/get 文件,则需要在 Virtual Application Builder 中定义常规目标:

  1. 在 Virtual Application Builder 中,为端口 20 和 21 定义 Generic Target,并从 Enterprise Application 组件中链接它们。
  2. 输入 FTP 服务器名称、IP 地址和每个 Generic Target 的端口号。
    图 3. 要在 FTP 服务器上执行 put/get
    要在 FTP 服务器上执行 put/get
    要在 FTP 服务器上执行 put/get

注意:要使用固定的端口连接到 FTP 服务器,您应该在应用程序中使用主动模式而非被动模式。

由于 OLTP 错误无法部署 DB VAP?

您可能会遇到一个问题:无法部署一个可能包括数据库或 DBaaS 模式的 Web 应用程序的 VAP。同时,您会碰到一个 OLTP 系统插件错误,如下所示:

! Contact an administrator to configure the "oltp" system plug-in.

! Contact an administrator to configure the "oltp" system plug-in for "IBM Transactional 
  Database Pattern" environment based on your choice for the "Purpose".

此错误是由系统插件配置不当而引起的。要更正此错误,请执行下列操作:

  1. 在 Workload Console 中,选择 Cloud > System Plug-ins > IBM Transactional Database Pattern > oltp,并单击 Configure
  2. 为 Environment 选择 Both,并单击 OK
    图 4. 正确配置 OLTP 插件
    正确配置 OLTP 插件
    正确配置 OLTP 插件

现在让我们来看一些 VSP 实践。

VSP 实践

本文中描述的虚拟系统模式实践包括:

  1. 创建 wsadmin 脚本以实现 VSP 的高效部署:创建一个数据源创建脚本和一个 EAR 安装脚本。很难在没有任何协助或说明下从头开始创建 wsadmin 脚本。凭借此技巧,模式开发人员可以轻松创建用在 VSP 中的 wsadmin 脚本。
  2. 导入并导出一个 VSP。这将向模式开发人员展示如何使用命令行界面,这是用于手动恢复脚本包和附件,以及复制迁移模式的一个非常好的方法。它还引进了 DBCS (双字节字符集)环境的概念,这可能会对模式开发人员造成阻碍。
  3. 更改 VSP 的 VM 时区设置。假使您不想使用默认的 UTC。
  4. 扩展 VSP 的 DB2 文件系统大小。当您需要一个更大的文件系统时。
  5. 将表格或数据从现有的 DB 中转移到 VSP。假使需要通过手动输入或专用工具设置 DB,以及您需要另一个 DB 中的数据。
  6. 使用已在您的应用程序中测试过的 DB2 驱动程序。显然,一个已在您的应用程序中测试良好的驱动程序,将是包含在 VSP 包中的最佳驱动程序。

使用 wsadmin 脚本部署 VSP

在部署一个虚拟系统模式时,请使用 Jython 脚本文件 (*.jy) 和 wsadmin。您可以通过使用一个来自 WebSphere Application Server 管理控制台的命令辅助功能轻松创建一个 Jython 脚本。

创建一个数据源定义脚本
要构建一个数据源脚本,请执行如下操作:

  1. 在虚拟机创建一个实例时,会自动生成下列链接:VNCWebSphere。(打开虚拟系统实例中的虚拟机部分。)
  2. 单击 WebSphere 链接。使用 UID 登录:您设置的虚拟用户名和密码。
  3. 在配置数据源时使用此示例。调用 Integrated Solutions Console 后,请在左侧菜单中选择 Resources > JDBC > Data sources
  4. 单击 Preference 部分的 New 按钮,并执行步骤 1 到步骤 5。
  5. 单击 Finish 后,在右侧窗格中单击 Command Assistance > View administrative scripting command for last action
    图 5. 命令辅助
    命令辅助
    命令辅助
  6. 复制界面中的脚本:Administrative Scripting Commands(如 AdminTaskAdminConfig)。
    图 6. 复制界面中的脚本
    复制屏幕中的脚本
    复制屏幕中的脚本
  7. 更新文件中的描述,如 createDatasource.zip 的 createDatasource.jy Jython 文件,其方法是引用步骤 6 中复制的脚本。

创建一个 EAR 安装脚本
您刚了解了如何构建一个创建数据源的脚本。现在让我们来创建一个安装 Enterprise Archive 文件的脚本。

  1. 在虚拟机创建一个实例时,会自动生成下列链接:VNCWebSphere。(打开虚拟系统实例中的 Virtual machine 部分。)
  2. 单击 WebSphere 链接。使用 UID 登录:您设置的虚拟用户名和密码。
  3. 调用 Integrated Solutions Console 后,请从左侧菜单中选择 Applications > New Application > New Enterprise Application
  4. 输入新应用程序的路径(您放置 EAR 文件的地方)。
  5. 选择 Fast PathDetailed。如果您选择 Fast Path,请执行步骤 1 到步骤 3。
  6. 单击 Finish 后,在右侧的窗格中单击 Command Assistance > View administrative scripting command for last action
  7. 复制界面中的脚本:Administrative Scripting Commands(比如 AdminTaskAdminConfig)。
  8. 更新文件中的描述,比如可以在 installApp.zip 中找到的 installApp.jy,其方法是引用步骤 6 中复制的脚本。

导出/导入一个 VAP

在一个 VAP 中,您只需单击即可导入和导出这些模块。然而,在一个 VSP 中,您需要手动恢复此脚本包和附件并通过 deployer 命令将迁移模式复制到新环境中。

要做好下列准备:

  1. 从 IBM PureApplication System 欢迎界面下载命令行工具,并将其解压到 <WORKING_DIRECTORY>(大约 8MB)。
    图 7. 下载命令行工具
    下载命令行工具
    下载命令行工具
  2. 如果您在 DBCS 环境中使用一个 deployer 命令工具,则移动到 <WORKING_DIRECTORY>\deployer.cli\lib\3.1.0.0-20111118232331。目录名称会因版本不同而有所不同。编辑注册表文件;取消注释两个行(图 8)并编辑代码集。
    图 8. 在 DBCS 环境中
    在 DBCS 环境中
    在 DBCS 环境中

DBCS(双字节字符集)环境是这样一种环境,其中字符集是由所有以两个字节进行编码的字符(包括控制符)组成,或者每个无法由附带的 SBCS 表示的图形字符均是以两个字节进行编码。DBCS 支持包含大量特殊字符或符号的国家语言,例如日语、韩语和中文。

要导出,请执行下列操作:

  1. 下载并保存主题模式的脚本包(如果有的话,可以下载和保存附件)。
  2. 移动到 <WORKING_DIRECTORY>\deployer.cli\bin,并运行一个 deployer 命令。样例命令如下所示:
    deployer -h host_IP_address -u user_name 
    -p password -f ..\samples\patternToPython.py -f xxx_vsp.py
    图 9. 保存脚本包和附件
    保存脚本包和附件
    保存脚本包和附件

选择您想从之前界面复制的主题源模式,并导出 Python 脚本 (xxx_vsp.py)(以 .py 结尾的任何一个您喜欢的文件名)用在稍后的目标虚拟系统模式中。

要导入,请执行下列操作:

  1. 既然您下载了源脚本包(以及附件),使用与原始包完全相同的名称创建一个脚本包(和附件)并上传已下载的 ZIP 文件。通过单击 Refresh 按钮确定参数是否已正确设置。
  2. 使用 deployer 命令将您在前一步骤中导出的 VSP 文件 (xxx_vsp.py) 导入到一个新的环境中。使用以下相似的命令:
    deployer -h host_IP_address -u user_name  -p password -f xxx_vsp.py

    注意:如果出现相同的模式名称,请在执行 deployer 命令之前将其删除。
  3. 将您刚导入的 VSP 部署到云中。部署后,请确定它作为一个实例正常运行。

更改 VSP 的 VM 时区设置

已部署的 VM 时区在默认情况下设置为 UTC。如果您想要更改,则需要在脚本中进行描述。(在一个 VAP 中,不允许您更改 UTC)。

如果您想要在 DB2 端将时区更改为 JST(日本标准时间),则需在 DB 创建脚本中进行如下描述。

图 10. 更改 DB2 端上的时区
更改 DB2 端上的时区
更改 DB2 端上的时区

要更改 WebSphere Application Server 端上的时区,请将下列内容放置到在 WebSphere Application Server 中要执行的第一个脚本中:

图 11. 更改 WebSphere Application Server 端上的时区
更改 WebSphere Application Server 端上的时区
更改 WebSphere Application Server 端上的时区

扩展 VPS 的 DB2 文件系统大小

如果在 VSP DB2 环境中需要进行大量的数据迁移(通常大于 20GB),那么您将会发现默认的文件系统大小并不够。您可以通过使用一个附件功能来添加一个磁盘,并增加文件系统大小。

  1. 在 Workload Console 中,选择 Catalog > Add-Ons
  2. 选择左侧窗格中的 Default add disk,并选择 Clone 图标按钮。
  3. 要创建一个新的附件,请输入一个适当的名称。
  4. 选择您刚刚在左侧窗格中创建的磁盘。
  5. 在右侧窗格中,将 Environment: DISK_SIZE_GB = 10 值更改为您所需的磁盘大小。
  6. 您可以从 Download 图标下载 defaultadddisk.zip;它包含了一个名为 adddisk 的脚本。通过引用图 12 中的样例描述来对其进行编辑。上传修改后的脚本包。
    图 12. 卸载文件系统
    卸载文件系统
    卸载文件系统

在您使用刚刚用过的脚本进行部署时,您可以使用 /db2fs 文件系统以及在 DB2 VSP 中增加的磁盘大小。

在 VSP 中转换来自现有 DB 的表/数据

如果是因为 DB 是由手动输入或专用工具进行设置,那么很难为 DB 创建和数据加载创建一个脚本。您可能需要创建一个脚本来转换来自现有 DB 的数据。

要使用 db2 backup

  1. 使用下列方法对来自现有 DB 的数据进行备份:
    db2 backup db DB_name to backup_file_name compress
  2. 创建一个脚本来从备份文件中恢复数据,并将其连同备份文件一同打包:
    db2 restore db DB_name from backup_file_name

注意:在此方法中,脚本包常常会变大,因为其中打包了备份文件。此外,此方法取决于所涉及的平台,所以诸如 IA Linuxe(低位优先)和 AIX(高位优先)Application 等不同的字节序 (endian) 之间不存在兼容。要避免这些问题,请使用 db2move 方法。

使用 db2move 方法:

  1. 从现有的 DB 中获得 DDL 文件:
    db2look -d DB_name -a -e -l -x -f -td % -o DDL_file_name
  2. 从现有的 DB 中获得数据:
    db2move DB_name export -sn schema_name
  3. 如果表格(包括出现已生成的列)导出它们:
    db2 export to table_name.ixf of ixf messages table_name.msg select * from table_name
  4. 创建一个如图 13 所示的脚本。
    图 13. 使用 db2move
    使用 db2move
    使用 db2move
  5. 将步骤 1 到步骤 3 所获得的文件与脚本一同打包,创建一个脚本包。

使用已在应用程序中经过测试的 DB2 驱动程序

您可能想使用已在应用程序中经过测试的 DB2 驱动程序,而不想使用由 PureApplication System 提供的 DB2 驱动程序。在 VSP 中,您可以通过将您想要使用的 DB2 驱动程序打包来代替它们。

  1. 将经过测试的 DB2 驱动程序 (db2jars.zip) 包含到脚本包中,以实现 DB2 驱动程序安装。
  2. 在脚本中描述下列过程,以实现 DB2 驱动程序安装:
    # Copy db2jar.zip and extract the driver files at /opt/db2 directory
    chmod 777 /tmp/script_package_name/db2jars.zip
    mkdir /opt/db2
    chown virtuser:users /opt/db2
    cp /tmp/xxxx_installDB2Drivers/db2jars.zip /opt/db2
    sudo -u virtuser unzip -d /opt/db2 /tmp/xxxx_installDB2Drivers/db2jars.zip
    # Add the DB2 driver path to the environment variable
    echo "export DB2UNIVERSAL_JDBC_DRIVER_PATH=/opt/db2" >> /etc/virtualimage.properties
    source /etc/virtualimage.properties
  3. 通过将提取的 DB2 驱动程序 JAR 设置为用于创建数据源的 wsadmin 脚本中的类路径,从而创建一个 JDBC 提供程序。
    • 用于非 XA 数据源创建的样例代码:
      AdminTask.createJDBCProvider('[-scope Cell=' + cellName + ' -databaseType DB2
       -providerType "DB2 Universal JDBC Driver Provider"
       -implementationType "Connection pool data source"
       -name "DB2 Universal JDBC Driver Provider"
       -description "One-phase commit DB2 JCC provider"
       -classpath [/opt/db2/db2jcc.jar /opt/db2/db2jcc4.jar
        /opt/db2/db2jcc_license_cu.jar /opt/db2/db2jcc_license_cisuz.jar]]')
    • 用于 XA 数据源创建的样例代码:
      AdminTask.createJDBCProvider('[-scope Cell=' + cellName + ' -databaseType DB2
       -providerType "DB2 Universal JDBC Driver Provider"
       -implementationType "XA data source"
       -name "DB2 Universal JDBC Driver Provider (XA)"
       -description "DB2 Universal JDBC Driver Provider (XA)"
       -classpath [/opt/db2/db2jcc.jar /opt/db2/db2jcc4.jar
        /opt/db2/db2jcc_license_cu.jar /opt/db2/db2jcc_license_cisuz.jar]]')

结束语

我们希望在实现面向虚拟云模式时所碰到的这些真实最佳实践,将成为您配置模式和将模式部署到云环境的一个良好的起点。


相关主题

  • 如需了解使用虚拟模式的更多信息,请访问 developerWorks 上的 PureSystems
  • 在 developerWorks 云开发人员资源中,查找和共享应用程序和服务开发人员构建其云部署项目的知识和经验。
  • 查看对 IBM SmartCloud Enterprise 可用的 产品映像
  • 查找如何 访问 IBM SmartCloud Enterprise;在 SmartCloud 上进行开发是练习 IBM PureSystems 开发的一种不错方式。

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, WebSphere, Information Management
ArticleID=831040
ArticleTitle=为 IBM PureApplication System 开发模式
publish-date=08202012