我之前在传统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. 设计模式--适配器模式C++实现

    适配器模式C++实现 1定义Adapter 将一个类的接口变成客户端所需要的另外一种借口,从而使远不因为接口不匹配而无法合作的两个雷能够一起工作 又叫变压器模式,包装模式Wrapper 2类图 角色分 ...

  2. 51NOD-1960-数学/贪心

    1960 范德蒙矩阵  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 LYK最近在研究范德蒙矩阵与矩阵乘法,一个范德蒙矩阵的形式如下: 它想通过构 ...

  3. laravel中新建文件并保存数据到文件中

    //base_path()获取当前的绝对路径 $path=base_path().'\config\web.php'; $str='abcdefg'; //要声明的字符串 file_put_conte ...

  4. ASP.NET MVC 路由系统类

    RouteData public class RouteData { private RouteValueDictionary _dataTokens; private IRouteHandler _ ...

  5. 缓存LruCache简单创建和使用

    LruCache一般使用: /** * 总容量为当前进程的1/8,单位:KB * sizeOf():计算缓存对象的大小,单位要一致 * entryRemoved():移除旧缓存时调用 */ int m ...

  6. 词频统计 ——Java

    github地址 :https://github.com/NSDie/personal-project 一.计划表 PSP2.1 Personal Software Process Stages 预估 ...

  7. APUE学习笔记——11 线程同步、互斥锁、自旋锁、条件变量

    线程同步     同属于一个进程的不同线程是共享内存的,因而在执行过程中需要考虑数据的一致性.     假设:进程有一变量i=0,线程A执行i++,线程B执行i++,那么最终i的取值是多少呢?似乎一定 ...

  8. 剑指offer--50.滑动窗口的最大值

    时间限制:1秒 空间限制:32768K 热度指数:157641 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的 ...

  9. openoffice在连接时有错误,无法连接上

    openoffice在连接时有错误,无法连接上 报如下错误: java.net.ConnectException: connection failed: socket,host=localhost,p ...

  10. mybatis环境搭建和开发步骤

    环境搭建 第一步:导入jar包 第二步:导入核心配置文件(mybatis-config.xml) <?xml version="1.0" encoding="UTF ...