基于Tcp协议与基于Http协议的RPC简介笔记

2018/05/28 14:29
阅读数 212

前言:之前对于RPC方面的学习多限于对RMI原理的学习,直到今天在看陈康贤前辈的《大型分布式网站架构-设计与实践》这本书的时候,才发现原来RPC可以基于TCP协议也可以基于HTTP协议(这里所说的TCP协议与HTTP协议更多的是指服务的消费者与远端的提供方的一种连接或消息传送形式),在此就简单记录一下,作为之后研究其它类似框架的基础。

RPC全称Remote Process Call,即远程过程调用,其在服务的调用方与服务的提供方的调用大致如下图所示(左边为一对一,右边为多对多)。在理解PRC基于这两种协议前,首先要明确RPC的主要目的只是获取由远程机器上的程序所执行的结果。

PRC

在Java中,可以利用Socket API实现基于TCP协议的RPC调用,由服务的调用方与服务的提供方建立Socket连接,并由服务的调用方通过Socket将需要调用的接口名称、方法名称和参数序列化后传递给服务的提供方,服务的提供方反序列化后再利用反射调用相关的方法,最后将结果返回给服务的调用方。整个基于TCP协议的PRC调用大致如此,但是在实例应用中则会进行一系列的封装,譬如RMI便是在TCP协议上传递可序列化的java对象。

基于HTTP协议的RPC调用则更像是我们访问网页一样,只是它的返回结果更加单一简单。其大致流程为:由服务的调用者向服务的提供者发送请求,这种请求的方式可能是GET、POST、PUT、DELETE等中的一种(服务的提供者可能会根据不同的请求方式做出不同的处理,或者某个方法只允许某种请求方式),而调用的具体方法则根据URL进行方法调用,而方法所需参数则可能是对服务调用方传输过去的XML数据或JSON数据解析后的结果,最后返回JOSN或XML的数据结果(这需要根据实际应用定义相关的协议)。由于目前有很多开源的WEB服务器,如Tomcat,JBoss等,所以其实现起来更加容易(就跟做Web项目一样)。

而基于TCP协议实现的RPC调用,由于TCP协议处于协议栈的下层,能够更加灵活地对协议字段进行定制,减少网络开销,提高性能,实现更大的吞吐量和并发数。但是需要更多地关注底层复杂的细节,实现的代价更高。同时对于不同平台(如安卓、IOS等),需要重新开发出不同的工具包来进行请求发送和响应解析,工作量大,难以快速响应和满足 用户需求。

基于HTTP协议实现的RPC则可以使用JSON和XML格式的请求或响应数据,而JSON和XML作为通用的格式标准,开源的解析工具已经相当成熟,在其上进行二次开发会非常便捷和简单。但是由于HTTP协议是上层协议,发送包含同等内容的信息,使用HTTP协议传输所占用的字节数会比使用TCP协议传输所占用的字节数更高。因此,同等网络环境下,通过HTTP协议传输相同内容,效率会比基于TCP协议的数据效率要低,信息传输所占的时间也会更长,当然使用gzip压缩数据,能够缩小这一差距。

注:以上仅为个人笔记,未作详细分析,甚至由于个人知识面的不足,会显得特别粗糙,如有错误或不当的地方,还请指正。另外,本文后两段摘抄至陈康贤前辈的《大型分布式网站架构-设计与实践》,如需了解更多详细内容,请阅读原书。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部