分布式计算最基本的目的之一就是为了充分利用空闲的计算节点的计算能力。通常,我们 首先 会将要被分布式计算的 程序 在每个计算节点 部署 好,然后才可以调用分布式计算。这种 “ 部署 ” 是一种静态的。之所以称为静态的,是因为还有一种更动态更灵活的方式 -- 我们可以 随时的、动态的 将我们 新 完成的程序 自动【提交】到 已经部署好的 分布式框架里动态运行起来。比如,假设我刚写了一个新的排序的算法程序(假设程序集为 X.dll ),然后我要对现有的 10000000 个数据进行排序,但是,我的机器配置太差,运行不了如此大的计算任务,那么我就可以将 X.dll 和要排序的数据传递给部署在其它地方的动态分布式计算框架实例,动态分布式计算框架会调用 X.dll 中的排序算法来对数据进行排序,并返回结果。这就是 “ 动态 ” 的含义。我写 DCFramework ( Dynamic Distributed Computing Framework )这个框架的主要目标是达到这样的一个效果。不知道这种分布式计算架构和 “ 云计算 ” 是否有点关系?
如果是使用 C 或 C++ 来实现这样的动态效果,应该不是一件简单的事情,但是强大的 .Net 平台使得实现这一目标称为可能,并且不是那么难。
我将平台选定在 .NET ,这可以使很多功能更加容易实现,也使得很多问题得到简化。 DCFramework 的主要特性如下:
( 1 )基于 .NET 平台。这有两种含义: DCFramework 是用 .NET ( 2.0 )实现的;也只有基于 .NET 的程序才可以使用 DCFramework 支撑的动态分布式计算架构。
( 2 ) DCFramework 使用 DCTask 表示动态分布式计算任务。
( 3 )分布式计算节点可以动态的增加、删除。所谓计算节点就是用于真正执行分布式计算任务的节点,在 DCFramework 中称为 DC Worker Node 。
( 4 )在 DCFramework 架构中有一个特殊的节点叫 DC Master Node ,它的作用在于统一管理所有的 DC Worker Node ,并将新的分布式计算任务分配给当前负载最低的那个 DC Worker Node 。
( 5 ) DCFramework 使用 Remoting 技术解决 DC Worker Node 和 DC Master Node ,以及 DC Master Node 和 Client (需要动态分布式计算的客户端)之间的通信。
( 6 ) DCFramework 使用反射技术来动态加载程序集和调用计算方法。
( 7 ) DCFramework 使用 DCAppDomain (对 .NET AppDomain 的封装)来构建执行分布式任务的独立环境。即每个分布式计算任务最终在一个独立的 DCAppDomain 种执行。
( 8 ) DCFramework 使用序列化技术来传递被调用的对象。
关于 DCFramework 中节点部署的简单图示如下:
现在,我们假设某个Client A有个计算任务要提交给DCFramework执行,让我们来看看这个过程是怎样进行的。
Client A 将计算的逻辑封装在MyClass类中,其位于X.dll程序集中,而X.dll有依赖于Y.dll,Y.dll又依赖于Z.dll,而X.dll、Y.dll、Z.dll都是用户自定义的程序集。如果是在Client A本地执行计算任务,是这样做的:
//


object result = myClass.DoSomething();
下面的代码将会在DCFramework架构的某个DC Worker Node上执行MyClass.DoSomething()方法。
//


DCJobDispatcher dispatcher = ...... ;
dispatcher.Dispatch(myClass, " DoSomething " );
分布式计算执行的过程简述如下:
(1)DCJobDispatcher 会自动Remoting连接到DC Master Node。
(2)DCJobDispatcher 将分布式计算任务封装为一个DCTask,DCTask实例中会包含X.dll、Y.dll、Z.dll程序集对应的文件数据。
(3)DCJobDispatcher 将DCTask提交给DC Master ,DC Master 会将其交与DC Worker Node中负载最小的那个节点(假设为Worker A)执行。
(4)Worker A会为新任务创建一个单独的DCAppDomain,然后加载传递过来的DCTask中的X.dll、Y.dll、Z.dll,接着就可以反序列化 MyClass 对象,最后通过反射调用其DoSomething方法,以开始执行计算任务。
(5)计算完成后,Worker A会卸载对应的DCAppDomain,并将计算结果返回。
上述就是DCFramework执行动态分布式任务的一个简单介绍,更详细的部分会在后续的文章中介绍。
欢迎讨论,谢谢。
目录:
DCFramework 动态分布式计算框架(01)-- 基础结构
下载:
1.DCFramework 的完整Demo源码 : DCFrameworkDemo