ZeroC ICE入门学习

ZeroC ICE 是指ZeroC公司的ICE(Internet Communications
Engine)中间件平台。对于客户端和服务端程序的开发提供了很大的便利。

目前ICE平台中包括Ice,Ice-E,Ice Touch。

Ice为主流平台设计,包括Windows和Linux,支持广泛的语
言,包括C++,Java,C#(和其他.Net的语言,例如Visual
Basic),Python,Ruby,PHP和ActionScript。也包括所有的ICE服务,例如Ice
Grid,IceStorm等。

Ice-E是Ice在资源受限的平台上的一个实现,支持C++和嵌入式操作系统,例如Windows
CE,Linux。Ice-E本身不包含任何服务,但是可以利用在Ice上提供的各种服务。因此,通过Ice-E,移动设备也能无缝的集成到分布式系统中。

Ice Touch是为iphone和ipod touch开发的版本,包括Object-C映射,支持Iphone
OS,并为MAC OS X开发图形界面应用程序提供完整的Cocoa框架的访问。

RPC(Remote Procedure Call Protocol
远程过程调用协议),是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC假定某些传输协议的存在,如TCP或UDP,为通讯程序之间携带信息数据;在OSI网络通讯模型中,RPC跨越了传输层和应用层。

Ice通过与编程语言无关的中立语言Slice(Specification Language fro
Ice)来描述服务的接口,从而达到对象接口与其实现想分离的目的。

目前Ice平台支持客户端API的语言有C++、.NET、Java、Python、Object-C、Ruby、PHP、JavaScript等。在服务器可以使用C、.NET、Java、Python等来开发。

  1. 关键特性:

  2. 支持多语言之间的RPC互通。

  3. 高性能的RPC调用。

  4. 支持传统的RPC调用、异步调用、One-Way调用、批量发起请求,支持TCP通信、UDP通信等。

  5. 多平台支持。

  6. 不断更新,与时俱进。

ZeroC ICE原理图

ZeroC ICE(一) ZeroC ICE入门学习

  1. ZeroC ICE通讯原理图

ZeroC ICE(一) ZeroC ICE入门学习

  1. Ice RPC架构图

RPC框架的性能对比

下面是各个主流rpc框架(ice、dubbo、thrift、grpc)的性能对比,请自己观看:

ZeroC ICE(一) ZeroC ICE入门学习

ZeroC ICE(一) ZeroC ICE入门学习

ZeroC ICE(一) ZeroC ICE入门学习

ZeroC ICE(一) ZeroC ICE入门学习

ZeroC ICE(一) ZeroC ICE入门学习

对比总结:

从测试结果可以看出ice的tps遥遥领先,而且并发越高tps比其他越高,其次thrift,dubbo和grpc则差了很多。Grpc最差估计跟用了HTTP2有关。

另外dubbox还支持rest,官方测试rest比kyro要慢1.5倍,本次未对rest测试。

从功能完备性来说ice和dubbo都算比较完备,都有大型生产案例,thrift的服务化功能比较缺失,grpc可能还不够成熟。

Dubbo的插件化机制的确不错,ice初次接触有些概念比较晦涩,经过封装和有详细的资料后要好上许多。

另外《Zeroc Ice权威指南》作者Leader-us对ice的测试结果如下:

Leader-us测试结果Ice则是2.5万,性能差不多是Avro的一倍,综合起来看Avro和thrift的性能应该差不多。

1.Apache
Avro框架简单,非接口编译的模式灵活度很高,用Json定义的RPC消息结构和方法简单并容易理解

2.Http协议的编码和传输机制效率远远低于长连接的Socket模式,本机对比了Avro的Http协议与Netty实现的Socket协议,请求应答消息相同的情况下,HTTP的TPS是500左右,而Netty
Socket模式则是1.5万左右,相差很悬殊

3.多语言客户端支持并不是那么容易的事情,Avro的Python客户端目前只实现了基本的Http协议,(Java的同时实现了Netty客户端协议),这种情况下,服务端只能也采用Http协议,从而导致并发性能问题

前置条件

ZeroC ICE框架的开发是需要依赖如下的环境。

环境安装参考资料:

  1. 安装《VMware安装Linux教程》地址:http://blog.csdn.net/yuan_xw/article/details/49827477

  2. 安装《Linux网络配置与远程连接》地址:http://blog.csdn.net/yuan_xw/article/details/49945007

  3. 安装《Linux安装JDK及环境变量配置》地址:http://blog.csdn.net/yuan_xw/article/details/49948285

  4. 所使用到的技术/环境版本:

环境 名称 版本
操作系统 CentOS 7.x
运行环境 JDK 1.8+
分布式框架 ZeroC ICE 3.7.0
开发框架 Spring 4.3.9

ZeroC ICE 安装

  1. 关闭防火墙:

执行命令:

systemctl stop firewalld.service

systemctl disable firewalld.service

  1. 安装wget命令:

执行命令:yum install -y wget

  1. 安装ZerocIce:

执行命令:

cd /etc/yum.repos.d

wget https://zeroc.com/download/Ice/3.7/el7/zeroc-ice3.7.repo

yum install ice-all-runtime ice-all-devel -y

yum install libfreeze-c++-devel freeze-utils -y

修改注册中心配置

  1. 修改注册中心配置文件:/etc/icegridregistry.conf

ZeroC ICE(一) ZeroC ICE入门学习

  1. 测试安装是否成功:

执行命令:

cd /etc

icegridregistry –Ice.Config=icegridregistry.conf&

ZeroC ICE(一) ZeroC ICE入门学习

修改node节点配置

  1. 修改node节点配置icegridnode.conf,将node注册到注册中心上:
    /etc/icegridnode.conf

执行命令:

vim /etc/icegridnode.conf

ZeroC ICE(一) ZeroC ICE入门学习

  1. 创建数据目录:

mkdir -p /var/lib/ice/icegrid/node1

  1. 测试安装是否成功:

执行命令:

cd /etc

icegridnode –Ice.Config=icegridnode.conf&

Windows客户端安装

  1. 进入 ZeroC Ice 官网下载
    ZeroC ICE(一) ZeroC ICE入门学习
  2. 双击进入安装,点击Next
    ZeroC ICE(一) ZeroC ICE入门学习
  3. 点击Install,进行下一步
    ZeroC ICE(一) ZeroC ICE入门学习
  4. 点击Finish安装完成
    ZeroC ICE(一) ZeroC ICE入门学习

  5. 配置环境变量

安装完Ice-3.7.0.msi后开始配置机器环境变量:

—-在我的电脑点击右键,选择属性

—-在高级里面选择环境变量

—-在系统变量里选择Path

–双击Path

在计算机的的环境变量的路径Path中添加:D:\Program
Files\ZeroC\Ice-3.7.0\bin

ZeroC ICE(一) ZeroC ICE入门学习

  1. 打开Ice
    执行命令:
    ZeroC ICE(一) ZeroC ICE入门学习

连接Ice

  1. 依照下图进行连接:
    ZeroC ICE(一) ZeroC ICE入门学习
  2. 安装步骤,选择Manual Endpoint选择,进行下一步:
    ZeroC ICE(一) ZeroC ICE入门学习
  3. 选择IP地址、端口号进行连接
    ZeroC ICE(一) ZeroC ICE入门学习
  4. 输入IP地址、端口号,选择协议:TCP,点击下一步:Next选项
    ZeroC ICE(一) ZeroC ICE入门学习
  5. 自定义登录的用户名、密码
    ZeroC ICE(一) ZeroC ICE入门学习
  6. 使用客户端连接成后,可以显示已经有node1节点了
    ZeroC ICE(一) ZeroC ICE入门学习

学习ZeroC ICE推荐书籍:

  1. 《ZeroC Ice权威指南》

相关文章: