合并多个任务或操做成一个单一的计算单元。这种模式能够提升计算资源的利用率,并下降与云托管的应用程序进行计算处理相关的成本和管理开销。web
云应用程序频繁执行各类操做。在某些解决方案也多是有意义的最初遵循的关注点分离的设计原则,并把这些操做成托管和独立部署(例如,如在微软的Azure云服务,独立Azure网站不一样的角色独立计算单元或单独的虚拟机)。然而,尽管这种策略能够帮助简化溶液的逻辑设计,部署大量计算单元做为同一应用能够提升运行时的托管成本,使系统的管理更加复杂的一部分。
做为一个例子,图1示出了使用多个计算单元被实现的一个云托管解决方案的简化的结构。每一个计算单元在其本身的虚拟环境中运行。每一个功能已被实现为一个单独的任务(经过任务Ë标任务A)在本身的计算设备上运行。设计模式
图1 - 经过使用一组专用计算单元运行在云环境中的任务
每一个计算单元消耗的资源收费,即便是闲置或不常使用。所以,这种方法可能不老是最有成本效益的解决方案。
在Azure中,这一问题适用于云服务的角色,网站和虚拟机。这些产品在他们本身的虚拟环境中执行。运行的单独做用,网站,或者被设计为执行一组良好定义的操做的虚拟机的集合,可是须要进行通讯和协做,做为一个单一的解决方案的一部分,能够是一个资源利用效率低。安全
为了帮助下降成本,提升利用率,提升通讯速度,减轻了管理工做有可能将多个任务或操做成一个单一的计算单元。
任务能够根据各类基于由环境提供的功能,以及与这些功能相关的成本的标准进行分组。一种常见的方法是寻找具备关于它们的可扩展性,寿命和加工要求具备类似的任务。分组这些产品一块儿使它们可以扩展为一个单元。由许多云环境所提供的弹性使一个计算单元的其余实例,以根据业务负载被启动和中止。例如,Azure提供自动缩放,能够适用于云服务的角色,网站和虚拟机。欲了解更多信息,请参阅自动缩放指导。
做为一个计数器的例子来讲明如何扩展能够被用于肯定哪些操做可能不该该被分组到一块儿,考虑如下两个任务:
•任务1轮询发送到队列罕见的,对时间不敏感的信息。
•任务2处理网络流量的高容量阵阵。
第二任务要求的弹性可能涉及起动和中止的大量的计算单元的实例。应用相同的缩放到第一任务只会致使更多的任务上监听同一队列不频繁的消息,而且是一种资源的浪费。
在许多云环境中,它能够指定在CPU内核,存储器,磁盘空间等的数量而言,以一个计算单元的可用资源。一般,指定的资源越多,就越有成本。对于金融效率,最大限度地工做的一个昂贵的计算单元执行的数量,而不是让它变成无活性在较长时间内是很重要的。
若是存在须要大量的CPU功率的短脉冲串的任务,考虑合并这些成一个单一的计算单元,其提供所需的电源。然而,重要的是平衡这种须要保持昂贵资源忙对它们是否过度强调指出可能发生了争用是重要的。长时间运行,计算密集型任务可能不该该共享相同的计算单位,例如。网络
实施该模式时请考虑如下几点:
•可扩展性和弹性。许多云解决方案实现的可扩展性和弹性,在运算部的经过启动和中止的状况下,单位的水平。避免了分组在同一计算单元相互矛盾的可扩展性要求的任务。
•一辈子。云计算基础架构能够按期回收托管的计算单元的虚拟环境。当执行一个计算单元内许多长期运行的任务,可能须要对设备进行配置,以防止它被回收,直到这些任务已经完成。可替换地,经过使用一个检查指向的方法,使他们中止干净,并继续在在其中,当所述计算单元被从新启动他们被中断的点的设计的任务。
•释放节奏。若是一个任务的执行或配置变化频繁,则可能须要中止计算单位主办的更新的代码,从新配置和从新部署的单元,而后从新启动它。此过程也将须要相同的计算单元中的全部其余任务被中止,从新部署,并从新启动。
•安全性。在相同的计算单元的任务能够共享相同的安全上下文,并可以访问相同的资源。必须有高度的任务之间的信任,并且相信,一个任务是不会损坏或其余不利的影响。此外,增长了在一个计算单元能够增长计算单元的攻击面运行的任务的数目;每一个任务是否安全的一个最脆弱性。
•容错。若是在一个计算单元中的一个任务失败或异常状况,它可能会影响在同一单元内运行的其余任务。例如,若是有一个任务没法正常启动它可能会致使对计算单元失败,整个启动逻辑,而且防止在同一单元的其余任务的运行。
•争。避免这种状况,在相同的计算单元争夺资源的任务之间引入的争用。理想状况下,共享相同的计算单元的任务应该表现出不一样的资源利用率的特征。例如,两个计算密集型任务可能不该该驻留在同一个计算单元,并且消耗大量的内存也不该该两个任务。然而,混合使用须要大量的存储器能够是一个可行的组合任务中计算密集型的任务。
注意:
你应该考虑整合计算资源只对已在生产用于在一段时间内,使得操做人员和开发者可以监控系统,并建立热图,它标识了每一个任务利用别共资源的系统。此图能够用于肯定哪些任务是很好的候选共享计算资源。
•复杂性。组合多个任务到一个单一的计算单元增长了复杂性中的代码单元,可能使得更难以进行测试,调试和维护。
•稳定的逻辑架构。设计和实施中的代码中的每一个任务,以便它不该该须要改变,即便物理环境中任务运行不会改变。
•其余策略。整合计算资源的方法只有一个,以帮助减小同时运行多个任务相关的成本。这须要仔细的规划和监测,以确保它仍然是一个有效的办法。其余策略可能更合适,这取决于所执行的工做的性质和所表明这些任务正在运行的用户的位置。例如,工做负荷(如所描述的计算分区指南)的功能分解多是一个更好的选择。架构
使用这种模式的任务,若是他们在本身的计算单元运行不符合成本效益。若是一个任务花费大量的时间闲置,运行此任务的专用设备能够是昂贵的。
这种模式可能不适合于执行关键容错操做处理高度敏感的或私有数据,而且须要其自身的安全上下文的任务或任务。这些任务应该在他们本身的独立的环境中运行,在一个单独的计算单元。less
在Azure上构建一个云服务,它能够巩固多任务的处理成一个单一的角色。一般,这是执行的背景或异步处理任务的辅助角色。
注意:
在某些状况下它可能会包括在Web角色的背景或异步处理任务。这种技术能够有助于下降成本和简化部署,虽然它能够影响由web角色所提供的面向公众的接口的可扩展性和响应性。该文章合并多个天青工做者角色整天青Web角色包含执行背景或异步处理任务在Web角色的详细描述。
的做用是负责启动和中止的任务。当Azure结构控制器加载的做用,它引起的启动事件中的做用。您能够覆盖WebRole或WorkerRole类的OnStart方法来处理这个事件,也许是为了初始化数据和其余资源,在这种方法中,任务依赖。
当OnStart方法完成后,角色就能够开始响应请求。您能够找到有关使用的OnStart和运行方式的做用,在theApplication启动进程中的模式与实践指南移动应用程序到云部分的更多信息和指导。
注意:
请OnStart方法尽可能精简的代码。 Azure不上采起这种方法,完成时间强加任何限制,但做用不可以启动响应发送给它,直到此方法完成的网络请求。
当OnStart方法完成后,执行任务的运行方式。在这一点上,该织物控制器可以开始发送请求的做用。
将实际的运行方法建立任务的代码。注意,执行命令的方法能够有效地定义角色实例的生命周期。此方法完成,结构控制器将安排的做用被关闭。
当一个角色关机或再循环,结构控制器能够防止从负载平衡器接收任何更多的传入请求,并提升了中止事件。您能够经过覆盖做用的onStop方法捕获这个事件和角色终止前须要进行任何整理起来。
注意:
在的onStop方法执行的任何操做须在5分钟(或者,若是您使用的是本地计算机上的天青模拟器30秒)内完成;不然Azure结构控制器假定的角色已经中止,并会迫使它停下来。
图2示出了一个角色的生命周期,任务和资源,它承载。该任务由运行方法,该方法而后等待任务来完成启动。任务自己,这实现云服务的业务逻辑,能够响应经过天青负载平衡器发布到角色的消息。异步
图2 - 任务和资源的做用,在Azure云服务的生命周期
在ComputeResourceConsolidation.Worker项目WorkerRole.cs文件显示了一个如何实现这个模式在Azure云服务的例子。
注意:
该ComputeResourceConsolidation.Worker项目是ComputeResourceConsolidation解决方案,可用于下载本指导意见的一部分。
在运行时被初始化的角色建立所需的取消标记和任务来运行的一个列表中的辅助角色,代码。async
设置在MyWorkerTask1和MyWorkerTask2方法来讲明如何在同一辅助角色执行不一样的任务。下面的代码显示MyWorkerTask1。这是休眠30秒,而后输出一个跟踪消息的简单任务。重复这个过程,直到无限期的任务被取消。在MyWorkerTask2代码很是类似。ide
注意:
经过示例代码示出的方法是一个后台进程的一个常见的实现。在现实世界的应用程序,你能够按照这个结构相同,不一样之处在于,你应该把本身的处理逻辑在等待取消请求的循环体。
通过工人的角色已初始化它使用的资源,Run方法启动两个任务同时,以下图所示。oop
在该示例中,执行命令方法等待要完成的任务。若是任务被取消,运行方法假定的角色正在关闭,并等待剩下的任务完成(这在终止前等待最多5分钟)以前被取消。若是任务失败,因为预期异常,Run方法将取消该任务。
注意:
须要注意的是,你能够实现Run方法更全面的监测和异常处理策略,如从新启动已失败的任务,或者包括代码,使角色中止和启动单个任务。
在如下代码中所示的中止方法时,网络控制器将关闭角色实例(它是从的onStop方法调用)被调用。该代码经过取消它优雅地中止每项任务。若是有任何的工做时间超过五分钟就能完成,在Stop方法取消处理真正地中止等待和做用被终止。
本文翻译自MSDN:http://msdn.microsoft.com/en-us/library/dn589778.aspx