
最近有兴趣想搞一个拾遗网格的东东出来,有了架构的初步设想,希望大家多多提意见
如图,我们可以看到在拾遗网格中主要有3种角色:服务提供者、服务发布者、MDS机器。

首先,服务提供者的机器在启动时会向MDS机器发布其可用信息,包括:URL地址、机器配置(如CPU、内存、硬盘)、可供使用的资源限额(如占CPU百分几使用率,可占多少内存、可用多少硬盘空间)、使用者条件(如需具有什么样的许可证,或者在什么区域内的机器才能使用服务)等等信息。
MDS机器的作用等于是一个网格服务的黄页,在这里主要存储了当前可用的网格资源信息,它的作用类似于Web Services中的UDDI服务器,但是MDS中存储的信息会动态变化得非常快。MDS全称为Metacomputing Directory Service,中文翻译为元计算目录服务。它主要是一种基于网格计算环境的信息服务框架,面向网格计算环境中数目巨大、地理上分布且具有动态性的各种资源和服务。MDS的设计会借鉴Globus项目。在Globus的实现中,MDS主要使用LDAP作为网格信息访问与存储的统一界面。“
MDS的基本特征包括数据生成、数据分布、数据存储、数据搜索、数据查询和数据显示等。MDS提供了一个可配置的信息提供者组件,称为GRIS(Grid Resource Information Service)和一个可配置的集合目录组件,称为GIIS(Grid Index Information Service)。当然完整的MDS也可以搜集和发布基于其他协议的信息,如SNMP(简单网络管理协议)、NIS(Network Information System)、NWS等,其简要逻辑结构如图所示:”

当服务发布者向MDS机器取得可用网格资源后,它会直接向服务提供者发送请求信息。提供者验证其身份正确性后,将会利用无接触式部署的方式从服务发布者的WEB服务器上取得提供服务的程序集。而这一切是有网格服务容器来执行的,网格容器的架构如下图所示:

容器是一个Windows服务程序,在系统启动时会自动启动。容器启动后,它会通过配置文档打开一个可用端口打开Remoting连接。这里的Remoting连接是利用HTTP信道,并使用SOAP格式来序列化对象,激活方式是Singcall。这种方式实际上是开放了一个Web服务,可以使用SOAPSUDS生成代理类,或者直接在VS.NET中添加Web引用。在这里,服务发布者假如可以动态生成代理类,那么可以象使用Web服务的方式来与容器进行初步的通信,也可以直接使用Remoting的方式与容器取得连接。之所以采用Remoting,是不希望采用IIS作为Web Services宿主,否则的话还需要用户去配置IIS,会显得很麻烦。拾遗容器等同于一个Windows程序,安装后即可运行,而无需用户做过多的配置工作,大大减轻用户的负担。在用户的使用方面,我会更多地关注“KISS”原则
服务发布者先利用容器提供的Web服务通过身份验证,然后发布服务请求信息。容器根据请求信息中的URL地址利用Assembly.Loadfrom方法将程序集装载到本地。然后,容器会收集程序集中的证据,并读取配置文档中的信息对其实施一定的策略。配置文档中还提供了在什么情况下网格服务可以启动的信息,比如CPU利用率低于多少,可用内存处于多少。根据这些信息,容器会在合适时候新建一个APPDOMAIN,并在其中启动下载回来的程序,并在保证代码安全的情况下去执行它。在现行设计中,每个服务服务都会运行在各自的APPDOMAIN中,并能直接与服务发布者进行通讯。在以后的设计中,会逐渐将与服务发布者通讯的工作统一到控制器中,这个是基于提高系统的安全性和可控性来考虑的。