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在分布式系统的核心技术
- JNDI:Java命名和目录服务,类似zooKeeper
- JMS:Java消息服务 如LinkeIn 来源的Kafka ,ZeroMQ,nanomsg都值得研究
- 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。感觉书本作者也不是很用心,代码格式有点乱~ ,此书的精华还未完全吸收。等我在修炼一段时间再过来看看。
- HTML+CSS笔记 CSS笔记集合
HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...
- CSS笔记--选择器
CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...
- HTML+CSS笔记 CSS中级 一些小技巧
水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...
- HTML+CSS笔记 CSS中级 颜色&长度值
颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...
- HTML+CSS笔记 CSS中级 缩写入门
盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...
- HTML+CSS笔记 CSS进阶再续
CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...
- HTML+CSS笔记 CSS进阶续集
元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...
- HTML+CSS笔记 CSS进阶
文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...
- HTML+CSS笔记 CSS入门续集
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...
- HTML+CSS笔记 CSS入门
简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...
随机推荐
- EBS值集,弹性域常用表
值集 select * from fnd_flex_value_sets select * from fnd_flex_values select * from fnd_flex_valu ...
- 带你深入理解STL之Vector容器
C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...
- 14 fragment传值
两个fragment传值 方式一 布局文件代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- [ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试
本文地址: http://blog.csdn.net/sushengmiyan/article/details/38479079 本文作者:sushengmiyan ----------------- ...
- iOS下JS与原生OC互相调用(总结)
这是去年总结的一篇文章,也一并先放到这个目录下好了. iOS开发免不了要与UIWebView打交道,然后就要涉及到JS与原生OC交互,今天总结一下JS与原生OC交互的两种方式. JS调用原生OC篇 方 ...
- Tomcat内核之ASCII解码的表驱动模式
我们知道Tomcat通信是建立在Socket的基础上,而套接字在服务器端和客户端传递的报文都是未经过编码的字节流,每8位组成1个字节,计算机以二进制为基础,这是由于使用晶体管的开合状态表示1和0,这样 ...
- Tomcat性能优化及常用命令整理
1汤姆猫性能优化 1.1连接参数 1.1.1默认连接配置 默认连接器采用阻塞式 IO,默认最大线程数为200,配置如下: <Connector port="8080" pro ...
- Java-IO之BufferedOutputStream(缓冲输出流)
BufferedOutputStream是缓冲输出流,继承于FilterOutputStream,作用是为另外一个输出流提供换从功能. 主要函数列表: BufferedOutputStream(Out ...
- 【Unity Shaders】Transparency —— 透明的cutoff shader
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- Struts2进阶(一)运行原理及搭建步骤
Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...