前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >下一代互联网中间件——Ice启程

下一代互联网中间件——Ice启程

作者头像
博文视点Broadview
发布2020-06-11 11:13:36
1.1K0
发布2020-06-11 11:13:36
举报

Ice平台介绍

Ice 师出名门,是由前CORBA 专家Marc Laukien、Michi Henning 及Matthew Newhook等人开发的新一代的面向对象的分布式系统中间件。 因为是业界知名的分布式标准的缔造者们所打造的新一代分布式中间件,所以Ice 既继承了CORBA 的一些血统,也精简了CORBA 的很多过于复杂而又缺乏实用性的功能,使得平台变得简捷而又高效,并且在IT,也上第一次真正实现了CORBA 当初的宏大目标:语言和平台中立、高效通信,却没有CORBA 的复杂和各种兼容性问题(这也是最终导致CORBA 死亡的两个最重要因素)。 除此之外,Ice 又增加了一些创新性的特征:比如采用了统一的通信协议和底层框架,增加了UDP 传输调用的支持,同时支持异步调用和SSL 安全调用,并且随着IT 技术的变化和发展,Ice 在不断地推陈出新,每年都有新版本问世,从诞生到当下,十几年的历史,其王者地位无人撼动。

Ice 采用了与CORBA 同样的原理,通过与具体编程语言无关的中立语言Slice(Specification Language for Ice)来描述服务的接口,从而达到对象接口与其实现相分离的目的。Slice 是建立在客户与服务器之间的合约,用以描述应用所使用的类型和对象接口。它独立于实现语言,所以客户采用的语言与编写服务器所用的语言没有任何关系。

为了做到在各个语言和平台上都能100%正确实现Slice 的语义和Ice 平台的承诺功能,ZeroC 公司花费了大量人力,逐个实现了各个主流编程语言与操作系统上的Ice 运行库及运行环境。目前Ice 平台支持的语言有C++、NET、Java、Python、Objective-C、Ruby、PHP、JavaScript 等,而Ice 的运行库和运行环境则涵盖了PC 平台和移动设备,PC 平台支持Windows 和主流的Linux 发行版,移动设备目前支持Windows Mobile、Android 及iOS。此外,由于其杰出的高性能和多语言多平台支持,Ice 经常被各公司用在一些关键项目的开发中,其官网给出的客户名单有Wave Fax、PC Soft、Skype、宝钢、宝信软件等超过30 家公司。

Ice 关注于一个技术核心问题——RPC 通信,经历了十几年的发展,在很多细节方面都有一些值得称道的做法,下面是其中一些关键特性。

◎ 支持多语言之间的RPC 互通。与众多平台不同,在它的服务端也可以用几种语言开发,比如C、.NET、JAVA、Python 等,不同语言开发的服务端与客户端可以完全互通,对于支持多语言的服务来说,是很难得的一个特性,省去了大量的开发成本和开发周期。 ◎ 高性能RPC 调用。这点是业界公认的,一些大型联网游戏及Skype 等对实时性要求很高的系统都采用了Ice 平台,这足以说明这一点。笔者也曾做过简单对比,也验证了其高性能,而且在不同语言的客户端调用时,其性能仍然很好。 ◎ 支持传统的RPC 调用、异步调用、One-Way 调用、批量发起请求,支持TCP 通信、UDP 通信,适用于不同的业务场景。 ◎ 支持安全通信,Ice 框架里提供了支持业界标准的SSL 安全加密的可拔插插件。并且多种编程语言都支持该特性。 ◎ 多平台支持。包括X86 系统、ARM、移动设备等。 ◎ 提供了强大的IceGrid。支持注册表主从备份,无单点故障,服务按需启动,随时扩容和迁移,完备的负载均衡机制无须客户端重启,自动感应服务位置的变化。 ◎ 不断更新,与时俱进。对近些年流行的JavaScript 语言及新的移动平台的支持都能及时跟上。

这里,笔者仅就多语言开发支持这一特性来分析Ice 平台所能带给你的额外价值,当你采用Ice 框架开发一个服务后所能直接变现的承诺,在图2.1 中可以得到完美诠释。

图2.1 Ice 多语言支持示意图

对于一个规模较大的平台来说,开发一个服务并不很难,但如何让多种语言都能很一致地调用你的服务并联调通过,则很不容易,即使对于SOAP 这种看似很标准的接口来说,依然存在很多编程语言和SOAP框架的版本兼容性不好的问题。而HTTP Rest 的接口在联调时还会碰到各种参数问题。从经验来看,除非把一个现成的编译好的客户端代码发给对方,否则会开发一次,到处联调,形成平台开发的梦魇。

下面我们来看看Ice 平台的组成,Ice 平台从功能可以划分为以下几部分。

◎ Slice 工具。将Slice 语言定义的服务接口编译成各种具体语言的实现代码,属于开发环境的一部分。 ◎ Ice 容器和命令。包括IceGrid、Ice Registry、Ice Node、Ice Admin、IcePatch 等命令,用于启动、管理IceGrid,需要在运行Ice 服务的机器上选择性地部署其中的某一个或几个组件。 ◎ Ice 运行库。为一组API 库,不同的语言有不同的实现,如Java 对应JAR 文件,C 语言对应.so 文件(在Windows 下对应.dll 文件),这些运行库需要被Ice 服务端程序和客户端程序所调用,以实现Ice 内部的底层通信。

图2.2 Ice 跨语言开发流程示意图

这个开发流程示意图告诉我们,怎样从零开始开展Ice 跨平台的项目开发活动,简单地说,就是首先用Slice语言定义中立的服务接口文件,然后采用相应语言的命令行编译生成对应的程序骨架源文件,最后实现服务端业务代码开发,部署服务,然后客户端利用Ice提供的运行期客户端Library(JAR 文件)实现远程服务方法调用,详细流程如下。

◎ 分析和设计系统的服务:采用面向服务架构或者“微服务”的设计理念进行系统分析和设计,确定系统中的“服务”单元、每个服务的接口及服务之间的依赖关系。 ◎ 服务接口定义:采用Ice Slice 语言对服务接口进行定义,并用Slice 工具编译成你所熟悉的开发语言(本书以Java 为例)的实现代码,这些实现代码包括服务端和客户端骨架代码,可以认为是项目中的“公共”包。 ◎ 服务端业务逻辑实现:在Slice 生成的服务端代码上进行业务逻辑代码的编写,在这个过程中除了在服务之间相互调用时用到Ice 的一些API 外,在绝大多数情况下,不会用到Ice 的代码。 ◎ 编写IceGrid 的服务描述文档:xxxgrid.xml,此文档类似于J2EE 的web.xml 或 EJB的服务描述文件,定义了每个服务的访问地址(Endpoint)、部署的节点(Ice Node)、负载均衡策略(replica-group)等关键信息。 ◎ 打包代码并部署到各个Ice Node 上,启动IceGrid,借助Ice 工具发布xxxgrid.xml,服务端工作至此基本完成。很重要的一点是,借助Ice 平台提供的工具,你可以很方便地将xxxgrid.xml 中的服务重新规划和部署到新的节点上,而客户端无须重启和改变任何代码。 ◎ 编写客户端软件,访问部署好的服务,并有针对性地做性能测试和调优。

好了,这样我们便初步了解了Ice 的特性、组成部分及开发流程。

——本文摘自《ZeroC Ice权威指南》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ice平台介绍
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档