几种分布式调用技术的比较 -- 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 ...
随机推荐
- MongoDB开启安全认证
MongoDB开启安全认证 注意 对MongoDB部署启用访问控制会强制执行身份验证,要求用户识别自己.当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作. 启用访问控制后,请 ...
- Dapper 条件语句(Where) 中参数使用
public static List<ECInput> GetECInputList(DateTime beginDate,DateTime endDate,string[] barcod ...
- docker自建仓库Registry
因为生产情况下官方容器还是比较慢的,所以会用到自建docker仓库.docker官方提供完整部署仓库的容器,你只需要提供域名证书,把文件系统挂载到容器,一个用户密码文件就可以使用基本的仓库功能了. 启 ...
- C++实现矩阵压缩
C++实现矩阵压缩 转置运算时一种最简单的矩阵运算.对于一个m*n的矩阵M,他的转置矩阵T是一个n*m的矩阵,且T(i,j) = M(j,i). 一个稀疏矩阵的转置矩阵仍然是稀疏矩阵. 矩阵转置 方案 ...
- Java 完美判断字符串中中文字符【中文符号】
package com.cmc.util; import java.util.regex.Pattern; public class CharUtil { public static void mai ...
- 在windows操作系统中,查询端口占用和清除端口占用的程序
一.在windows操作系统中,查询端口占用和清除端口占用的程序 提升权限后用:netstat -b或用 1.查询端口占用的进程ID 点击"开始"-->"运行&qu ...
- Python写入CSV文件的问题
这篇文章主要是前几天我处理数据时遇到的三个问题: Python写入的csv的问题 Python2与Python3处理写入写入空行不同的处理方式 Python与Python3的编码问题 其实上面第3个问 ...
- 七种常见经典排序算法总结(C++)
最近想复习下C++,很久没怎么用了,毕业时的一些经典排序算法也忘差不多了,所以刚好一起再学习一遍. 除了冒泡.插入.选择这几个复杂度O(n^2)的基本排序算法,希尔.归并.快速.堆排序,多多少少还有些 ...
- Java开发微信公众号模板消息【同步|异步】
第一步:申请模板消息功能并添加模板 在微信公众平台找到你需要的模板,并添加上即可: 第二步:添加功能模块后开始开发 功能中使用的类及代码: 发送数据主实体类: Template.java packag ...
- 031——VUE中表单控件处理之使用vue控制input和textarea表单项
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...