RPC服务和HTTP服务

OSI 网络七层模型

第一层:应用层。定义了用于在网络中进行通信和传输数据的接口(HTTP协议)
第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等
第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断
第四层:传输层。管理着网络中的端到端的数据传输(TCP协议)
第五层:网络层。定义网络设备间如何传输数据
第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输
第七层:物理层。这一层主要就是传输这些二进制数据

实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。我们应该将重点放在应用层和传输层这两个层面。因为 HTTP是应用层协议,而TCP是传输层协议。

RPC服务

1、RPC架构
一个完整的RPC架构里面包含了四个核心的组件,分别是Client 、Server、Client Stub以及Server Stub,这个Stub可以理解为存根。分别说说这几个组件:
【1】客户端(Client),服务的调用方
【2】服务端(Server),服务的提供方
【3】客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方
【4】服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法

2、同步调用与异步调用
同步调用:同步调用就是客户端等待调用执行完成并返回结果
异步调用:客户端不等待调用执行完成返回结果,不过依然可以通过回调函数等接收到返回结果的通知。如果客户端并不关心结果,则可以变成一个单向的调用

3、RPC框架
目前流行的开源RPC框架还是比较多的。下面重点介绍三种:

  • gRPC是Google最近公布的开源软件,基于最新的HTTP2.0协议,并支持常见的众多编程语言。我们知道HTTP2.0是基于二进制的HTTP协议升级版本,目前各大浏览器都在快马加鞭的加以支持。这个RPC框架是基于HTTP协议实现的,底层使用到了Netty框架的支持
  • Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的
  • Dubbo是阿里集团开源的一个极为出名的RPC框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是及其鲜明的特色。同样 的远程接口是基于Java Interface,并且依托于spring框架方便开发。可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致
  • Swoft以组件化方式开发,开发者可以自定义组件并按需加载使用良好 Web MVC 设计,它为 Web 开发框架提供了一个很好的选择PHP 开发者可快速上手,数据库、缓存的使用均高度兼容 Laravel所有组件严格通过单元测试及压力测试

HTTP服务
REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful

RESTful规范把所有内容都视为资源,网络上一切皆资源。REST并没有创造新的技术,组件或服务,只是使用 Web的现有特征和能力。 可以完全通过 HTTP协议实现,使用 HTTP 协议处理数据通信。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应 HTTP协议提供的GET、POST、PUT和 DELETE方法

其实在很久以前,我们对于企业开发的模式一直定性为 HTTP接口开发,也就是我们常说的 RESTful风格的服务接口。的确,对于在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的 Http协议进行传输

接口可能返回一个 JSON字符串或者是 XML文档。然后客户端再去处理这个返回的信息,从而可以比较快速地进行开发。但是对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像 Http一样去3次握手什么的,减少了网络开销;其次就是 RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作

总结

RPC服务和 HTTP服务还是存在很多的不同点的,一般来说,RPC服务主要是针对大型企业的,而 HTTP服务主要是针对小企业的,因为 RPC效率更高,而 HTTP服务开发迭代会更快。要对整个项目进行完整地评估,从而在仔细比较两种开发框架对于整个项目的影响,最后再决定什么才是最适合这个项目的。RESTful 调用及测试都很方便,RPC就显得有点繁琐,但是 RPC的效率是毋庸置疑的,所以建议在多系统之间的内部调用采用RPC,对外提供的服务RESTful 更加合适。IO 密集的服务调用用 RPC,低频服务用 RESTful(效率层面)。用更少的请求字节数来达到通信的目的,它主要用于分布式架构中应用与应用的交互。Restful基于Http应用层协议而 Http协议基于 Tcp协议,它遵守了 Http协议,当然它的请求字节数就大,它面向的是资源,通过对资源的Get/Post等实现前后端的交互

比较项 Restful RPC
通信协议 HTTP 一般TCP
灵活度
效率
调用方式 对外提供服务 服务间的内部调用

参考:
https://baijiahao.baidu.com/s?id=1685504157302223127&wfr=spider&for=pc
https://www.pianshen.com/article/30981829094/

posted @ 2022-03-30 19:46  爱晚亭的那一片枫叶林  阅读(146)  评论(0)    收藏  举报