几种分布式调用技术的比较 -- 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的传输协议,性能较高,适合高并发的场景











  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
低延迟系统、RPC、IPC、RESTWebSocket(简称为WS)是在计算机科学和网络通信中常见的概念和技术。下面是对每个概念的简要说明: 1. 低延迟系统(Low-Latency System):指的是能够在非常短的时间内响应用户请求或完成某个操作的系统。在实时应用、金融交易、游戏等领域,低延迟非常重要,因为它能提供更好的用户体验。 2. RPC(Remote Procedure Call):是一种通信机制,用于在分布式系统中不同节点之间进行远程调用。它允许一个节点调用另一个节点上的过程或函数,就像本地调用一样,隐藏了网络通信的细节。 3. IPC(Inter-Process Communication):是指在同一台计算机上运行的不同进程之间进行通信的机制。它允许这些进程交换数据和信息,以便彼此之间进行协作和共享资源。 4. REST(Representational State Transfer):是一种基于HTTP协议的软件架构风格,用于构建网络服务和API。REST使用标准的HTTP方法(如GET、POST、PUT、DELETE)来对资源进行操作,并使用统一资源标识符(URI)来标识和定位资源。 5. WebSocket(WS):是一种在Web应用程序中实现双向通信的协议。与传统的HTTP请求-响应模式不同,WebSocket允许服务器主动向客户端推送消息,实现实时数据传输。它提供了更低的延迟和更高的效率,适用于需要实时更新和即时通信的应用程序。 这些概念和技术在不同的应用场景中发挥重要作用,通过它们可以实现高效的通信、数据交换和系统响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值