RPC和REST的区别----dubbo和springcloud的根本区别(转)

原文路径:
https://www.cnblogs.com/renjiaqi/p/12081912.html

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

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

因为RPC主要是基于TCP/IP协议(传输层协议),HTTP主要是基于HTTP协议(应用层协议)。

1、什么是REST?

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

HTTP动词与REST风格CRUD对应关系:
在这里插入图片描述

2、什么是RPC

Remote Procedure Call,远程过程调用,就是像调用本地方法一样调用远程方法。RPC架构图:
在这里插入图片描述
RPC框架包含4个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根

客户端(Client),服务的调用方。
服务端(Server),真正的服务提供者。
客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法
RPC框架要做到最基本的3件事情:

1)服务端如何确定客户端要调用的函数;

在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。

2)如何进行序列化和反序列化;

客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化,序列化和反序列化的速度也会影响远程调用的效率。

3)如何进行网络传输

多数RPC框架选择TCP作为传输协议,也有部分选择HTTP。如gRPC使用HTTP2。不同的协议各有利弊。TCP更加高效,而HTTP在实际应用中更加的灵活

3、REST与RPC比较

在这里插入图片描述
4、REST与RPC应用场景

REST和RPC都常用于微服务架构中。

1)HTTP相对更规范,更标准,更通用,无论哪种语言都支持http协议。如果你是对外开放API,例如开放平台,外部的编程语言多种多样,你无法拒绝对每种语言的支持,现在开源中间件,基本最先支持的几个协议都包含RESTful。

2)RPC 框架作为架构微服务化的基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提供方的研发效率,屏蔽跨进程调用函数(服务)的各类复杂细节。让调用方感觉就像调用本地函数一样调用远端函数、让服务提供方感觉就像实现一个本地函数一样来实现服务

5、流行的RPC框架

1)gRPC是Google最近公布的开源软件,基于最新的HTTP2.0协议,并支持常见的众多编程语言。 我们知道HTTP2.0是基于二进制的HTTP协议升级版本,目前各大浏览器都在快马加鞭的加以支持。 这个RPC框架是基于HTTP协议实现的,底层使用到了Netty框架的支持。

2)Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。

3)Dubbo是阿里集团开源的一个极为出名的RPC框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是及其鲜明的特色。同样 的远程接口是基于Java Interface,并且依托于spring框架方便开发。可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Springclouddubbo都是常用的微服务框架,它们各有优缺点。Springcloud具有更完整的生态系统,提供了更多的组件和工具,支持更多的协议和编程语言,适用于大型分布式系统的构建。而dubbo则更加轻量级,性能更好,适用于中小型分布式系统的构建。此外,Springcloud更加注重开发者的体验和易用性,而dubbo则更加注重性能和稳定性。因此,选择哪个框架应该根据具体的需求和场景来决定。 ### 回答2: Spring Cloud和Dubbo是当前比较流行的微服务框架,它们在很多方面有着相似之处,但也存在一些差异。 首先,就优点而言,Spring Cloud提供了众多的组件和库,可以轻松地构建和管理微服务架构。它基于Spring框架,具有较高的灵活性和开发效率,同时还支持各种服务注册和发现机制,如Eureka、Consul等。另外,Spring Cloud还提供了多种负载均衡、断路器、配置管理及分布式追踪等功能,方便开发人员进行服务治理和监控。此外,Spring Cloud与Spring Boot紧密集成,简化了配置和部署操作。 相比之下,Dubbo是一款由阿里巴巴开源的Java RPC框架,具有较高的性能和可靠性。Dubbo支持多种传输和协议,可根据需求选择最佳的通信方式,同时还提供了诸如负载均衡、集群容错、路由等高级特性,能够保证服务的高可用性和可扩展性。此外,Dubbo还支持服务治理和监控,可通过管理控制台进行服务的动态注册和查看。另外,Dubbo支持多种开发语言,适用于跨语言的分布式应用开发。 然而,Spring Cloud在某些方面也有优势。首先,Spring Cloud具有更广泛的社区支持,相关文档和教程较多,开发者可以更容易地找到解决方案。其次,Spring Cloud对于Spring系列已有的成熟技术栈有很好的整合,开发者可以无缝地切换模块。最后,Spring Cloud可以更好地与其他云原生技术结合使用,例如Kubernetes、Docker等。 综上所述,Spring Cloud和Dubbo都是优秀的微服务框架,各自在不同方面有所优势。选择合适的框架需要根据项目需求和团队技术栈来决定。 ### 回答3: Spring Cloud和Dubbo都是目前非常流行的分布式微服务框架,但它们在设计思想、特点和使用方式上有一些区别。 首先,Spring Cloud是基于Spring框架的开源微服务框架,它提供了一整套开发分布式系统的解决方案,包括服务注册与发现、服务调用、负载均衡、断路器、配置管理等。它采用的是HTTP协议作为通信协议,REST风格的接口设计。Spring Cloud具有更加灵活的架构,可以与各种开发语言和技术栈集成,适用于大部分的企业应用场景。 而Dubbo是阿里巴巴开源的高性能微服务框架,它基于RPC(Remote Procedure Call)协议进行通信,适用于Java开发。Dubbo除了提供了服务注册与发现、负载均衡等基本的功能,还支持分布式事务、服务治理、限流、降级等高级特性。Dubbo的性能非常高,适用于大规模、高并发的分布式系统。 对比两者的优点,Spring Cloud具有更高的灵活性和通用性,可以与各种技术栈集成,适用于不同的企业应用场景。它基于Spring框架,具有广泛的社区支持,生态系统更加成熟。而Dubbo在性能方面更加出色,适用于大规模的高并发系统。 缺点方面,Spring Cloud的学习曲线相对较陡峭,因为它的架构相对复杂,需要掌握更多的组件和概念。而Dubbo对于非Java语言的支持较弱,限制了它的适用场景。 综上所述,选择使用哪个微服务框架需要根据实际情况来决定。如果项目需要高性能、大规模并发处理的能力,适合选择Dubbo;如果需要更高的灵活性和通用性,适合选择Spring Cloud。当然,根据实际情况也可以将两者结合使用,根据需求场景灵活选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值