Ice 是 网络通信引擎 Internet Communications Engine 的简称,是ZeroC开发的一个面向对象中间件平台。它提供了面向对象的远程过程调用、网格计算和发布/订阅功能,并有基于GPL的双许可协议和一个私有许可协议。它支持Linux、Solaris、Windows和Mac OS X等最主要的操作系统,和C++、Java、.NET语言(如C#或Visual Basic)、Objective-C、Python、PHP和Ruby等语言。

怎么样看node1和node2是否已经注册呢?
输入以下命令启动IceGridAdmin:
icegridadmin –Ice.config=D:\MyIceGrid\config.grid

 

1)启动位置服务
    icegridregistry --Ice.Config=config.grid
2)注册节点
    192.168.10.4机器:
     icegridnode --Ice.Config=config.node4  
    192.168.10.6机器:
     icegridnode --Ice.Config=config.node6



从窗口上能看出来建立的IceGrid使用的Ice版本为3.2。
在这里输入node list可以看到目前注册了的结点:node1和node2。

实施完以上步骤,我们的简单IceGrid就建立好了。当你在运行有node2的计算机上使用IceGridAdmin进要求输入用户名和密码,这个东西在IceGrid的配置文件congfig.grid的最后面。

--------------------------
application.xml文件
/************************************************************************/
<icegrid>
  <application name="Simple">
    <node name="node4">
      <server id="SimpleServer" exe="./server" activation="on-demand">
    <adapter name="Hello" endpoints="tcp" register-process="true">
      <object identity="hello" type="::Demo::Hello" property="Identity"/>
    </adapter>
      </server>
    </node>

<node name="node6">
      <server id="SimpleServer2" exe="./server" activation="on-demand">
    <adapter name="Hello" endpoints="tcp" register-process="true">
      <object identity="hello2" type="::Demo::Hello" property="Identity"/>
    </adapter>
      </server>
    </node>
  </application>
</icegrid>
/************************************************************************/
说明:该文件主要配置节点和具体服务.主要配置node name和server id(注意不要重复)即可。

 
 
ICE提供了灵活的配置部署方案,但为了减轻运维人员的工作量,开发的时候统一约定了一种规则,以便能够简易安装部署,所以总结了一套配置的规则。
目录结构:
 
 

根据高可用的方案,启动两个registry,一个作为master,另一个作为replica

 
 
 
 
---------------------------------------------------------------------------------------------------

2.6.1  分布式部署

在部署IceGrid分布式服务时,需要启动注册表服务(icegridregistry),并配置注册表服务地址端口、通信协议和注册信息保存的目录地址(ICE的注册信息保存为BerkeleyDB的数据库文件):

IceGrid.Registry.Client.Endpoints=tcp -p 4061

IceGrid.Registry.Data=/opt/ripper/registry

在服务器节点中和客户端都需要配置注册表服务的地址端口和通信协议:

Ice.Default.Locator=IceGrid/Locator:tcp -h 172.0.0.1 -p 4061

然后分别启动注册表服务(icegridregistry)和节点服务(icegridnode).

ICE提供了部署工具icegridadmin, 这个icegridadmin工具也需要定义Ice.Default.Locator属性.

接下需要编写应用部署文件,应用部署文件以XML方式保存。以下为支持适配器复制的应用配置文件,使用了服务模板:

<icegrid>

<application name="Ripper">

<replica-group id="EncoderAdapters"> //定义适配器复制组

<object identity="EncoderFactory"    //identity将在客户端中使用。

type="::Ripper::MP3EncoderFactory"/>

</replica-group>

<server-template id="EncoderServerTemplate"> //定义服务器模板

<parameter name="index"/>

<parameter name="exepath"

default="/opt/ripper/bin/server"/>

<server id="EncoderServer${index}"

exe="${exepath}"

activation="on-demand">

<adapter name="EncoderAdapter"

replica-group="EncoderAdapters"

endpoints="tcp"/>

</server>

</server-template>

<node name="Node1">

<server-instance template="EncoderServerTemplate"

index="1"/>

</node>

<node name="Node2">

<server-instance template="EncoderServerTemplate"

index="2"/>

</node>

</application>

</icegrid>

----------------------------------------------------------------------

ICE注册中心集群通过主从式的注册中心复制来实现,一个集群中有一个主注册中心,若干个副注册中心,主从的区别通过IceGrid.Registry.ReplicaName属性配置来实现,主注册中心的名称为 Master,其他的名字可以任意取。启动时先启动主注册中心,再启动其他注册中心,通过主注册中心更新的信息都将同步给副注册中心,各副注册中心之间不通信。如果主注册中心失效,需要从其他副注册中心提拨一个成为主注册中心,
 
IcePath2为你提供了各个分布服务器上的部署功能,能够帮你保持必要的程序和文件的同步
-----------------------------------------------------------------------

Ice的组件包括面向对象的远程对象调用、响应(replication还是复制?)、网格计算、故障转移、负载均衡、防火墙穿越和发布-订阅服务。为了访问这些服务,应用程序被连接到一个存根库或集合,该存根库或集合产生于一个语言无关的叫做slice的类IDL语法。

IceStorm

是一个面向对象的发布和订阅框架,它还支持联盟(federation)和服务质量(quality-of-service)。不同于其它的发布-订阅框架如TIBCO软件公司RendezvousSmartSockets,它的消息内容是由定义良好的类的对象组成的,而不是由结构化文本组成的。

IceGrid

是一套框架,它提供面向对象的负载均衡故障转移、对象发现和注册服务。

IcePatch

协助部署基于ICE的软件。例如,希望部署新功能和/或补丁到多台服务器的用户可以使用IcePatch。

Glacier

是一个基于代理的能够穿越防火墙的服务,因此使得ICE成为一个因特网通讯引擎。

IceBox

是一个面向服务架构的容器,它包含可执行的由.dll或.so库实现的服务。这是一个更轻量的选择,可以对每个服务构建整个可执行服务。 2

Slice

Ice规范语言(Specification Language for Ice)是一个Zeroc私有的文件格式,程序员按照它来编辑独立于计算机语言的声明和类、接口、结构和枚举的定义。Slice定义文件被用来作为存根生成过程的输入。存根依次被连接到应用程序和服务器,它们应该基于由slice声明/定义的接口和类进行互相通讯。

不同于CORBA,这里的类和接口还支持继承和抽象类。此外,slice还在宏和属性的表单中提供配置选项来管理代码生成过程。一个例子是,指令可以生成STL模板list<double>,而不是默认地生成STL模板vector<double>

--------------------------------------------------------------

 
ICEGrid 部署图
 
---------------------------------------------------------------
 

ICE平台内嵌负载均衡功能,对于分布大多个节点上的应用服务提供多种负载均衡方案,只需要通过XML配置文件即可完成负载均衡配置。配置项包括Type (负载均衡类型)、Sampling interval(负载信息收集间隙)、Number of replicas(返回给客户端的适配器个数)。

负载均衡类型有以下4种方式:

Random (随机方式):注册中心随机选择一个适配器给客户端,不检查适配器的负载。

Adaptive(适配方式):注册中心从所有适配器中选择一个负载最轻的适配器给客户端,Sampling interval参数只有在该类型的负载均衡中有效,这个参数指定节点定期向注册中心报告本地系统负载信息(system load information);

Round Robin(最近最少使用):注册中心从对应的适配器组中选择一个最近最少使用的适配器给客户。

Ordered(顺序方式):注册中心根据适配器的优先级,从高到低顺序选择一个适配器给客户端。

ICE中间件相关的更多相关文章

  1. ICE中间件说明文档

    ICE中间件说明文档 1       ICE中间件简介 2       平台核心功能 2.1        接口描述语言(Slice) 2.2        ICE运行时 2.2.1         ...

  2. 在windows7下配置PHP访问ICE中间件(ICE3.5.1+PHP5.4+Apache2.2 for vc9)

    按照ICE的官方文档(http://doc.zeroc.com/display/Ice/Using+the+Windows+Binary+Distribution#UsingtheWindowsBin ...

  3. wamp调用ICE中间件

    wamp调用ICE中间件 wamp 是集成开发包,我的wamp中的php 为5.3.10 ,经过3天艰苦奋战,终于在phpinfo()中看到了 ICE 出现了.. OK,最新的ice  为 3.5.1 ...

  4. react 中间件相关的一些源码解析

    零.随便说说中间件 在react的使用中,我们可以将数据放到redux,甚至将一些数据相关的业务逻辑放到redux,这样可以简化我们组件,也更方便组件抽离.封装.复用,只是redux不能很好的处理异步 ...

  5. django—中间件相关

    中间件 django的中间件是一个全局范围内处理django的请求和响应的框架级别的钩子. 作用:对于一个请求到达视图函数的前后进行处理 本质:中间件的本质是一个类,类中定义了特定的方法,Django ...

  6. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  7. ICE学习第二步-----从第一个程序了解ICE(HelloWorld)

    ICE(Internet Communications Engine)是一种面向对象的中间件平台,主要用于网络通讯.它为面向对象的“客户端-服务器”模型的应用提供了一组很好的工具和API接口.目前在全 ...

  8. LF模式是个坑,ZeroIce中间件让你体会这个痛

    LF模式是个坑,一个小小的失误就可能使你的网络处理瘫痪,Ice就很好地展现了出来,换句话说,Ice中间件或是LF模式就是一个坑,如果你一不小心. LF模式的官方论文中,论述了此模式用于高性能网络并发模 ...

  9. What?Tomcat-竟然也算中间件?

    关于 MyCat 的铺垫文章已经写了两篇了: MySQL 只能做小项目?松哥要说几句公道话! 北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下! 今天是最后一次铺垫,后面就可以迎接大 Bo ...

随机推荐

  1. echarts 知识点

    echarts map 禁止放大缩小,设置 calculable 为 false 即可. calculable: false echarts 报错: There is a chart instance ...

  2. php实现cookie加密解密

    1.加密解密类 class Mcrypt { /** * 解密 * * @param string $encryptedText 已加密字符串 * @param string $key 密钥 * @r ...

  3. POJ3666序列最小差值

    题目:http://poj.org/problem?id=3666 dp方程可以是 d [ i ] [ j ] = min ( d [ i - 1 ] [ k ] ) + abs ( a [ i ] ...

  4. iPhone激活策略说明

    本帖最后由 苏州汇东 于 2014-7-2 19:13 编辑 奉告各位封釉 千万不要泄露机器序列号IMEI号 远程ID真的可以上  只要机器上没有ID 就可以远程上任何ID 我这可以远程上ID 也帮忙 ...

  5. bzoj3668 起床困难综合症

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

  6. 关于ESXI5.0版本+ Broadcom BCM5720的BUG

    主要发生在网卡 Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet 和ESX 5.0之前的版本. 虚拟机的网络突然不通,必须删除网卡重新创建 ...

  7. 联想Z510升级BCM94352HMB刷网卡白名单曲折经历

    联想Z510笔记本:CPU I7 4702MQ没毛病 :内存4G DDR3不上虚拟机办公足够用: 硬盘升级为SSD240G足够用:有线网卡100M,真是垃圾,不过有线网卡是主板上的芯片,这个我可动不了 ...

  8. Java5,Java 6,Java 7,Java 8新特性

    Java5: 1.泛型 Generics:        引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处. Parameterized Type作为参数 ...

  9. WCF服务部署

    一.将WCF服务部署到IIS上 1.首先检测电脑上是否安装了IIS,一般来说Win7以上系统自带IIS 2.下面进行IIS服务的开启设置 控制面板=>打开或关闭Windos功能 3.勾选该窗口中 ...

  10. Z-tree 统计每一父节点的叶子节点数(看这一篇就够了)

    最近刚走出校园的我找到了第一份工作,在入职考核中就遇见了一道Z-tree的试题 这道题目本身是不难的,但是我第一次接触这个插件而且还把解决问题的方向搞错了,弄的我好几天都很难受. 弄得我都开始怀疑人生 ...