ice服务:

IcePack
        我们在第 12 页提到过, IcePack 是 Ice 的定位服务,用于在使用间接绑定时把符号性的 (symbolic)适配器名解析为协议-地址对。 除了这样的定位服务, IcePack 还提供了其他特性:
            • IcePack 允许你注册服务器,进行自动启动:当客户发出请求时,服务器无需在运行, IcePack 会在第一个客户请求到达时,随需启动服务器。
            • IcePack 支持部署描述符 (deployment descriptors),能让你轻松地配置含有若干服务器的复杂应用。
            • IcePack 提供了一种简单的对象查找服务,客户可用来获取它们感兴趣的对象的代理。
 
IceBox
        IceBox 是一种简单的应用服务器,可用于协调许多应用组件的启动和停止。应用组件可以作为动态库、而不是进程进行部署。可以理解为IceBox就是用于加载自己写的库的应用程序
 
IceStorm
        IceStorm 是一种发布-订阅服务,能够解除客户与服务器的耦合。在本质上, IceStorm 充当的是事件分发交换机。发布者把事件发给这个服务,由它发给订阅者。这样,发布者发布的单个事件就可以发送给多个订阅者。只有那些与订阅者感兴趣的主题相吻合的主题才会发给这个订阅者。这个服务允许你指定服务质量标准, 让应用在可靠性和性能之间进行适当的折衷。发布订阅者可以理解为生产消费者的一种表现形式。
        适合场景:
            1 把信息分发给大量应用组件
            2  IceStorm还可以作为联盟(federated)服务运行,也就是说,服务的多个实例可以在不同的机器上运行,使处理负载分摊到许多 CPU 上。
 
IcePatch
        IcePatch 是一种软件修补服务。 你可以用它来轻松地把软件更新分发给客户。客户可以简单地连接到 IcePatch,请求获得特定应用的更新。这个服务会自动检查客户的软件的版本,并以一种压缩形式下载任何更新过的应用组件,从而节省带宽。
 
Glacier
        Glacier 是 Ice 防火墙服务:它能让客户与服务器通过防火墙安全地进行通信,且又不牺牲安全性。 客户-服务器之间的通信数据使用公钥证书进行了完全的加密,并且是双向的。 Glacier 支持相互认证,以及安全的会话管理。

ICE的好处:

        • 面向对象的语义
             Ice “在线路上”完全保留了 面向对象范型。所有的操作调用都使用迟后绑定,所以操作的实现的选定,是根据对象在运行时的 (而不是静态的)实际类型决定的。
        • 支持同步和异步的消息传递Ice 提供了同步和异步的操作调用和分派,并且通过 IceStorm 提供了发布-订阅消息传递机制。这样,你可以根据你的应用的需要来选择通信模型,而不必把你的应用硬塞进某种模型里。
        • 支持多个接口通过 facets,对象可以提供多个不相关的接口,同时又跨越这些接口、保持单一的对象标识。这提供了极大的灵活性,特别是在这样的情况下:应用在发生演化,但又需要与更老的、已经部署的客户保持兼容。
        • 机器无关性客户及服务器与底层的机器架构屏蔽开来。对于应用代码而言,像字节序和填充这样的问题都隐藏了起来。
 
Ice 综述
        • 语言无关性
            客户和服务器可以分别部署,所用语言也可以不同 (目前支持C++、 Java,以及 PHP (客户端))。 客户和服务器所用的 Slice 定义建立两者之间的接口合约,这样的定义也是它们唯一需要达成一致的东西。
        • 实现无关性
            客户不知道服务器是怎样实现其对象的。这意味着,在客户部署之后,服务器的实现可以改变,例如,它可以使用不同的持久机制,甚至不同的程序设计语言。
        • 操作系统无关性
            Ice API 完全是可移植的,所以同样的源码能够在 Windows 和 UNIX上编译和运行。
        • 线程支持
            Ice run time 完全是线程化的,其 API 是线程安全的。 作为应用开发者,(除了在访问共享数据时进行同步)你无需为开发线程化的高性能客户和服务器付出额外努力。
        • 传输机制无关性
            Ice 目前采用了 TCP/IP 和 UDP 作为传输协议。客户和服务器代码都不需要了解底层的传输机制 (你可以通过一个配置参数选择所需的传输机制)。
        • 位置和服务器透明性
            Ice run time 会负责定位对象,并管理底层的传输机制,比如打开和关闭连接。客户与服务器之间的交互显得像是无连接的。如果在客户调用操作时,服务器没有运行,你可以通过 IcePack 让它们随需启动。服务器可以迁移到不同的物理地址,而不会使客户持有的代理失效,而客户完全不知道对象实现是怎样分布在多个服务器进程上的。
        • 安全性
            通过 SSL 强加密,可以使客户和服务器完全安全地进行通信,这样,应用可以使用不安全的网络安全地进行通信。你可以使用 Glacier穿过防火墙,实现安全的请求转发,并且完全支持回调。
        • 内建的持久机制
            使用 Freeze,创建持久的对象实现变成了一件微不足道的事情。 Ice提供了对高性能数据库 Berkeley DB[18] 的内建支持。
总结:
  也就是说,ICE是跨语言,跨平台,面向对象的通信中间件。在此基础上,我们能很方便地进行应用程序间的事件效果。相比wcf而言,它具有一套更全面的通信和管理机制,对象持久化,跨平台均是wcf不具备的。

ICE系列之2——ICE的服务与好处的更多相关文章

  1. Ice系列--傻瓜式服务开发IceBox

    前言 相信大家在没有接触过框架之前,都自己或多或少的开发过一些应用服务.每个应用服务除了业务配置还有很多环境配置,资源配置等,这些跟部署相关的配置.服务跟配置文件是一种静态绑定的方式,更新配置还需要重 ...

  2. Ice系列--强大如我IceGrid

    前言 IceGrid是一个提供服务定位和服务激活的组件,但它的功能远不止于此.从它的命名可以看出它的设计理念-网格计算(grid computing).网格计算被定义为由一系列关联的廉价计算机组成的计 ...

  3. 玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案

    将VS创建的Windows服务项目编译生成的程序,通过命令行 “服务.exe -Service”注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服 ...

  4. 玩转Windows服务系列——命令行管理Windows服务

    说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令,命令行都是非常方便以及强大的工具. 接下来就看一下如何通过cmd命 ...

  5. Ice笔记-利用Ice::Application类简化Ice应用

    Ice笔记-利用Ice::Application类简化Ice应用 作者:ydogg,转载请申明. 在编写Ice相关应用时,无论是Client还是Server端,都必须进行一些必要的动作,如:Ice通信 ...

  6. 玩转Windows服务系列——命令行管理Windows服务

    原文:玩转Windows服务系列——命令行管理Windows服务 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令, ...

  7. WCF开发实战系列四:使用Windows服务发布WCF服务

    WCF开发实战系列四:使用Windows服务发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇文章中我们通过编写的控制台程序或WinForm程序来为本 ...

  8. AngularJS路由系列(4)-- UI-Router的$state服务、路由事件、获取路由参数

    本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● UI-Router的$state服务● UI-Router的路由事件● UI-Router获取路由参数 Angular ...

  9. OSGi 系列(七)之服务的监听、跟踪、声明等

    OSGi 系列(七)之服务的监听.跟踪.声明等 1. OSGi 服务的事件监听 和 bundle 的事件监听类似,服务的事件监听是在服务注册.注销,属性被修改的时候,OSGi 框架会发出各种不同的事件 ...

随机推荐

  1. JS Math对象中一些小技巧

    JS中快速获取数组中最大/最小值 var a=[1,2,3,5]; alert(Math.max.apply(Math, a));//最大值 alert(Math.min.apply(Math, a) ...

  2. gerrit 解决中文乱码相关配置(转载)

    From:http://www.cnblogs.com/Jerryshome/archive/2012/04/19/2457170.html 计划在团队中采用code review,因为一直是用git ...

  3. NDK SO 库开发与使用中的 ABI 构架选择

    Bugtags V1.2.7 引入了 NDK SO 库,在集成的时候,遇到不同的 SO 库打包到 APK 时,安装在某些机器上,出现 java.lang.UnsatisfiedLinkError 加载 ...

  4. 无法连接远程SQL Server 数据库的原因

    1. tcp协议开启 2. 1433端口是否添加防火墙例外

  5. 慕课网-安卓工程师初养成-5-4 使用 Eclipse 调试程序

    来源:http://www.imooc.com/video/1627 IDE断点调试功能 比如 之前的程序,写错了,变成如下 package com.imooc; import java.util.S ...

  6. express 4 中 session的处理(仅为博主笔记)

    1.app.js var express = require('express') var app = express();var routers = require('./router/index' ...

  7. android开发--(SimpleAdapter)运用

    SimpleAdapter的参数说明  第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要  第二个参数表示生成一个Map(String ,Object)列表选项    第三个 ...

  8. ---Arch Linux 之AUR

    只需下载压缩包,解压,进入文件夹,里面好像也只有一个PKBUILD文件,makepkg -s (自动下载程序然后编译打包), 然后pacman -U xxxx.pkg.xz 就好了

  9. APP测试工具之TraceView卡顿检测

    Traceview卡顿检测 Traceview是Android平台特有的数据采集和分析工具,集成在DDMS工具中,可以采集程序中的方法执行耗时.调用关系.调用次数以及资源占用等情况. 一.使用方法 1 ...

  10. Hibernate对象的状态

    站在持久化的角度, Hibernate 把对象分为 4 种状态: 1. 持久化状态 2. 临时状态 3. 游离状态 4. 删除状态 Session 的特定方法能使对象从一个状态转换到另一个状态. 下面 ...