Zeroc Ice grid 研究学习

一、概念

slice: ice提供了自己的接口定义语言。用来定义rpc的接口和对象。

ice.object: rpc调用的接口必须继承自ice.Object

servant:ice.Object的实例化对象叫做servant,rpc调用的就是servant对象,因此servant需要线程安全

endpoints:客户端rpc调用servant的地址

icebox:servant的容器

icenode:icebox的容器

registry:注册中心,负责管理icenode的注册,负责和发布。

二、部署

步骤:

  1. 启动registry
  2. 启动node,注册到registry
  3. 将代码部署到node服务器上
  4. 将应用描述文件应用到registry上,node上将自动启动application

三、配置文件

registry配置文件一个:registry.cfg

node配置文件n个:node1.cfg, node2.cfg

应用描述文件app.xml

配置文件详情:

registry.cfg

# grid实例名
IceGrid.InstanceName=SzcIceGrid
#客户端连接到注册中心的地址
IceGrid.Registry.Client.Endpoints=tcp -p 4061
IceGrid.Registry.Server.Endpoints=tcp
IceGrid.Registry.Internal.Endpoints=tcp
IceGrid.Registry.PermissionsVerifier=SzcIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=SzcIceGrid/NullPermissionsVerifier
#注册中心数据保存路径,需要手动创建文件夹
IceGrid.Registry.Data=/data/shizc/Desktop/ice/registry
IceGrid.Registry.DynamicRegistration=1
Ice.Admin.InstanceName=AdminInstance
Ice.Admin.ServerId=Admin

node1.cfg

# 注册中心地址
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 192.168.7.7 -p 4061
#node名
IceGrid.Node.Name=node1
IceGrid.Node.Endpoints=tcp
#node存储路径
IceGrid.Node.Data=/data/shizc/Desktop/ice/nodes/node1
IceGrid.Node.Output=/data/shizc/Desktop/ice/nodes/node1
IceGrid.Node.CollocateRegistry=0
#IceGrid.Node.Trace.Replica=2
#IceGrid.Node.Trace.Activator=3
#IceGrid.Node.Trace.Adapter=3
#IceGrid.Node.Trace.Server=3

node2.cfg

# 注册中心地址
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 192.168.7.7 -p 4061

IceGrid.Node.Name=node2
IceGrid.Node.Endpoints=tcp
IceGrid.Node.Data=/data/shizc/Desktop/ice/nodes/node2
IceGrid.Node.Output=/data/shizc/Desktop/ice/nodes/node2
IceGrid.Node.CollocateRegistry=0
#IceGrid.Node.Trace.Replica=2
#IceGrid.Node.Trace.Activator=3
#IceGrid.Node.Trace.Adapter=3
#IceGrid.Node.Trace.Server=3

app.xml

<icegrid>
  <application name="FileSystemApp">
    <properties id="MultiThreaded" >
      <property name="Ice.PrintStackTraces" value="1" ></property>
      <property name="IceSSL.Trace.Security" value="2" ></property>
      <property name="Ice.ThreadPool.Client.Size" value="2" ></property>
      <property name="Ice.ThreadPool.Client.SizeMax" value="50" ></property>
      <property name="Ice.ThreadPool.Server.Size" value="10" ></property>
      <property name="Ice.ThreadPool.Server.SizeMax" value="100" ></property>
      <property name="IceBox.InheritProperties" value="1" ></property>
      <property name="Ice.Override.ConnectTimeout" value="5000" ></property>
      <property name="Ice.Override.Timeout" value="10000" ></property>
      <property name="IceBox.Trace.ServiceObserver" value="1" ></property>
      <property name="Ice.Default.LocatorCacheTimeout" value="300" ></property>
      <property name="Ice.BackgroundLocatorCacheUpdates" value="1" ></property>
    </properties>
    <!-- 配置模板 -->
    <server-template id="FileSystemServerIceBoxTemplate">
        <parameter name="index" default="0"></parameter>
        <!-- exe指定java启动 -->
        <icebox id="FileSystemServerIceBox${index}" exe="java" activation="on-demand" >
          <properties>
            <properties refid="MultiThreaded" />
          </properties>
          <option>-Xmx512M</option>
          <!-- icebox启动main方法 -->
          <option>IceBox.Server</option>
          <!-- 开发的代码路径 -->
          <env>CLASSPATH=.:/usr/share/java/*:/data/shizc/Desktop/ice/bin</env>
          <!-- entry指定icebox启动的service, replica-group指定endpoints组 -->
          <service name="FilesystemService" entry="service.FilesystemService">
            <adapter name="FilesystemService" id="FilesystemService${index}" endpoints="default" replica-group="FilesystemServiceRep" ></adapter>
          </service>
        </icebox>
    </server-template>
    
    <replica-group id="FilesystemServiceRep">
      <load-balancing type="round-robin" n-replicas="0" />
      <!-- 指定servant的名字 -->
      <object identity="RootDir" type="::filesystem::Directory"></object>
      <object identity="iamfile" type="::filesystem::File"></object>
    </replica-group>
    <!-- 每个node定义2个icebox -->
    <node name="node1">
      <server-instance template="FileSystemServerIceBoxTemplate" index="11"></server-instance>
      <server-instance template="FileSystemServerIceBoxTemplate" index="12"></server-instance>
    </node>
    <node name="node2">
      <server-instance template="FileSystemServerIceBoxTemplate" index="21"></server-instance>
      <server-instance template="FileSystemServerIceBoxTemplate" index="22"></server-instance>
    </node>
  </application>
</icegrid>

四、启动

  1. icegridregistry --Ice.Config=registry.cfg
  2. icegridnode --Ice.Config=node1.cfg
  3. icegridnode --Ice.Config=node2.cfg
  4. icegridadmin --Ice.Config=node1.cfg

    登陆后

    application add app.xml

五、代码

明天加上。。。

时间: 2024-10-04 14:55:23

Zeroc Ice grid 研究学习的相关文章

ZeroC Ice 暂记

摘自: http://weibo.com/p/1001603869896789339575 原文地址: http://www.oschina.net/question/865233_242146 吴治辉,@mycat,拥有超过 15 年的软件研发经验,精通 Java 编程,专注于电信软件和云计算方面的软件研发,参与过众多与分布式.云计算相关的大型项目的架构设计和编程,具备丰富的大型项目架构设计经验,是业界少有的具备很强编程能力的S级资深架构师,目前就职于惠普.此外,他还是国内知名开源分布式数据库

ZeroC Ice权威指南

这篇是计算机类的优质预售推荐<ZeroC Ice权威指南>. >|下一代互联网中间件 | 跨平台 | 跨语言 | 分布式 | 安全 | 透明 | 面向对象 | 性能优越 | 防火期穿透 | 通信屏蔽 | 电商系统基础架构Paas平台基础设施 | Rest杀手 | RPC之王 | 互联网架构师必备工程利器 编辑推荐 1.ZeroC Ice具有如下看点: |下一代互联网中间件 | 跨平台 | 跨语言 | 分布式 | 安全 | 透明 | 面向对象 | 性能优越 | 防火期穿透 | 通信屏蔽|电

ZeroC ICE的远程调用框架 AMD

继上一篇<ZeroC ICE的远程调用框架>,本篇再来说其中的AMD. 当在ice文件中声明某个接口方法Method为["amd"]后,接口方法在stub类生成的远程调用框架代码不会变,但在skeleton类生成的就不是_iceD_Method和Method,而是_iceD_Method和Method_async.而amd模式和非amd模式的代码生成模板区别在于,_iceD_Method调用Method_async代替Method,并且在调用后不进行out方向参数的处理.另

UnityEditor研究学习之自定义Editor

UnityEditor研究学习之自定义Editor 今天我们来研究下Unity3d中自定义Editor,这个会让物体的脚本在Inspector视窗中,产生不同的视觉效果. 什么意思,举个例子,比如游戏中我有个角色Player,他有攻击力,护甲,装备等属性. 所以我定义一个脚本:MyPlayer.cs: using UnityEngine; using System.Collections; public class MyPlayer : MonoBehaviour { public int ar

利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)

原文:利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还可以修改已有的程序集,并且它支持多个运行时框架上例如:.net2.0/3.5/4.0,以及silverlight程序 官方地址:http://www.mono-project.com/Cecil 首先,我先假想有一个这样的商业组件,该组件满足了以下条件: 1. 该程序集的代码被混淆过了 2. 该程序

ZeroC Ice启用SSL通讯的配置

Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯屏蔽.https://zeroc.com/ 该中间件在跨语言集成时比较方便,如下就是在JAVA C++之间交互时,启用ssl通讯的设置 1. 证书生成 ICE提供申请证书的脚步,通过ICE脚本,可生成所需的证书.进入Ice-3.5.1/cpp/src/ca目录. 1.1. 生成根证书,输入证书相关信

Spring Transaction + MyBatis SqlSession事务管理机制研究学习

线上的系统中,使用的是Spring+Mybatis+Mysql搭建的框架,由于客户需要,最近一直在对性能提升部分进行考虑,主要是涉及Mysql的一些重要参数的配置学习,以及Spring事务管理机制的学习,因为通过观察服务器日志,发现在这两部分的时候耗时比较严重,特别是进行mysql事务提交的时候,项目源码中使用了Spring的声明式事务,即通过@Transactional注解来控制事务的开启与提交,这两天看了一些关于Spring Transaction事务的一些文章,也debug了源码,总算有点

Android gc垃圾回收研究学习

尊重个人劳动成果,转载请注明出处:http://blog.csdn.net/hnulwt/article/details/44903331 文中很多内容说到了JVM,我想通过研究学习JVM来达到认识DVM的目的.为了严谨,查询了一下 JVM和DVM的不同点 1.Dalvik 和标准 Java 虚拟机(JVM)的首要差别 Dalvik 基于寄存器,而 JVM 基于栈.基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短. 2.Dalvik 和 Java 字节码的区别 Dalvik

用Python开发Zeroc Ice应用

Zeroc Ice简介   Zeroc ICE(Internet Communications Engine ,互联网通信引擎)是目前功能比较强大和完善的RPC框架,支持跨平台.跨语言调用.它非常灵活,可以通过TCP.UDP.SSL/TSL或WebSocket连接,支持同步.异步调用,以及服务器和客户端之间的双向连接.Zeroc ICE的效率非常高,它使用一种高效的二进制协议,对带宽的消耗比较小.甚至对于通过卫星的RPC调用,Zeroc ICE还可以对数据流进一步压缩.另外Zeroc ICE还可