Windows Azure是一个全新的平台,为开发人员提供创建云计算应用程序的操作系统和支持。Azure提供了网格计算系统所需的很多功能,运用合适的设计模式和框架,可以开发并运行网格计算应用程序。
一 关于Azure
Windows Azure将在
作为目前微软的公共云计算业务主要产品,它运行在微软的全球数据中心上,提供微软各种软件的网络版本应用,目前包括SQL、.NET、Live、SharePoint、Dynamics CRM等服务。
二 把网格计算和Azure云计算放到一起
需要注意的第一件事情是,在Azure云中和企业端分别存在一些软件/数据,以及一些基础功能。它们分别完成什么事情,以及为什么要这样安排?
云用来完成网格计算本身的工作。云资源的使用主要面向临时的工作,可以最小化成本。在你不运行网格计算解决方案 的时候,你就不会产生费用。
企业作为数据的固定存储位置。它是网格运行所需的输入数据的来源,也是工作结果的最终存储位置。
再来看一下设计模式
在这个模式中的软件角色是:
- 网格执行器(Grid Worker):网格执行器是一个云中的软件,能执行网格应用程序所需的任务。这个软件作为Worker Role以多个实例运行于云中。框架使用了交换指令安排方式,以便任何网格执行器都可执行任何被其请求的任务。网格执行器运行在一个循环中,从任务队列中读取下一个要执行的任务,接着执行任务,并把结果写入到结果队列中。当网格执行器没有队列任务要运行的时候,就发出一个关闭的请求。
- 网格管理器(Grid Manager):网格管理器是一个企业端的软件,管理着网格计算执行的工作运行。网格管理器有3个组件:
- 加载器(Loader):加载器的工作就是,为网格执行器生成要执行的任务,来启动网格应用程序工作。加载器运行在企业端,是为了访问一些基础资源,比如为每个任务提供所需输入数据的数据库。在加载器运行的时候,生成的任务被写入到云中的任务队列(Task Queue)里。
- 聚合器(Aggregator):聚合器从结果队列中读取结果,把结果存储到固定位置的基础功能中。聚合器也能知晓,网格应用程序的执行是否完成。
- 控制台(Console):控制台是一系列管理功能,用于配置项目、启动工作运行,并在网格执行的过程中查看其状态。它也能提供一个类似在机场里显示飞行状态的视图,来显示待处理的任务和已完成的任务。
在这个模式中的数据角色是:
- 任务队列(Task Queue):这是一个云存储中的队列,存储着任务。在企业端的加载器把它生成的任务写入到这个队列中。在云中的网格执行器从这个队列中读取任务,并执行它们。
- 结果队列(Results Queue):这是一个云存储中的队列,存储着结果。网格执行器把每个任务的结果输出到这个队列。运行在企业端的聚合器从这个队列中读取结果,并在企业端中持久地存储它们。
- 跟踪表(Tracking Table):这是一个企业端数据库表,跟踪着任务和它们的状态。加载器把相关记录写入到这个跟踪表中,而聚合器在收到结果的时候对其进行更新。跟踪表让控制台可以显示网格的状态,并让系统知晓网格应用程序何时完成。
- 企业数据(Enterprise Data):企业提供了数据存储或服务,为任务提供输入数据,或接收任务的结果。这要根据各自组织和项目来特别设定;编写加载器和聚合器的代码要同这些数据存储集成在一起。
三 演练:创建并执行Azure上的网格计算应用程序
让我们来把上面讲到的东西混合到一起,并演练一下使用这个模式和适合的框架,如何从头至尾地开发并运行网格计算应用程序:
1. 网格计算应用程序需求的确立。就是要确认需要完成的任务、输入数据和结果目的。
2. 使用框架,开发人员添加自定义内容到他们的项目中:
网格执行器(Azure Worker Role)由一个模板来创建,并为每个任务添加实现代码。 加载器由一个模板来创建,并添加一些代码来实现从本地资源读取输入数据、生成任务并把它们排到任务队列中。聚合器由一个模板来创建,并添加一些代码来从结果队列中接收结果,在底层数据库中存储它们。
3. 此应用程序的Azure项目通过Azure门户网站来进行托管和存储的配置。网格执行器打包并部署到云宿主中,测试后,升级为产品版本(Production)。
4. 使用网格管理器控制台,网格的工作运行在此定义和启动。加载器的运行也在此启动。
5. 加载器读取本地企业数据,生成任务,并把每个任务写入到任务队列。
6. 网格执行器项目在Azure门户网站中启动,其会产生网格执行器的多个实例。
7. 每个网格执行器都持续地从任务队列中接收新任务,确定任务类型,执行适当的代码,并把任务结果发送到结果队列中。Azure队列工作的方式在此非常有用:如果执行器出错,在完成任务的过程中失败,那么任务在超时之后将重新出现在队列中,并会被其他网格执行器获得。
8. 聚合器从结果队列中读取结果,并把它们写入到本地企业存储库中。
9. 在网格执行的时候,管理员能够使用网格管理器控制台几乎实时地观察网格执行器执行任务的状态。
10. 在聚合器获知所有计划中的任务已经完成时候,它通过控制台发出一个关于这个状态的提醒。到此,网格就完成了它所有的工作,它的结果也安全地保存到企业端。
11. 通过Azure门户网站可以暂停网格执行器,以避免带来额外的计算时费用。云存储在所有队列被完全地读取后,已经是空的了,因而没有额外的存储费用产生。
四 把Azure用于网格计算的附加值
从技术和经济两方面来说,Azure平台用于网格计算再好不过:
- 具有很好的成本效益:使用云托管的应用程序避免了购买用于网格计算的计算机的需要。相反,你是为网格执行器的计算时间和所用的队列存储按月支付费用。这样的设计,一旦在网格应用程序完成了处理后,就不会在计算时间和存储时间上带来进一步费用。
- 可伸缩性和灵活性:不管你希望获得很多还是很少的容量,都可满足。你的网格计算应用程序可以做到,只需要一个单独网格执行器实例这样少的资源。
- 可靠性:内建于Azure队列中的可靠性机制确保了所有任务都得以执行,就算网格执行器意外关闭也是如此。如果网格执行器意外关闭,那么Azure Fabric将会启动一个替代实例。
- 可获得协调功能:Worker Role+队列的机制是简单的、具有负载均衡的,也是工作很好的。使用它就避免了编写复杂协调软件的需要。
- 简单:在Azure上进行网格计算的模式,其核心是很简单的。角色也都是明确定义的,没有非常复杂的软件元素,需要迁移部分的数目也可尽量保持最少。
[Quote]《基于Azure云计算平台的网格计算,第1部分》 网站:www.infoq.com作者 David Pallmann 译者 朱永光
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Azure云计算平台的网格计算(一) - Python技术站