Microsoft .NET Framework 4 中引入的任务并行库 (TPL) 能够让应用程序开发者创建解决方案, 以利用多核计算机中的并行处理能力。但是在许多情况下,垂直扩展的能力(添加多个核心)受到多种 因素的约束,包括成本和主机托管限制。在这种情况下,如果需要扩展能力,则可以将数据处理在服务 器阵列中分配;云托管就是这样的例子。在本文中,我将描述一套概念性解决方案的主要方面(包括实 施),通过使用 .NET Framework 4.5 的多项新功能完成上述情景。
基本前提条件
我将 要描述的方法要求使用除 TPL 以外的多种技术,包括:
任务并行库 (TPL)
Windows Communication Foundation (WCF)
托管可扩展性框架 (MEF)
请注意,我仅在我要试图解决的问题中讨论这些方面。我假设你非常了解这些技术。
远程任 务客户端、任务协调器及任务执行节点
远程任务客户端是客户端侧层,将隐藏由于使用分布式 环境的语义而产生的复杂性。远程任务客户端直接与任务协调器交互,然后协调器成为底层基础结构的 入口点。总体而言,任务协调器具有以下属性:
任务协调器是与客户端进行通讯的唯一联络点。
协调器公开必要的服务,以请求在可扩展的平台上执行任务,以及取消特定任务。
协调器处理任务执行请求的限制和队列,支持环境的健康操作。
任务执行节点是任务运行流程的主机。由 TPL 执行的任务的实际实施驻留在任务执行节点。
以下是这些逻辑层和主要方面及信息流:
远程任务客户端请求执行一项或多项任务。
任务协调器向任务执行节点提交请求。
任务执行节点执行任务并更新任务协调器中每项请求的状态。
任务协调器使用每项请求的执行结果,更新客户端。
任务执行节点驻留在负载平衡器的后面,因此可以按需要添加更多节点,从而能够实现水平扩展。
图 1 显示了逻辑层和信息流。
图 1 水平扩展任务
注意任务执行节点如何更新任务协调器,然后任务协调器更新远 程任务客户端。我将要描述一项基于客户端与任务协调器之间双向通讯的实施,以及基于任务协调器与 任务执行节点之间双向通讯的实施。根据 WCF 定义,这表示使用双工通道,使任务执行节点回调任务 协调器,然后任务协调器执行相同操作以更新客户端。我将展示使用 WebSockets 实现这种双向通讯方 法。WebSockets 传输是作为 .NET Framework 4.5 的一个新绑定来实施的,可在 Windows 8 上使用。 有关此绑定的详情,请访问 bit.ly/SOLNiU。