几种分布式调用技术的比较 -- RPC VS REST
我之前在传统IT公司干活,后来来了互联网,感受到了很多不同,其中有一点就是两者使用到的技术有一些差别。比如说分布式调用技术。
我在的这家公司内部的服务架构是基于Thrift的,服务基于Thrift进行发布,以至于很多人没有听过、使用过Web Service。
话说传统IT传了很多年的SOA就是基于Web Service,已经有了一整套完整的理论和产品进行支持,互联网竟然很多没涉及过。后来想了想,也是,传统IT更多做的是各种资源的整合,偏重各种异构,遗留系统整合的复杂度,对效率要求不高。互联网则是对效率要求到了极致,内部系统使用Web Service性能跟不上。而且现在对外发布的服务有了更优的REST,使用Web Service的场景也没那么多。
我用一个比较大的词“分布式调用“来表示一台机器对另外一台机器的访问。分布式这个东东说白了就是随着技术和业务的发展,一台单独机器的计算,存储能力不能够满足日益增长的IT业务需求,所以需要把计算,存储能力扩大到多台机器上。
分布式调用的底层基础就是网络编程,一台机器向另外一台机器发送消息,另外一台机器收到消息后,根据某种协议来做一些事情:
1. 比如进行一个方法的调用
2. 比如对某个资源进行操作
分布式调用大体上就分为两类,RPC式的,REST式的,两者的区别主要是就是:
1. RPC是面向动作的(方法调用)
2. REST是面向资源的(URL表示资源,HTTP动词表示动作)
从变现形式来看,RPC的编程模型较重量级,REST的编程模型更轻量级
分布式调用技术的主要关注点有四个,前面两点比较常见,最后两点是我新加的:
1. 采用什么传输协议,TCP, HTTP,还是其他
2. 采用什么序列化协议(也叫CodeC,编解码,Marshalling),比如基于文本的XML(自定义XML,或者SOAP),基于二进制流(Java序列化,或者自定义序列化协议,比如Thrift, Protobuf, JBoss Marshalling)
3. 采用什么IO形式,阻塞IO,非阻塞同步IO(select / poll / epoll),非阻塞异步IO
4. 采用什么方式运行,运行在HTTP服务器上,还是以单独进程运行
根据第一点来看,RPC阵营如下
1. Web Service采用HTTP协议做传输层协议,采用SOAP做应用层协议
2. XML-RPC,采用HTTP协议做传输层协议,使用自定义XML做应用层协议
3. JMI, Thrift, Protobuf等都使用TCP做传输协议,使用自定义应用层协议
REST直接使用HTTP做应用层协议,使用URL表示资源,使用HTTP动词表示动作
根据第二点来看,RPC阵营如下
1. Web Service和XML-RPC采用基于文本的XML进行序列化
2. RMI基于Java序列化协议
3. Thrfit, Protobuf等采用了基于二进制流的序列化协议,比如就是采用消息头消息体的方式传输,通过消息头来定义长度,从而保证能够正确读写数据
根据第三点来看,随着NIO的广泛应用,越来越多的服务器端支持非阻塞IO,客户端可以采用同步IO,也可以采用非阻塞IO。
关于阻塞,非阻塞,同步,异步的概念,看这篇http://blog.csdn.net/iter_zc/article/details/39291647
关于第四点,Web Service和REST都运行在HTTP服务器上,Thrift这样的都是以单独进程运行
另外多说几句Web Service,Web Service采用HTTP层做传输协议,采用文本格式的SOAP做应用层协议,相比于基于二进制流的RPC协议,
好处是:基于HTTP传输,采用文本方式,可以穿越防火墙,适合组织内向组织外提供服务
坏处是:基于文本的序列化效率低下,传输层基于HTTP,相比于TCP,多了一层协议,性能也有影响,不适合对性能要求高的场景
REST近年来有取代Web Service的趋势,主要是Web Service的优点它都有,而且更轻量级,采用JSON来序列化数据性能也还可以,编程模型更加简单,适合组织内向组织外发布服务。
组织内部对性能要求高的场景可以使用Thrift这种的RPC技术,基于二进制流的序列化协议,基于NIO的传输协议,性能较高,适合高并发的场景
几种分布式调用技术的比较 -- RPC VS REST的更多相关文章
- 分布式调用技术 RPC VS REST
一 分布式调用大体上就分为两类,RPC式的,REST式的,两者的区别主要是就是: 1. RPC是面向动作的(方法调用) 2. REST是面向资源的(URL表示资源,HTTP动词表示动作) 从变现形式来 ...
- C#远程调用技术WebService修炼手册
一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...
- 三种分布式对象主流技术——COM、Java和COBRA
既上一遍,看到还有一遍将关于 对象的, 分布式对象, 故摘抄入下: 目前国际上,分布式对象技术有三大流派——COBRA.COM/DCOM和Java.CORBA技术是最早出现的,1991年OMG颁布了C ...
- 分析 5种分布式事务方案,还是选了阿里的 Seata(原理 + 实战)
好长时间没发文了,最近着实是有点忙,当爹的第 43 天,身心疲惫.这又赶上年底,公司冲 KPI 强制技术部加班到十点,晚上孩子隔两三个小时一醒,基本没睡囫囵觉的机会,天天处于迷糊的状态,孩子还时不时起 ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- C#远程调用技术WebService葵花宝典
一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你 ...
- 搞懂分布式技术21:浅谈分布式消息技术 Kafka
搞懂分布式技术21:浅谈分布式消息技术 Kafka 浅谈分布式消息技术 Kafka 本文主要介绍了这几部分内容: 1基本介绍和架构概览 2kafka事务传输的特点 3kafka的消息存储格式:topi ...
- 手撸基于swoole 的分布式框架 实现分布式调用(20)讲
最近看的一个swoole的课程,前段时间被邀请的参与的这个课程 比较有特点跟一定的深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. 内容听 ...
- 个人学习分布式专题(二)分布式服务治理之分布式协调技术Zookeeper
分布式协调技术Zookeeper 2.1 zookeeper集群安装部署(略) 2.2 zookeeper的基本原理,数据模型 2.3 zookeeper Java api的使用 2.4 zookee ...
随机推荐
- Floyd判圈算法 Floyd Cycle Detection Algorithm
2018-01-13 20:55:56 Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm) ...
- Mahout 0.10.1安装(Hadoop2.6.0)及Kmeans测试
1.版本和安装路径 Ubuntu 14.04 Mahout_Home=/opt/mahout-0.10.1 Hadoop_Home=/usr/local/hadoop Mavent_Home=/opt ...
- Mysql之explain调优
Explain调优 使用explain语法,对SQL进行解释,根据其结果进行调优: MySQL 表关联的算法是 Nest Loop Join,是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该 ...
- nyoj164——卡特兰数(待填坑)
题意:将1~2n个数按照顺时针排列好,用一条线将两个数字连接起来要求:线之间不能有交点,同一个点只允许被连一次. 最后问给出一个n,有多少种方式满足条件. 卡特兰数(列): 令h(0)=1,h(1)= ...
- jquery下跨域请求之代码示例
场景描述: 在域A下异步获取B域下的接口: 实现方法: $.ajax({ url : (Q.lottery.serverTimeUrl || 'about:blank'), error : funct ...
- js 返回上一页和刷新以及页面跳转
1. Javascript 返回上一页history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). 3. window.history.forw ...
- HDU 3172 Virtual Friends(map+并查集)
Virtual Friends Time Limit : 4000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tot ...
- 内存保护机制及绕过方法——利用Ret2Libc绕过DEP之ZwSetInformationProcess函数
1. DEP内存保护机制 1.1 DEP工作原理 分析缓冲区溢出攻击,其根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计算机体系结构基本上是不可能的,我们只能靠 ...
- ES查询index对应的mapping信息
private void getMappingByIndex(String indices) throws IOException { GetMappingsRequest getMappingsRe ...
- C++11_ Lambda
版权声明:本文为博主原创文章,未经博主允许不得转载. 这次主要介绍C++11的Lambda语法,一个非常给力的语法 1.组成 : [...导入符号](...参数)mutable(可改写) throw ...