我之前在传统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的更多相关文章

  1. 分布式调用技术 RPC VS REST

    一 分布式调用大体上就分为两类,RPC式的,REST式的,两者的区别主要是就是: 1. RPC是面向动作的(方法调用) 2. REST是面向资源的(URL表示资源,HTTP动词表示动作) 从变现形式来 ...

  2. C#远程调用技术WebService修炼手册

    一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...

  3. 三种分布式对象主流技术——COM、Java和COBRA

    既上一遍,看到还有一遍将关于 对象的, 分布式对象, 故摘抄入下: 目前国际上,分布式对象技术有三大流派——COBRA.COM/DCOM和Java.CORBA技术是最早出现的,1991年OMG颁布了C ...

  4. 分析 5种分布式事务方案,还是选了阿里的 Seata(原理 + 实战)

    好长时间没发文了,最近着实是有点忙,当爹的第 43 天,身心疲惫.这又赶上年底,公司冲 KPI 强制技术部加班到十点,晚上孩子隔两三个小时一醒,基本没睡囫囵觉的机会,天天处于迷糊的状态,孩子还时不时起 ...

  5. 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)

    在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...

  6. C#远程调用技术WebService葵花宝典

    一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你 ...

  7. 搞懂分布式技术21:浅谈分布式消息技术 Kafka

    搞懂分布式技术21:浅谈分布式消息技术 Kafka 浅谈分布式消息技术 Kafka 本文主要介绍了这几部分内容: 1基本介绍和架构概览 2kafka事务传输的特点 3kafka的消息存储格式:topi ...

  8. 手撸基于swoole 的分布式框架 实现分布式调用(20)讲

    最近看的一个swoole的课程,前段时间被邀请的参与的这个课程 比较有特点跟一定的深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. 内容听 ...

  9. 个人学习分布式专题(二)分布式服务治理之分布式协调技术Zookeeper

    分布式协调技术Zookeeper 2.1 zookeeper集群安装部署(略) 2.2 zookeeper的基本原理,数据模型 2.3 zookeeper Java api的使用 2.4 zookee ...

随机推荐

  1. java实现赋值excel模板,并在新文件中写入数据,并且下载

    /** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...

  2. VS2013 The Debugger Resource DLL is out of date

    折磨了我一天的问题,亲们,记住,下载vs2013 update5 ,别的方法不用试了,完全没用!

  3. [java]BoneCP 参数详解

    BoneCP 参数详解: ======================================== 一.BoneCP配置文件格式(bonecp-config.xml):  xml versio ...

  4. Java集合详解3:Iterator,fail-fast机制与比较器

    Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...

  5. CodeForces 297A Parity Game (脑补题)

    题意 一个01串,可以有两种操作:①在末尾添加parity(a):②删除开头的一个字符.其中parity(a),当串中1的个数为奇数时为1,偶数时为0.问某个01串是否可以通过若干操作变成另一个01串 ...

  6. css3中自定义 placeholder 文本颜色

    对于 ie 浏览器我们可以通过自定义的 class 名称,直接修改 span 这个标签的样式.对于其他浏览器诸如谷歌和火狐就需要特殊处理了,不多说直接上代码: ::-webkit-input-plac ...

  7. centos7 配置 NFS mount挂载服务器

    1. NFS服务端 安装NFS服务 yum install nfs_utils yum install rpcbind (系统默认已经有了,可查看下) 配置共享文件夹 1.    创建文件夹: mkd ...

  8. Angular开发实践(七): 跨平台操作DOM及渲染器Renderer2

    在<Angular开发实践(六):服务端渲染>这篇文章的最后,我们也提到了在服务端渲染中需要牢记的几件事件,其中就包括不要使用window. document. navigator等浏览器 ...

  9. Markdown_00_资源帖

    一.官方资料 1.原始官方文档 daringfireball.net 2.官方文档中文版 Markdown 语法说明 (简体中文版) Markdown: Basics (快速入门) 3.Typora官 ...

  10. LeetCode OJ:Swap Nodes in Pairs(成对交换节点)

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...