controller
性能
较高
较低
接口依赖
有
无
灵活/开放性
较低
较高
开发成本
较低
较高
RPC主要是基于TCP/IP的,而RESTful服务主要是基于HTTP的 。HTTP是在传输层协议(TCP)之上的,由于RPC普遍采用二进制压缩的序列化参数,数据传输量方面会比REST风格的json(或者XML)小很多 。所以总的来说,从运行效率来看,RPC当然是要更胜一筹 。RESTful的优势主要体现在通用、开放、标准方面 。两者的优缺点详细说明如下,以方便读者在实际应用项目中进行综合分析选择 。
(1)RPC的优点 。
- 对于服务器端的开发人员而言,容易设计、开发 。
- 对于消费者而言,调用非常简单 。
- 便于做集中的监控 。
- 基于socket的二进制RPC协议,建立连接延迟低、网络传输效率高 。
- 支持有状态的长连接,可进行双向通信,实时性好 。
- 在各个企业的使用较为成熟,许多企业都有自己的RPC实践,并已广泛应用在生产环节 。
- 紧耦合:API一旦发布,就难以再做改动 。客户端必须使用特定的框架,而且需要引入API包 。
- 没有统一的设计风格:增加了客户端开发人员的学习成本 。难以实现通用的客户端库,每个RPC框架都有各自的协议 。通常以动词的形式设计API,一个功能就增加一个API,设计时很少考虑领域模型 。
- 掩盖网络的复杂性:开发人员很容易混淆远程调用与本地调用 。实际上网络调用与本地调用是完全不同的,RPC的调用方式,让使用者很难意识到是在进行网络调用,忽略了针对网络复杂性的处理 。这样会损害用户(客户端)可感知的性能 。
- 使用HTTP作为应用层协议(注意:不是传输层),没有耦合性 。
- 可以使用浏览器扩展(如Postman)或者curl之类的命令行来测试RESTful API 。
- 客户端使用任意支持HTTP的工具即可 。使用类似Netflix Feign这样的专门设计的工具,可以做到接近RPC的调用方式 。
- 可以方便地发布到外网环境 。
- HTTP对防火墙友好,可以设置各种安全策略 。
- 基于资源的设计思想,强迫设计人员抽象资源,思考模型,使设计人员加深对业务模型的理解 。
- 不需要中间代理,简化了系统架构 。
传统的观念认为RESTful API不具备RPC的很多特性,不能作为企业级应用广泛使用的API管理方式 。实际上只要能够正确实施,RESTful API也可以具备RPC 框架的许多特性 。
- 误解1:RESTful API 不便于集中管理 。
- 误解2:RESTful API 不便于客户端调用 。
不可否认,传统的HTTP操作库一般只是支持HTTP隧道模式的调用方式,即把HTTP作为传输协议,针对媒体类型转换也没有特殊处理,只返回数据流或者文本数据,对资源的概念也没有特别设计,如Apache Http Components、jQuery等 。
但是目前已经有很多专门针对RESTful API编写的客户端调用工具,如Java的Netflix Feign、Sping RestTemplate 。Feign使用基于注解的形式定义客户端接口,框架会自动生成本地代理类,直接使用类似于本地方法调用的形式调用 。Spring Cloud项目下的Spring Cloud Netflix Feign子项目结合了Spring Boot和Netflix Feign做了封装,更便于使用 。
再者在前端领域,现在成熟的前端框架都提供了Resource插件,专门用于RESTful 接口的操作,如Vue下的vue-resource,AngularJS的ng-resource等,针对RESTful API的调用以及资源导航都做了很优秀的设计 。
相关书籍企业级云原生架构 技术、服务与实践
文章插图
1.基于作者在阿里公司多年的大型项目架构设计实践经验,介绍云原生相关技术及产品
推荐阅读
- SCRM的私域运营管理之路
- 用什么算法可以快速检索数据?Bitmap了解一下
- 计算机病毒传染的一般过程是怎样的
- 计算机网络的 89 个核心概念
- 为什么诸葛亮娶个丑媳妇儿?诸葛亮的妻子是四大丑女之一吗
- 三国李严儿子为什么帮诸葛亮?李严和诸葛亮有矛盾吗
- 计算机中为什么要用补码运算?
- 脸上长痘痘喝什么茶排毒,脸上长痘痘喝什么茶比较好
- 为什么喝菊花茶性功能下降,喝什么菊花茶好
- 能让IT程序员告别996的低代码,究竟是风口还是革命?