IceGrid

1. IceGrid的优势: 
a.      Location  Service 
b. On-demand Server activation 
按需启动,对于配置的节点(node)无需启动,在客户端向icegrid请求一个服务代理时,icegrid发现这个服务存在但没有被启动,会激活这个adapter所属的server或者让这个apapter向其注册。 

c. Application distribution 
IcePath2为你提供了各个分布服务器上的部署功能,能够帮你保持必要的程序和文件的同步。 

d. Replication and load balance 
IceGrid提供一种服务的多台服务器的服务组成一个逻辑上组,当客户端使用间接绑定的时候,可以获得他们任意一个的代理。Icegrid同时时监控着每一个服务器的系统负载,根据负载来给客户端分配代理。 

e. Session  & resource allocation 
客户端可以建立一个session来独占某个对象或者代理甚至服务器。IceGrid会阻止其他的客户端使用这个分配的资源,知道客户端释放它。 

f. 错误规避 
当有多个节点时,ice在建立连接失败的情况下会多次尝试多个连接。 

g. 动态查找 
你可以在客户端通过查找的方式,查找多所有的代理端口信息,并由你决定使用那个代理。 

h. 状态监测 
IceGrid提供监控接口,你可以使用监控接口来整合你现有的监控系统。 

i. 管理 
iceGrid提供了命令行方式和图形化方式管理你的应用 

j. 部署 
你可以通过xml文件利用部署符来简单的部署你的系统。 

2. IceGrid的应用程序结构。 
IceGird的应用程序主要包括:registry(注册表服务器)和若干个节点。 
registry里有一个数据库,他存储着对象和节点之间的关系信息。registry不需要对系统不会带来多要负担,所以可以将registry和node同时部署在一个服务器上。 

IceGrid的复制能力(replication)给我们的系统结构带来了很大的灵活性,这种复制能力是依赖于适配器(adapter)的。每个请求时registry来决定那个adapter将被使用,服务器就是多个适配器组合而成,但是icegrid要求每个服务器的名字必须是唯一的。 

3. IceGrid应用中需要解释的几个名词: 
a. Replica Group 
一组对象适配器的集合。一个服务可以建立任意多个Replica Group,每个Group需要单一的名字。 
在均衡时,就是根据group组中的成员来选择哪个成员提供服务。 

b. Node 
节点,分布的一组服务。 


4. Config文件说明 
a. registry配置说明 
i. IceGrid.Registry.Client.Endpoints=tcp -p 4061 
       registry的连接端口信息,必须配置端口号。节点就是通过Ice.Default.Locator来的定义来确定与   registry连接的接口信息。 

ii. IceGrid.Registry.AdminPermissionVerifer 
这个属性控制着icegrid的管理权 

iii. IceGrid.Registry.Data 
Registry数据库的文件目录 

iv. IceGrid.Registry.DynamicRegistration 
设置一个非零值,定义是否允许服务器注册他们的对象适配器。默认情况下IceGrid不允许在没有icegrid部署符部署的情况下server注册他的regsitry。 

b. 客户端配置 
你需要在客户端配置Ice.Default.Locator,定义的端口信息要和resigstry的IceGird.Registry.Client.Endponits一致,让客户端知道registry的端口进行通信。在客户端也只需要知道这一个端口,因为客户端每次会像registry询问代理的端口地址,registry返回给客户端代理的地址后,客户端直接与代理连接了,并且在没有销毁的情况这个链接应该是个长连接。 

c. 配置服务器端 
服务端的配置这里省略了,因为后面的部署描述符里会配置服务端的信息,所有用部署描述符的方式不需要服务器端的配置文件。 

5. 使用部署描述符部署 
部署描述符,描述了我们整个应用上的节点信息。 
<icegrid> 
    <application name="simple"> 
         <node name="Node1"> 
                 <server id="HelloServer"  exe="java" activation="on-demand"> 
                       <option>-jar</option> 
                       <option>test.jar</option> 
                        <adapter name="Hello" register-process="true"> 
                               <object identity="hello" type="::test:Hello" property="Identity"/> 
                       </adapter> 
                 </server> 
        </node> 
    </application> 
</icegird> 

a. Application 
应用标签,name属性定义它的名字 
b. Node 
节点标签,他应该代表了一个物理上的节点,节点必须有唯一的名字。 
c. Server 
一个服务器(逻辑上的),更确切的说应该能够通过exe命令的启动的一个服务程序。exe就是启动这个服务的命令,这个命令不能是exe或者.sh执行文件(这点我搞了1天才明白,把我害苦了)。activation属性,是设置服务的启动方式,on-demand是按需启动,这样你只需只需要通过icegridnode 加载了node的配置文件,然后通过icegridadmin加载registry配置文件,并通过iceadmin管理工具部署了部署描述符,你的客户端就可以访问你设计的复杂的分布式应用,所有的服务会在需要时被启动。option标签是exe执行命令命令行的参数。这样的配置就相当与你使用java -jar test.jar启动。 

d. Adapter 
适配器的定义,这个name非常重要,你需要在整个应用中取唯一的名字(好象是),在客户端的时候就是通过StringToProxy("Hello")这个名字来通过registry查找这个适配器,并返回给你这个适配器的端口信息,你的prxoyHelper.checkCast(Ice.ObjectPrx)的时候,就直接和返回的端口信息的adapter建立了连接。Register-process属性定义了是否这个节点是否可以被icegrid关闭。 


6. 启动你的icegrid应用 
先加载节点信息: 
icegridnode --Ice.Config=/opt/demo/config.properties 
然后加载registry信息 
Icegridadmin  --Ice.Config=/opt/demo/config.properties 
到了icegriadmin的命令行下添加你的部署描述符文件 
Application add "/opt/demo/appliation.xml" 

客户端和服务端程序都必须继承自Ice.Application。 

猜你喜欢

转载自aoyouzi.iteye.com/blog/2021635