BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

基于Azure云计算平台的网格计算,第3部分:运行网格应用程序

| 作者 David Pallmann 关注 0 他的粉丝 ,译者 朱永光 关注 0 他的粉丝 发布于 2010年3月19日. 估计阅读时间: 15 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

在本系列的第1部分,我们介绍了在Azure上进行网格计算开发的设计模式,并在第2部分,我们编写了一个欺诈评分(fraud scoring)网格计算应用程序,命名为Fraud Check。在这里,第3部分中,我们将来运行这个应用程序,首先在本地运行,接着移到云上运行。

我们使用的框架是Azure Grid,是Neudesic Grid Computing Framework的社区版。

在运行我们的网格应用程序之前,有几件事情需要处理——比如配置跟踪数据库和设置配置信息——不过,我们先来一睹应用程序在云中运行起来的效果图:

那么让我们来完成如下步骤的设置,以便我们能运行它。

网格应用程序解决方案结构

Azure Grid为你提供了一个基础的解决方案模板,在其中你可以添加特定于应用程序的代码。上次,我们为Fraud Check网格应用程序添加了代码,不过并未讲解解决方案结构本身。现在我们就来说一说。

我们的网格计算解决方案具有云中的部分,也有企业内的部分。Azure Grid框架把所有这些都包含在一个单独的解决方案中,如下所示。那么,在解决方案中都有些什么?

  • GridApplication项目包含了我们在本系列文章第二部分编写的特定于应用程序的代码。回忆一下,我们编写了3块代码:任务代码、加载器和聚合器。解决方案的其他项目含有应用程序的代码:一些代码将在云中执行,一些将在企业系统中执行。
  • 在Azure中的网格执行器代码位于AzureGrid和AzureGrid_WorkerRole项目中。这是一个带有执行器角色的标准Azure托管应用程序,可通过Azure门户部署到Azure托管项目中。你的任务应用程序代码就将在这里面执行。
  • 企业端的代码位于GridManager项目中。这是一个用于启动和监测网格工作的桌面应用程序。其也在后台运行你的加载器代码和聚合器代码。
  • StorageClient项目是一个访问云存储的函数库,其继承自Azure SDK StorageClient示例。云中的网格执行器和企业系统中的网格管理软件都用到了这个函数库。

要运行这个解决方案里云中和基础系统中的部分都很简单:

  • 要运行网格管理器,右键点击GridManager项目,并选择Debug > Start。
  • 要在本地机器上用本地开发环境运行网格执行器,右键点击AzureGrid项目,选择Debug > Start。
  • 要在Azure上运行网格执行器,利用Azure门户按照通常的步骤把AzureGrid项目发布到Azure中,以形成一个托管应用程序。

为了在本地测试所有功能,把AzureGrid和GridManager都设置为启动项目会很有用,那样只按一次F5就可以启动这两个应用程序。

设置本地数据库

Azure Grid在本地SQL Server或SQL Server Express数据库(2005或2008)中跟踪工作运行、任务、参数和结果。从CodePlex下载的项目源码中还包含了创建这个数据库的SQL脚本。

配置解决方案

解决方案里云中和基础系统中的部分都需要少许配置,最重要的地方是和云存储相关的。

云中的网格执行器配置在AzureGrid项目的ServiceConfiguration.cscfg文件中设定,如下:

  • ProjectName:你的应用程序的名称
  • TaskQueueName:在云存储中用于接收来自网格执行器结果的队列名称
  • QueueTimeout:一个任务在重新被其他执行器覆盖之前可以执行多长时间(以秒计)
  • SleepInterval:网格执行器检查要执行的新任务之前休眠的间隔时间(以秒计)
  • QueueStorageEndpoint:用于云存储项目或本地开发存储的队列存储端点
  • AccountName:云存储项目的名称
  • AccountSharedKey:云存储项目的密钥

用于网格管理器的配置是在GridManager项目的app.config文件中设定。大部分设置都具有和云中配置文件一样的名称和含义,且需要设置为相同的值。多出的一个本地SQL Server数据库的连接字符串设置,用于网格应用程序跟踪记录。

跨环境对网格应用程序进行测试和逐级推进

由于网格应用程序能被极大地进行伸缩,理所当然你应该仔细地测试它们。在基于Azure的网格计算场景中,我建议按照如下顺序对这个新的网格应用程序进行测试:

1. 开发人员测试

用少量的任务在本地开发机器上测试网格应用程序。在此,你要关注的是,验证应用程序是否正确运行,正确的数据是否在网格应用程序和基础存储之间进行移动。

  • 对于云运算部分,网格应用程序会在本地开发环境中执行。
  • 对于云存储部分,也使用本地开发环境替代。

Grid Manager当然(也一直会)在本地机器上执行。

2. QA测试

还是在本地环境,在多个执行器机器上用大量的任务测试应用程序。这个测试的目标是验证,同样的工作在单机环境中和在利用云存储的多机环境中都能执行。

  • 对于云运算部分,网格应用程序会在本地开发环境中执行,不过是在多台本地机器。
  • 对于云存储部分,使用AzureStorage项目。

注意,由于这种方式依旧主要是一个本地测试,只是用到了Azure的云存储。在我们无法协调跨多台机器的工作的时候,这样的方式是必须的。

3. 登台(Staging)环境

把网格应用程序部署到Azure的登台环境中,用少量的任务来运行它。在这个阶段,你可以验证本地正常运行的工作是否能在云中运行。

  • 对于云运算,网格应用程序部署在Azure托管项目中——Staging。
  • 对于云存储,用到了Azure Storage项目。

4. 生产环境

现在,你已经准备好把应用程序推进到Azure托管生产环境的级别,用饱和的负荷来运行它。

  • 对于云运算,网格应用程序托管在Azure托管项目中——Production。
  • 对于云存储,用到了Azure Storage项目。

你可以使用Azure Manager来监测网格应用程序是否正常运行。

本地测试运行

现在我们来准备在我们的开发机器上进行本地测试。根据我们的测试计划,最初是在本地开发机器上用少量负荷进行测试。

输入数据显示在下面的这个CSV工作表,它用Excel创建并保存为CSV文件。Fraud Check应用程序需要这个输入文件的打开账号和启动GridManager.exe的账号一致。在这个测试中,我们将使用25条记录。

为了确保数据库正确设置,云中和企业中的配置都要反映到本地开发存储里。

编译应用程序,启动AzureGrid和GridManager两个项目。

AzureGrid项目不会显示任何可见的东西,不过如果你想的话可以通过开发环境UI(Developer Fabric UI)来检查它的运行情况。

GridManager应用程序是一个基于WPF的控制台,启动后如下面所示:

要在应用程序中启动一个工作(Job),从菜单选择Job > New Job。在显示出的对话框中,填写名称和描述。

点击OK按钮,你将看到工作被创建不过还未运行。工作面板显示为红色以表示工作尚未开始。

现在,我们已经准备好启动网格应用程序了。点击Start按钮,很快你就会看到工作面板变为黄色,任务的网格也显示出来。

上述显示结果将每10秒钟更新一次。不久,你将看到一些任务显示为红色,一些黄色,而一些是绿色。任务在等待的时候显示红色,被执行的时候显示黄色,当执行完成就显示绿色。

当所有任务都完成后,工作面板就显示为绿色。

在网格应用程序执行完成后,我们来检查一下结果。Fraud Check被编写为从输入电子数据表中读取输入参数,再把结果写入到输出电子数据表中。打开这个新创建的输出电子数据表,我们能看到网格应用程序为每条输入记录创建了一个评分、说明文本和批准决定。

查看网格

在这个我们刚刚完成的测试运行中,我们看到一个Grid View,藉此我们能了解到网格应用程序执行的总体情况。每个小框代表一个网格任务,框中显示任务的ID。在下面的图中,你能看到一个显示了大量任务的Grid View。

  • 红色的任务是等待中的,意味着它们还没有被执行。这些任务保存在云存储上的任务队列中(加载器把任务放到这个队列中)。也就是说,这些任务还未被网格执行器来提取。
  • 黄色的任务是执行中的。你通常会看到和执行器角色实例数目一样的黄色小框。
  • 绿色的任务是执行完的。这些任务已经被执行,它们的结果已经被放到聚合器队列上,以等待聚合器提取。

除了Grid View外,你还能看到任务和结果。Grid View、Task View和Results View按钮让你可以看到网格应用程序的不同视图。

查看任务

在工作运行之中或之后,你可以点击Task View按钮来查看任务的相关信息。Task View为每个任务显示一行数据,包括Task Id、Task Type和Worker机器名称。在本地运行的时候,列出的总是你自己的本地机器名称,而在云中运行的时候,你会看到负责处理每个任务的特定机器名称。

查看结果

Result View类似于Task View——每个任务一行数据——不过以XML的形式为每个任务显示了输入参数和结果。你也可以拉宽这个窗体来查看完整的信息。

在云中运行网格应用程序

在看了本地机器运行的网格应用程序之后,现在让我们来在云中运行它。这要求我们修改一下配置信息以利用云存储项目而非本地开发存储;也要把AzureGrid项目部署到云托管项目中。

部署到云中的步骤和任何托管Azure应用程序类似:

1,右键点击AzureGrid项目,选择Publish。

2,在Azure门户上,访问托管Azure项目,并点击Staging下面的Deploy按钮,来上传你的应用程序包和配置文件。

3,点击Run来运行你的实例。

下一步就是准备你的输入数据。在我们的本地测试环境中,输入到应用程序的数据是一个包含25行待处理的申请信息的电子数据表。这次,我们将使用一个具有1000行的大数据。

由于云中的那部分程序已经在Azure平台里运行起来了,所以我们只需要在本地启动Grid Manager应用程序。

我们再次通过Azure Manager菜单的New Job菜单项,选择一个工作来启动。

和前面一样,我们点击OK完成对话框的录入,接着点击Start来开始工作的运行。你可以在Grid View中看到加载器生成了1000个任务。

切换到Task View,你能看到执行每个任务的云执行器的机器名称。

即使在网格应用程序完成计算之前,你就可以通过Results View开始检查结果了(之前所显示的那样)。

在工作完成之后,云存储已经被清空。由于已经没有工作可做,我们可以暂停部署到云中的应用程序,这样就避免了额外的计算花费。

一旦应用程序完成运行,期望的结果(在Fraud Check这个例子中的输出结果是一个CSV文件)也就准备妥当,行的数目正如我们所预料的(和输入数据的数目一致),每个任务都有了计算结果。

我们能看到1000行数据已经被处理了,不过记录没有保持最初的顺序。这是很正常的:我们无法控制任务执行的顺序,而且我们所关心的只是每个任务保证其的原子性。把输入参数复制到输出结果中的一个原因是,可以把输入信息和结果信息关联起来。

性能和调优

当前,很难估计在Azure中的网格计算应用程序的性能,由于我们还只能使用Azure的预览版【译者注:本文翻译的时候Azure已经正式商用,不过尚未在中国大陆推出,详情见此处。】,它提供给开发人员用于测试的实例数量只是每个项目2个。

不过有一种让你的网格计算应用程序的实例超过2个的方法,就是把网格执行器托管到多个地方。你能使用多个托管账户,可以和其他Azure账户拥有者进行合作。你也能在本地运行一些执行器。这样做可行,是因为云存储中的队列是网格执行器和企业加载器/聚合器的通信机制。只要你使用一个通用的存储项目,你就能把网格执行放置到各种各样的地方。

我们也希望网格计算应用程序业已成真的地方,能在Azure中也能成真:例如,计算密集的应用程序能通过网格计算这种方式能获得巨大的回报。

随着Azure正式发布的临近,我们应该能收集到很多关于网格计算性能和如何调优的大量有意义数据。

查看英文原文Grid Computing on the Azure Cloud Computing Platform, Part 3: Running a Grid Application


给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

看不到图片 by chain ding

网络问题吗?

Re: 看不到图片 by lph li

我的也看不到图片,估计是编辑的问题

Re: 看不到图片 by 刘 申

已修正,现在应该能看到了:)

非常好 by Du Daniel

很好很强大,很受启发,欢迎这样的好文章~

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

4 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT