ICE综述

ICE综述

        ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作,将基础对象操作和数据库操作封装在这一层,在业务逻辑层以及表现层(java,php,.net,python)进行更丰富的表现与操作,从而实现比较好的架构。基于ICE的数据层可以在未来方便的进行扩展。ICE支持分布式的部署管理,消息中间件,以及网格计算等等。 ICE和ACE在性能与开发简便上深化了CORBA这是一个老牌的分布式中间件平台,并且以其标准实现困难,开发者使用困难而著称。 ICE采用的许多思想也能在CORBA 及以前的一些分布式计算平台中找到。在有些方面, ICE与CORBA 非常接近,而在另外一些方面,它们的差异则意义深远,并且在架构上有着广泛的影响。如果你曾经使用过CORBA,了解这些差异十分重要。尽管从表面看来,ICE对象模型与CORBA 对象模型是一样的,但它们在一些重要方面却有所不同。类型系统ICE对象和CORBA 对象一样,都只有一个派生层次最深的(most derived)主接口。但ICE对象可以提供其他接口作为facets。重要的是要注意到,一个ICE对象的所有facets 都具有相同的对象标识,也就是说,客户看到的是具有多个接口的单个对象,而不是看到多个对象、每个对象有不同的接口。facets 提供了极大的架构灵活性。特别地,它们为版本管理问题提供了一种解决途径:你可以简单地给已经存在的对象增加新的facet,轻松地扩展某个服务器的功能,而不会破坏已有的、已经部署的客户。代理语义ICE代理(CORBA 对象引用的等价物)不是不透明的。客户只要知道对象的类型和标识,无需其他系统组件的支持,就可以创建出代理(在使用间接绑定时,不必了解对象的传输地址)。

        ICE是一种面向对象的中间件平台。从根本上说,这意味着ICE为构建面向对象的客户-服务器应用提供了工具、API 和库支持。ICE应适合在异种环境中使用:客户和服务器可以用不同的编程语言编写,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论部署环境如何,这些应用的源码都是可移植的。

使用ICE的好处

        (1)客户无需询问外部的查找服务,比如命名服务,就能够创建代理。实际上,对象标识和对象的名字被认为是同一事物。这样能够消除命名服务的内容与实际情况失去同步所可能带来的问题;同时,为了让客户和服务器正常工作、必须正常运转的系统组件的数目也会减少。

        (2)通过创建所需的初始对象的代理,客户可以轻松地进行自引导(bootstrap)。这样就无需使用单独的引导服务了。

        (3)不需要对串化代理进行不同的编码。一种统一的表示就足够了,而这种表示是人可以阅读的。这样就避免了CORBA 的三种不同的对象引用编码(IOR、corbaloc,以及corbaname)所带来的各种复杂问题。开发者多年使用CORBA 的经验表明,对象引用的不透明性很成问题:它不仅需要更加复杂的API 和运行时支,还会妨碍我们构建现实的系统。为此, CORBA 增加了像corbaloc和corbaname这样的机制,以及用于进行引用比较的is_equivalent和hash 操作(这些操作的定义有问题)。所有这些机制都降低了对象引用的不透明性,但CORBA 平台的其他部分仍试图维持引用是不透明的这样一个错觉。结果,开发者在两方面所得的东西都是最糟的:引用既不是完全不透明的,也不是完全透明的——这样所带来的混乱和复杂性相当大。对象标识ICE对象模型假定对象标识在任何地方都是唯一的(但并没有把这个要求强加给应用开发者)。这种对象标识的主要好处是,你可以迁移服务器,也可以把多个不同服务器中的对象合并进一个服务器,而不用考虑名字冲突的问题:如果每个ICE对象都具有唯一的标识,它就不可能与另外的域中的对象的标识发生冲突。ICE对象模型还使用了强对象标识:使用本地的客户端操作,你就能确定两个代理表示的是否是同一个对象(在CORBA 中,要进行可靠的标识比较,你必须调用远程对象上的操作)。本地标识比较要高效得多,而且对于有些应用领域而言(比如分布式事务服务),这样的比较也至关紧要。

ICE在架构上提供的好处

        (1)面向对象的语义:ICE “在线路上”完全保留了面向对象范型。所有的操作调用都使用迟后绑定,所以操作的实现的选定,是根据对象在运行时的(而不是静态的)实际类型决定的。

        (2)支持同步和异步的消息传递:ICE提供了同步和异步的操作调用和分派,并且通过IceStorm提供了发布-订阅消息传递机制。这样,你可以根据你的应用的需要来选择通信模型,而不必把你的应用硬塞进某种模型里。

        (3)支持多个接口:通过facets,对象可以提供多个不相关的接口,同时又跨越这些接口、保持单一的对象标识。这提供了极大的灵活性,特别是在这样的情况下:应用在发生演化,但又需要与更老的、已经部署的客户保持兼容。

        (4)机器无关性:客户及服务器与底层的机器架构屏蔽开来。对于应用代码而言,像字节序和填充这样的问题都隐藏了起来。

        (5)语言无关性:客户和服务器可以分别部署,所用语言也可以不同(目前支持C++、Java,以及PHP (客户端))。客户和服务器所用的Slice 定义建立两者之间的接口合约,这样的定义也是它们唯一需要达成一致的东西。

        (6)操作系统无关性:ICE API 完全是可移植的,所以同样的源码能够在Windows 和UNIX上编译和运行。

        (7)线程支持:Ice run time 完全是线程化的,其API是线程安全的。作为应用开发者,(除了在访问共享数据时进行同步)你无需为开发线程化的高性能客户和服务器付出额外努力。

        (8)传输机制无关性:ICE目前采用了TCP/IP和UDP作为传输协议。客户和服务器代码都不需要了解底层的传输机制(你可以通过一个配置参数选择所需的传输机制)。

        (9)位置和服务器透明性:Ice run time 会负责定位对象,并管理底层的传输机制,比如打开和关闭连接。客户与服务器之间的交互显得像是无连接的。如果在客户调用操作时,服务器没有运行,你可以通过IcePack让它们随需启动。服务器可以迁移到不同的物理地址,而不会使客户持有的代理失效,而客户完全不知道对象实现是怎样分布在多个服务器进程上的。

        (10)安全性:通过SSL 强加密,可以使客户和服务器完全安全地进行通信,这样,应用可以使用不安全的网络安全地进行通信。你可以使用Glacier穿过防火墙,实现安全的请求转发,并且完全支持回调。

        (11)内建的持久机制:使用Freeze,创建持久的对象实现变成了一件微不足道的事情。ICE提供了对高性能数据库Berkeley DB[18] 的内建支持。

        ICE的源码是开放的。尽管要使用ICE平台,并不一定要阅读源码,通过源码你可以了解各种事情是怎样实现的,或把这些代码移植到新的操作系统上。

        总而言之,ICE和ACE 提供了一流的分布式计算开发和部署环境,比我们所知道的其他任何平台都更完整。提供适用于异种环境的面向对象中间件平台,提供一组完整的特性,支持广泛的领域中的实际的分布式应用的开发,避免不必要的复杂性,使平台更易于学习和使用。提供一种在网络带宽、内存使用和CPU 开销方面都很高效的实现,提供一种具有内建安全性的实现,使它适用于不安全的公共网络。

ICE的全称是Internet Communications Engine,即因特网通信引擎。

ICE是由ZeroC, Inc.公司开发的。

官网:http://doc.wendoc.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pyside6 安装和简单界面开发

Pyside6 安装和简单界面开发 Pyside6介绍Pysied6开发环境搭建Python安装Pysied6安装 Pyside6界面开发简单界面设计界面设计界面编译 编写界面初始化代码软件打包 Pyside6介绍 对于Python的GUI开发来说,Python自带的可视化编程模块的功能较弱,PySide是跨…

【11】c++设计模式——>单例模式

单例模式是什么 在一个项目中,全局范围内,某个类的实例有且仅有一个(只能new一次),通过这个唯一的实例向其他模块提供数据的全局访问,这种模式就叫单例模式。单例模式的典型应用就是任务队列。 为什么要使…

12P2532X162-233A KJ3222X1-BA1 CE4003S2B3 EMERSON CONTROLLER

12P2532X162-233A KJ3222X1-BA1 CE4003S2B3 EMERSON CONTROLLER EDGEBoost I/O模块是一种可扩展的模块化解决方案,集成到Premio的工业计算机中,通过即插即用的可扩展性提供增强的可靠性。这些附加模块有助于解决在加固边缘出现的设计限制和兼容性问题。…

JDBC-day01(JDBC概述,获取数据库连接)

一:JDBC概述 1.数据持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。简单来…

gorm 自定义时间、字符串数组类型

文章目录 自定义时间类型自定义字符串数组测试与完整代码测试代码测试结果 GORM 是GO语言中一款强大友好的ORM框架,但在使用过程中内置的数据类型不能满足以下两个需求,如下: time.Time类型返回的是 2023-10-03T09:12:08.5352808:00这种字符串…

美国各流域边界下载,并利用arcgis提取与处理

一、边界数据的下载 一般使用最普遍的流域边界数据是从HydroSHEDS官网下载: HydroBASINS代表一系列矢量多边形图层,以全球尺度呈现次级流域边界。该产品的目标是提供一种无缝的全球覆盖,其中包含了不同尺度(从数十到数百万平方千米&#xf…

Zygote Secondary:加速应用启动的未来之路

Zygote Secondary:加速应用启动的未来之路 1. 引言 在现代的移动应用开发中,启动速度和响应性能是用户体验的重要方面。然而,传统的 Android 进程管理方式在启动应用时会出现性能瓶颈,导致启动时间过长和资源占用过多。为了解决…

Linux基本指令(中)——“Linux”

各位CSDN的uu们好呀,今天,小雅兰的内容是Linux基本指令呀!!!下面,让我们进入Linux的世界吧!!! cp指令(重要) mv指令(重要&#xff09…

“益路同行”栏目专访 第06期—小星星关爱联盟创始人魏洁荣老师

中国善网在本届(第十届)慈展会上特别推出了《益路同行》采访栏目,《益路同行》栏目旨在寻觅公益之路上同行者的故事,挖掘公益更深层次的内涵,探索新时代公益发展道路。希望公益企业、人物、故事被更多人看到&#xff0…

外卖小程序源码vs定制开发:何时选择哪种方式?

在数字餐饮行业的蓬勃发展中,外卖应用程序已经成为餐厅和创业者的必备工具。然而,当涉及到开发外卖应用程序时,您会面临一个重要的决策:是使用外卖小程序源码还是进行定制开发?这两种方法各有优势和劣势,取…

【刷题笔记10.5】LeetCode:排序链表

LeetCode:排序链表 一、题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 二、分析 这题咱们默认要求:空间复杂度为O(1)。所以这把咱们用自底向上的方法实现归并排序,则可以达到O(1) 的空间复杂…

【itext7】使用itext7将多个PDF文件、图片合并成一个PDF文件,图片旋转、图片缩放

这篇文章,主要介绍使用itext7将多个PDF文件、图片合并成一个PDF文件,图片旋转、图片缩放。 目录 一、itext7合并PDF 1.1、引入依赖 1.2、合并PDF介绍 1.3、采用字节数组方式读取PDF文件 1.4、合并多个PDF文件 1.5、合并图片到PDF文件 1.6、旋转图…

王杰C++day1

#include <iostream>using namespace std;int main() {cout << "输入一个字符串&#xff1a;" << endl;string str;int a 0,b 0,c 0,d 0,e 0;getline(cin,str);for(int i 0;i < (int)str.size();i){if(str[i] > A && str[i] &…

接口自动化测试介入项目管理流程

上图为接口自动化测试介入梧桐项目管理流程图 前景和目标&#xff1a; 现在公司的项目流程都是全部开发完成后提交到测试环境进行测试&#xff0c;导致测试人员在开发编码过程中相对清闲&#xff0c;除了完成测试用例之外没有其他事情可做&#xff0c;而当进入测试阶段又会变…

兽药经营小程序微信商城的作用是什么

无论家宠还是畜牧养殖&#xff0c;生病杀虫总是不可少的&#xff0c;尤其对铲屎官们来说&#xff0c;宠物的健康状况很重要&#xff0c;以此花费百元千元也并不觉心疼&#xff0c;兽药的需求度也是非常高&#xff0c;那么对相关从业商家来说&#xff0c;遇到的难题有哪些&#…

Sql server 使用DBCC Shrinkfile 收缩日志文件

磁盘空间有限&#xff0c;需要收缩日志文件释放空间。 数据库名称上右击属性->文件,逻辑名称日志文件默认名称为“_log”结尾。 alter database 数据库 set recovery simple dbcc shrinkfile(XXX_log,2,truncateonly) alter database 数据库 set recovery full

安全基础 --- MySQL数据库的《锁》解析

MySQL的ACID &#xff08;1&#xff09;ACID是衡量事务的四个特性 原子性&#xff08;Atomicity&#xff0c;或称不可分割性&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;Durability&#xff09; &…

数据结构与算法(七)--使用链表实现栈

一、前言 之前我们已经学习了链表的所有操作及其时间复杂度分析&#xff0c;我们可以了解到对于链表头的相关操作基本都是O(1)的&#xff0c;例如链表头增加、删除元素&#xff0c;查询元素等等。那我们其实有一个数据结构其实可以完美利用到这些操作的特点&#xff0c;都是在…

Python与数据分析--Pandas操作进阶

目录 1.文件读取方式 1.1.绝对路径读取文件 1.2.相对路径读取文件 2.列表数据操作 2.1.列索引指定 2.2.代码数据对齐 3.创建新CSV文件 4.缺失值处理 4.1.缺失值创建 4.2.缺失值检索 4.3.缺失值查询 4.3.1.isnull()函数判断 4.3.2.notnull()函数判断 4.3.3.any()函数…

在win10里顺利安装了apache2.4.41和php7.4.29以及mysql8.0.33

一、安装apache和php 最近在学习网站搭建。其中有一项内容是在windows操作系统里搭建apachephp环境。几天前根据一本书的上的说明尝试了一下&#xff0c;在win10操作系统里安装这两个软件&#xff1a;apache2.4.41和php7.4.29&#xff0c;安装以后apche能正常启动&#xff0c;…