探索如何将 WebSphere sMash 和 WebSphere Virtual Enterprise 结合使用

通过成功使用 sMash 构建灵活的基础结构

仅仅因为 IBM® WebSphere® sMash 简化了 Web 2.0 应用程序的开发和部署工作,并不意味着必须牺牲集群化和高可用性。通过本文了解如何将 WebSphere sMash 应用程序 JVM 作为 IBM WebSphere Virtual Enterprise 中的集群使用,以及 On Demand Router 组件可以如何帮助您轻松地管理到这些 sMash 应用程序的请求流。 本文来自于 IBM WebSphere Developer Technical Journal

John Pape, WebSphere Application Server SWAT 团队, EMC

John Pape 目前供职于 WebSphere SWAT 团队,并致力于为利用 WebSphere Application Server、WebSphere Portal Server 和 WebSphere Extended Deployment 的客户提供危急情况 (crit-sit) 支持。此角色需要关注细节并保持“标新立异”的创新思维,并始终确保 IBM 客户获得尽可能最好的支持!


developerWorks 投稿作者

2009 年 4 月 15 日

引言

IBM WebSphere sMash 是流行的基于 Web 2.0 的、面向 SOA 的平台,并以 Project Zero 为基础帮助快速部署应用程序和 Mashup。WebSphere sMash 设计用于消除复杂性,让开发人员集中精力解决问题。不过,消除复杂性需要付出一定的代价。为了简化应用程序开发和运行时平台,需要牺牲高可用性和集群化之类的功能。好消息是,这个空白可以通过使用 IBM WebSphere Virtual Enterprise 中的通用服务器集群概念结合 On Demand Router 的特殊路由策略予以填补。

通用服务器集群是不属于 WebSphere 托管计算单元环境的服务器端点的表示形式。定义通用服务器集群相当简单,包括创建新集群、命名以及定义将用于处理 HTTP 请求的主机/端口组合列表。定义集群之后,必须为 On Demand Router (ODR) 配置专门为使用通用服务器集群而设计的特殊路由策略,以定义如何将请求路由到通用端点。这些路由策略与可以在 WebSphere Virtual Enterprise 中其他地方运行的 Java™ EE 应用程序上定义的策略完全一样可靠;您甚至可以使用现有的事务类和工作类,或者创建新类。

在本文中,您将了解简单的基于 PHP 的 WebSphere sMash 应用程序“helloworld”,创建该应用程序的多个实例,然后进行通用服务器集群和关联路由策略的定义过程。您然后要测试 ODR,以确保对请求进行了正确的路由。此示例中使用的环境由安装在用于 Microsoft® Windows® 32 位平台的 WebSphere Application Server V6.1.0.17 上的 WebSphere Virtual Enterprise V6.1.0.3 构成。


Hello world

在讨论此设置中涉及 WebSphere Virtual Enterprise 的方面之前,让我们了解一下 WebSphere sMash 的情况。helloworld 应用程序是基于 PHP 的应用程序,由单个网页 index.php 组成。清单 1 显示了 index.php 文件的源代码。

清单 1. index.php 源代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Hello World!!!</title>
<style type="text/css">
@import "/dijit/themes/soria/soria.css";
@import "/dojo/resources/dojo.css";
</style>
<script type="text/javascript" src="/dojo/dojo.js"  djConfig="parseOnLoad: 
	true"></script> 
<script type="text/javascript">dojo.require("dojo.parser");</script>
</head>
<body class="soria">
<h1>Welcome to PHP Hello World</h1>
<hr>
Brought to you in part by, IBM WebSphere sMash (Silverstone)
<br><br><br>
<?php echo "This request (" . $_SERVER['REQUEST_URI']  . ") was serviced by 
" . $_SERVER['SERVER_NAME'] . ":" . $_SERVER['SERVER_PORT']; ?>
</body>
</html>

运行时,输出将与图 1 所示类似。

图 1. index.php 的示例输出
图 1. index.php 的示例输出

使用 AppBuilder 工具创建新 WebSphere sMash 应用程序时,除了更改 zero.config 中的配置值来让应用程序侦听端口 10080 和配置上下文根 /hw 外,就不再需要对所得到的空白应用程序进行其他更改。为了将应用程序作为全功能独立应用程序部署,直接使用由 AppBuilder GUI 提供的 Package 选项即可。Package 选项可从主 AppBuilder 屏幕访问;图 2 中鼠标箭头所指的即为 Package 图标;单击 Package 图标之后,将显示图 3。

图 2. AppBuilder 中的 Package 图标
图 2. AppBuilder 中的 Package 图标
图 3. 用于独立运行时的打包应用程序
图 3. 用于独立运行时的打包应用程序

单击 Package 按钮时,将文件系统上以粗体显示的路径生成一个 .zip 文件(图 3)。此文件可以移动到 WebSphere sMash 支持的任何其他运行时平台,然后提取并运行。


在 WebSphere Virtual Enterprise 中设置集群

现在已经有了可供测试的 WebSphere sMash 应用程序,只需要“部署”并启动。

  1. 将从 WebSphere sMash AppBuilder 工具获得的 .zip 文件提取到测试服务器上的新建目录中。在这里所示的示例中,应用程序实例将在端口 10080 和 10081 运行,因此请将 .zip 文件提取到能够帮助您跟踪应用程序所运行的端口的目录结构中。图 4 显示了此示例的目录结构。

    图 4. 所建议的目录结构
    图 4. 所建议的目录结构
  2. 出现在每个端口号文件夹(即 10080 和 10081 文件夹)下的 helloworld 文件夹是在每个端口号文件夹中展开 .zip 文件得到的。在 10081 文件夹中提取应用程序 .zip 文件之后,需要重新配置应用程序目录结构中包括的 zero.config 文件。具体来说,您需要将应用程序要侦听的端口从 10080 更改为 10081(以与为其创建的目录结构匹配)。为此,只需更改 C:\u\WebSphere\zero\ports\10081\helloworld\config 中的 zero.config 文件的这一行代码即可:

    /config/http/port = 10080
    将其更改为:br />/config/http/port = 10081.

    现在,当应用程序启动时,它们将侦听 10080 和 10081 端口上传入的 HTTP 请求。

  3. 接下来,需要在 WebSphere Virtual Enterprise 计算单元的部署管理器上创建通用服务器集群定义。要访问通用服务器集群配置面板,请展开管理控制台左侧列出的 Servers,并选择 Generic Server Clusters(图 5)。然后将显示图 6,列出为该计算单元配置的通用服务器集群定义。

    图 5. 管理控制台中的 Generic Server Clusters 选项
    图 5. 管理控制台中的 Generic Server Clusters 选项
    图 6. 计算单元中的通用服务器集群
    图 6. 计算单元中的通用服务器集群
  4. 单击 New 按钮,以创建新定义,然后输入集群的名称;在本例中,此名称为 HelloWorld_sMash_Cluster。单击 Apply 按钮。面板应该与图 7 所示类似。

    图 7. 创建 HelloWorld_sMash_Cluster 定义
    图 7. 创建 HelloWorld_sMash_Cluster 定义

    重要:如果计划在同一主机上使用多个通用服务器集群成员服务器表示,则必须为每个服务器创建名为“server”的自定义属性。此属性可以为您要使用的任何内容,但是必须在计算单元中保持唯一。

  5. 接下来需要向此集群添加实际成员定义。单击位于 Additional Properties 下的 Ports 链接,就可以进行此工作。在下一面板上,应该看到此集群的服务器的端口号列表,其中不包含任何条目。单击 New 按钮,以创建新条目。输入 WebSphere sMash 应用程序运行时将使用的服务器的主机名和为该实例配置的端口号,以完成面板上的内容。图 8 显示了我们的测试环境的配置。此服务器表示对应于在侦听端口 10080 配置的 WebSphere sMash 应用程序实例。请对配置在 10081 端口上运行的另一个应用程序实例进行相同的处理。

    图 8. 创建端口 10080
    图 8. 创建端口 10080

    正如前面提到的,由于计划在相同主机上运行这两个 WebSphere sMash 应用程序实例,因此必须为每个成员配置为通用服务器集群定义的 server 自定义属性(主机/端口定义)。图 9 显示了“server”自定义属性的示例,只要保持在计算单元中的唯一性,就可以使用任意值。

    图 9. server 自定义属性
    图 9. server 自定义属性
  6. 最后,为通用服务器集群创建另一个服务器定义,用于表示在端口 10081 上运行的应用程序。与处理第一个服务器时一样,请确保 server 属性与表示保持一致。

  7. 保存所有更改,并与计算单元同步更改(手动或自动)。完成了这些步骤后,应该看到新通用服务器集群显示在图 10 中所示的通用服务器集群列表中。

    图 10. 成功创建新通用服务器集群
    图 10. 成功创建新通用服务器集群

到目前为止,您已经开发了 WebSphere sMash 应用程序,并在 WebSphere Virtual Enterprise 中配置了一个新通用服务器集群。为了能够通过 ODR 将请求路由到 WebSphere sMash 应用程序,最后一步是在 ODR 上定义路由策略。

  1. 首先,导航到希望用于路由请求的 ODR 定义。在本例中,此 ODR 的名称为 ODR01。在 On Demand Router Settings 标题下,单击 Generic Server Cluster Routing Policies 链接,以开始配置新路由策略。图 11 显示了 Generic Server Cluster Routing Policies 链接的位置。

    图 11. 配置通用服务器集群路由策略
    图 11. 配置通用服务器集群路由策略
  2. 在下一个面板上(图 12),展开 Work classes for HTTP requests 并单击 New 按钮,以创建特定于 helloworld 应用程序的新工作类;使用有意义的字符串对新工作类进行命名。图 12 显示了名为 HelloWorld_WC 的新工作类。

    图 12. 创建 HelloWorld_WC 工作类
    图 12. 创建 HelloWorld_WC 工作类
  3. 展开 HelloWorld_WC 工作类定义,以查看策略标准,如图 13 中所示。将 /hw/* 模式添加到策略定义的 URI patterns 部分。这指示此策略应该在进入到此 ODR 上并满足指定的 URI 模式的任何请求上。

    图 13. HelloWorld_WC 工作类路由策略标准
    图 13. HelloWorld_WC 工作类路由策略标准
  4. 尽管尚未配置虚拟主机包括 WebSphere sMash 应用程序将侦听的两个端口号,您将在 default_host 虚拟主机定义上定义这些,以确保为策略的虚拟主机选项选择 default_host。最后,在定义的 If no routing rules apply 部分,确保操作设置为 Permit Routing To 或选择了 Permit Routing With Affinity to 选项。此指令告知 ODR 在接受到请求后如何对其进行处理。由于选择了会导致对请求进行路由的操作,因此必须指定发送请求的目标集群或服务器。选择在前面创建的通用服务器集群。图 13 中的示例描述了名为“HelloWorld_sMash_Cluster”的通用服务器集群。

  5. 进行了所有更改和添加工作后,向上滚动回路由策略配置面板的顶部,并单击 Apply,然后保存所有更改,并与计算单元的节点同步更改(同样可以采用手动或自动方式进行)。


测试

您已经创建了通用服务器集群,并定义了路由策略将请求路由到所部署的 WebSphere sMash 应用程序。接下来就可以对其进行测试了。

首先,启动 WebSphere sMash 应用程序。在命令提示符(shell 会话)中,导航到前面创建的目录结构 ports/10080 下的 helloworld 目录中。要启动应用程序,请输入以下命令:zero start。等待命令返回,并确保接收到与图 14 中所示类似的输出。

图 14. 启动 WebSphere sMash 应用程序
图 14. 启动 WebSphere sMash 应用程序

对位于 ports/10081 目录中的第二个 helloworld 应用程序重复 zero start 命令。两个应用程序都开始运行之后,启动配置了通用服务器集群路由策略的 ODR 实例。

在此示例中,仅仅在单个 ODR 实例上配置了路由策略,但完全可能对多个 ODR 配置此策略。ODR 启动并准备好处理请求后,请打开浏览器,并导航到 http://<odr_hostname>:<odr_proxy_port>/hw

稍后,应该在浏览器中看到与前面(图 1)相同的输出。这就确认了路由策略按照设计的方式工作,因为您通过 ODR 请求了 /hw 上下文根,相应的路由策略激活,并通过所配置的两个 HelloWorld_sMash_Cluster 端点之一推送请求。如果再次通过 ODR 发出相同的请求,则应该看到来自侦听端口 10081 的 WebSphere sMash 应用程序的响应。

图 15. 来自 10081 端口的应用程序的响应,通过 ODR 进行代理
图 15. 来自 10081 端口的应用程序的响应,通过 ODR 进行代理

如果继续请求 URL,只要在路由策略定义中选择了 Permit routing to 选项,而不是 Permit routing with affinity to 选项,则会发现 ODR 会交替将请求路由到这两个服务器。如果选择通过关联进行路由,则应该看到会将请求始终路由到通过 ODR 访问的第一个应用程序实例。

如果停止端口 10080 上运行的 WebSphere sMash 应用程序,然后在 ODR 上重试此 URL,在 10080 上的应用程序再次可用之前,将会看到请求仅仅路由到 10081 上的应用程序。因此,这就成功地创建了可通过 WebSphere Virtual Enterprise 中的 ODR 访问的集群化服务器组。


总结

本文描述了一个方案,其中需要将新开发的 IBM WebSphere sMash 应用程序部署到基础结构资源。您可以将应用程序部署到所选择的主机上,然后利用 IBM WebSphere Virtual Enterprise 资产提供对这些应用程序的访问,甚至在这些应用程序不属于 WebSphere 托管计算单元环境的情况下也能如此。这意味着,通过使用通用服务器集群,几乎可以将任意数量的 HTTP 样式端点表示为 WebSphere Virtual Enterprise 资产,并使用特殊路由策略将请求定位到这些端点。还可以为通用服务器集群定义服务策略,并利用 On Demand Router 管理集群请求容量的功能,就像使用 WebSphere Application Server(或其他中间件)集群一样。


致谢

作者感谢以下人员花时间对本文进行了审阅:

  • Ann Black,WebSphere Virtual Enterprise Architecture and Development
  • Ben Parees,WebSphere Extended Development
  • Nitin Gaur,WebSphere IT 专家,TechWorks Americas

参考资料

条评论

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, Web development
ArticleID=379536
ArticleTitle=探索如何将 WebSphere sMash 和 WebSphere Virtual Enterprise 结合使用
publish-date=04152009