Ice介绍
        Ice(Internet Communications Engine)是ZeroC公司的杰作,继承了CORBA的血统,是新一代的面向对象的分布式系统中间件。Ice是RPC通讯领域里最稳定、强大、高性能、跨平台、多语言支持的老牌开源中间件,特别适合于当前互联网领域中一个平台存在多种开发语言编程,以及网站和app应用并存的复杂大型项目。
        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. 支持多语言之间的RPC互通。
    2. 高性能的RPC调用。
    3. 支持传统的RPC调用、异步调用、One-Way调用、批量发起请求,支持TCP通信、UDP通信等。
    4. 多平台支持。
    5. 不断更新,与时俱进。

Java在分布式系统的核心技术
  1. JNDI:Java命名和目录服务,类似zooKeeper
  2. JMS:Java消息服务 如LinkeIn 来源的Kafka ,ZeroMQ,nanomsg都值得研究
  3. RMI:Java远程通信框架,替代它的有很多,比如Ice、Dubbo、Avro、Thrift、Protocol Buffers协议等。

几个常用来源中间件介绍

其实,一个复杂的分布式系统可以通过搭积木的方式来建立,每个积木就是一个中间件,可通过适当的代码将其黏合在一起。

ZooKeeper 
    ZooKeeper 提供基础的目录/名字服务、配置管理服务。并且在此基础上还能提供分布式锁、leader选举等高级功能。网上有一段有趣生动的介绍:“ZooKeeper,顾名思义就是动物园里大象(hadoop)、蜜蜂(Hive)、小猪(Pig)、和我的猫(MyCat)的管理员”。
    客户端建议采用Apache Curator这个二次封装的客户端来进行客户端代码的编写,它封装和简化了很多于业务无关的逻辑,使用简单,质量可靠。

Apache Kafka
    Kafka是一个高吞吐量的分布式消息系统,由LinkIn开源,被描述为LinkeIn的“中枢神经系统”。Kafka管理从各个应用程序汇聚到此的信息流,这些数据经过处理后再被分发到何处。
    Kafka使用Scala开发,而Scala又是JVM上运行的动态需要,因此对会Java的同学来说学习难度并不大,其客户端也支持Java语言,比较容易部署在本机上进行学习研究。

Facebook Thrift
    Facebook Thrift是最新一代高性能、跨需要的RPC通信框架,支持多种语言。
    Facebook Thrift与Ice类似,不过没有Ice完整和成熟。与Facebook Thrift类似的还有Apache Avro。

Apache Storm、Spark Streaming 、Samza
    与Hadoop相比Storm是个实时的高容错的分布式计算系统。Storm也可以处理批量数据,但其在保证高可靠性的前提下还可以让处理进行得更加实时,所有的信息都会被处理。Storm同样还具备容错和分布计算的特性,这让Storm可以扩展到不同的机器上进行大批量的数据处理。
   Storm的主要开发语言为Java,并且包括了Clojure这种Lisp语言,对于Java工程师来说,学习难度并不大。与Strom类似的还有Spark Streaming、LinkIn的Samza,它们都是最近开源的热门项目。
    Spark Streaming是Spark中新的流式计算框架。Spark并不会像Strom那样一次处理一个数据流,而是在处理前按时间间隔预先将其分为一段段的批处理作业。
    而Samza处理数据流时,会依次处理收到的每条消息。Samza的流单位既不是元组,也不是Dstream而是一条条消息。
    Strom、Spark Streming、Samza这三种实时流计算系统都是分布式系统,具有低延迟、可扩展和容错性等诸多优点。它们的共同特同特色在于:允许你在运行数据流代码时,将任务分配到一系列具有容错能力的计算机上并行运行,此外,它们都提供了简单的API来简化底层实现的复杂程度。

MyCat
    MyCat是一个基于MySQL的分表分库的中间件软件,也可以说是一个分布式数据库,其前身为阿里巴巴开源的Cobar,但由于阿里巴巴后来发展云平台并提供收费RDS服务,因此最终关闭了这个开源项目。然后国内一帮技术大拿一起发起了MyCat开源项目 ( http : / / www my cat org. cn ),目标是成为Apache旗下的顶级中国开源项目。

章节笔记
3.1 看不大明白
3.2-3.5  有实现
3.6 IcePatch2介绍使用-部署、同步。
4.1 改造Ice日志,将ice日志以logback的方式保存。
4.2 封装ice客户端,很实用,已经实现demo。
4.3 集成Ice与Spring框架
4.4 实现Ice服务质量监控,通过代码拦截采集信息、JRDS监控等。
45. 使用Maven标准化项目

5.1 深入解析Ice异步调用,怎么结合Ice本事实现异步

5.2 Ice附在均衡机制研究,多负载均衡深入研究
5.3 Ice SLL实践。加密 数字证书 CA(收费)  自己做CA证书,需要注意,Tcp调用和SLL调用100次性能下降4倍。这就是为什么Ice默认采用TCP通信和大多数系统不使用SSL加密的方式进行接口调用的原因。
5.4 PHP优化建议。
5.5 Ice性能调优
    需要注意Ice默认线程池大小是1 。一般我们要设置成CPU核心数的4-16倍,以支持更多的并发性和防止请求阻塞。
    Ice for Java 是运行在JVM上面的,JVM调优的几个原则如下
        1. 尽量使用稳定版本的JVM,因为每次JVM的升级都带来了性能的升级。
        2. 由于会在一个服务器上启动多个Ice Node实例,因此每个Ice Node上的IceBox不要分配过大的内存以造成浪费和竞争。观察GC的波动,在性能测试过程中监控JVM堆内存的峰值,来设定一个合理的堆大小。
        3. 不建议设置不确定的优化参数,以免造成困惑。
        4. 调优的目标是GC总体时间减少,内存使用稳定,避免大幅波动。
5.6 Ice部署方案
    要满足以下条件
        1. 避免单点故障
            将Ice的注册表服务Registry部署为主从模式,主节点宕机时,从节点继续工作,为了可靠需要在两台不同的服务器上分别启动进程;
        2. 提供服务的负载均衡
            每个Ice服务部署在至少两台不同的服务器上并启动负载均衡机制;
        3. 尽可能充分利用硬件资源
            通过将CPU密集型的服务与I/O密集型服务交叉部署在一台服务器上来达到目标;
    实际部署案例,6台X86服务器组成IceGrid集群,如图:
        
        Ice-Reg-M是Ice的注册表主节点,部署和启动注册表服务,并启动一个Ice Node,在此Node上根据情况部署访问频率和服务压力(主要是CPU)不是很高的一组服务。
        另外,Ice-Reg-M和Ice-Reg-S上同时提供Ice服务部署同步(3.6介绍过)的Server端进程,用于Ice服务的二进制文件的同步更新操作,其余节点全部安装同步客户端命令,默认连接Ice-Reg-M,实现版本更新和部署升级。
        其余四台各产生两组互为主备的结构。
6.1 Ice For JavaScript Ice3.6才支持,文档和demo还不是很完善。是基于WebSocket技术。
6.2 Ice对移动设备的支持,支持Android(Java)和IOS(Object-C)
第7 章 互联网架构师深造之路

还是有收获的,里面有些理念还是比较独特的。但是整体来说还是不能看懂看透,只能大概了解下,写些demo。感觉书本作者也不是很用心,代码格式有点乱~ ,此书的精华还未完全吸收。等我在修炼一段时间再过来看看。

《ZeroC Ice 权威指南》笔记的更多相关文章

  1. HTML+CSS笔记 CSS笔记集合

    HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...

  2. CSS笔记--选择器

    CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...

  3. HTML+CSS笔记 CSS中级 一些小技巧

    水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...

  4. HTML+CSS笔记 CSS中级 颜色&长度值

    颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...

  5. HTML+CSS笔记 CSS中级 缩写入门

    盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...

  6. HTML+CSS笔记 CSS进阶再续

    CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...

  7. HTML+CSS笔记 CSS进阶续集

    元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...

  8. HTML+CSS笔记 CSS进阶

    文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...

  9. HTML+CSS笔记 CSS入门续集

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...

  10. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...

随机推荐

  1. GDAL不支持创建PCIDSK的面状矢量格式

    最近在使用GDAL创建PCIDSK格式的矢量数据,发现创建点和线的矢量数据都没问题,创建面状的只有属性表没有图形.在GDAL官网说明也写的是支持的,地址为:http://www.gdal.org/fr ...

  2. 2.QT中操作word文档

     Qt/Windows桌面版提供了ActiveQt框架,用以为Qt和ActiveX提供完美结合.ActiveQt由两个模块组成: A   QAxContainer模块允许我们使用COM对象并且可以 ...

  3. UNIX网络编程——客户/服务器程序设计示范(总结)

    (1)当系统负载较轻是,每来一个客户请求现场派生一个子进程为之服务的传统并发服务器程序模型就足够了.这个模型甚至可以与inetd结合使用,也就是inetd处理每个连接的接收.我们的其他意见是就重负荷运 ...

  4. Sublime Text 3 使用MarkDown编写带预览的文本

    看到别人使用一个叫Markdown的标记语言来完成编码,心里就有点小激动,毕竟简短的几个符号,就可以写出如此精美的界面,实在是让人感到心旷神怡啊.于是我就在网上搜索了一些相关项的设置,于是便有了下面的 ...

  5. StarUML中InteractionOperation的画法

    StarUML画InteractionOperation的方法:http://stackoverflow.com/questions/16152278/using-alt-in-sequence-di ...

  6. matlab中 mcc/mbuild/mex 区别

    mcc 的作用是将 .m文件编译为 c/c++动态链接库文件,使你可以在 c/c++程序中使用 matlab的一些函数功能.mcc 也可以将.m文件编译为exe可执行文件. mex 的作用是将 c/c ...

  7. UNIX环境高级编程——信号基本概述和signal函数

    一.为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程.2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断.3. 如果CPU当前正在执行这个进程的代码,则 ...

  8. HTML5 input 类型: email及url

    原文地址:HTML5′s "email" and "url" Input Types 原文日期: 2010年09月15日 翻译日期: 2013年08月13日 在 ...

  9. 如何利用BI搭建电商数据分析平台

    某电商是某大型服装集团下的重要销售平台.2015 年,该集团品牌价值达数百亿元,产品质量.市场占有率.出口创汇.销售收入连年居全国绒纺行业第一,在中国有终端店3000多家,零售额80 亿.其羊绒制品年 ...

  10. JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

    JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来 ...