理论:第十二章:Dubbo的运行原理,支持什么协议,与SpringCloud相比它为什么效率要高一些,Zookeeper底层原理

Dubbo

简单的介绍一下Dubbo?(Dubbo是什么)

dubbo就是个服务调用的东东。

为什么怎么说呢?

因为Dubbo是由阿里开源的一个RPC分布式框架

那么RPC是什么呢?

就是不同的应用部署到不同的服务器上,应用之间想要调用没有办法直接调用,因为不在一个内存空间,需要通过网络通讯来调用,或者传达调用的数据。而且RPC会将远程调用的细节隐藏起来,让调用远程服务像调用本地服务一样简单。

dubbo有哪些组件?

紫色虚线:在Dubbo启动时完成的功能  蓝青色的线:都是程序运行过程中执行的功能,虚线是异步操作,实线是同步操作

  Provider:提供者,服务发布方。如果是采用SOA开发的模式,这个就是和数据库交互的接口,也就是service主要放在生产者这边

  Consumer:消费者,调用服务方。面向前端的Controller主要是在这边,可以远程调用生产者中的方法,生产者发生变化时也会实时更新消费者的调用列表。具体的看下面介绍

  Container:主要负责启动、加载、运行服务提供者。Dubbo容器,依赖于Spring容器。这里比较注意的就是Dubbo是依赖与Spring容器的。所以必须要和Spring配合着使用

  Registry:注册中心.当Container启动时把所有可以提供的服务列表上Registry中进行注册。作用:告诉Consumer提供了什么服务和服务方在哪里.

  Monitor:监控中心:监控中心负责统计各服务调用次数、调用时间

运行原理?

0.Start: 启动容器,相当于在启动Dubbo的Provider,并且会创建对应的目录结构,例如代码中的共用接口名为com.learnDubbo.demo.DemoService,就会创建 /dubbo/com.learnDubbo.demo.DemoService目录,然后在创建providers目录,再在providers目录下写入自己的 URL 地址。

1.Register:启动后会去注册中心进行注册,注册所有可以提供的服务列表。即订阅/dubbo/com.learnDubbo.demo.DemoService 目录下的所有提供者和消费者 URL 地址。

2.Subscribe:Consumer在启动时,不仅仅会注册自身到 …/consumers/目录下,同时还会订阅…/providers目录,实时获取其上Provider的URL字符串信息。当服务消费者启动时:会在/dubbo/com.learnDubbo.demo.DemoService目录创建/consumers目录,并在/consumers目录写入自己的 URL 地址。

3.notify:当Provider有修改后,注册中心会把消息推送给Consummer。也就是注册中心会对Provider进行观察,这里就是使用设计模式中的观察者模式。以Zookeeper注册中心为例,Dubbo中有ZookeeperRegistry中的doSubscribe方法也就是进行生产者订阅和监听。

4、invoke:根据获取到的Provider地址,真实调用Provider中功能。这里就是唯一一个同步的方法,因为消费者要得到生产者传来的数据才能进行下一步操作,但是Dubbo是一个RPC框架,RPC的核心就在于只能知道接口不能知道内部具体实现。所以在Consumer方使用了代理设计模式,创建一个Provider方类的一个代理对象,通过代理对象获取Provider中真实功能,起到保护Provider真实功能的作用。

5、Monitor:Consumer和Provider每隔1分钟向Monitor发送统计信息,统计信息包含,访问次数,频率等

Dubbo与SpringCould相比它为什么效率要高一些

首先看一下Dubbo支持什么协议?dubbo各种协议的性能对比:

thrift协议

thrift原生协议性能表现卓越,是dubbo原生性能的6倍

dubbo协议:

定义:缺省协议、采用了单一长连接和NIO异步通讯、使用线程池并发处理请求,能减少握手和加大并发效率

适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
适用场景:常规远程服务方法调用

hession协议:
定义:用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现
适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。
适用场景:页面传输,文件传输,或与原生hessian服务互操作。

各种协议的取舍:https://www.cnblogs.com/barrywxx/p/8589374.html

案例测试

可以看出dubbo通信的效率上高与SpringCould,那为什么会高于呢?

SpringCloud 服务间的通信方式有两种

  • RestTemplate 方式

  • Feign 的方式

不管是什么方式,它都是通过REST接口调用服务的http接口,参数和结果默认都是通过jackson序列化和反序列化。

也就是说SpringCould是Http请求。

dubbo我们都知道是RPC分布式框架,默认是基于dubbo自定义的二进制协议进行传输,消息体比较简单,传输数据要小很多。

案例测试:

结论:RPC请求的效率是HTTP请求的1.6倍左右,性能明显比HTTP请求要高很多,因为HTTP协议包含大量的请求头、响应头信息。

Zookeeper:

Zookeeper的实现原理?(工作原理)

Zookeeper会维护一个类似于标准的文件系统的具有层次关系的数据结构。这个文件系统中每个子目录项都被称为znode节点,这个znode节点也可以有子节点,每个节点都可以存储数据,客户端也可以对这些node节点进行getChildren,getData,exists方法,同时也可以在znode tree路径上设置watch(类似于监听),当watch路径上发生节点create、delete、update的时候,会通知到client。client可以得到通知后,再获取数据,执行业务逻辑操作。Zookeeper 的作用主要是用来维护和监控存储的node节点上这些数据的状态变化,通过监控这些数据状态的变化,从而达到基于数据的集群管理。

为什么要用zookeeper作为dubbo的注册中心?能选择其他的吗?

Zookeeper的数据模型是由一系列的Znode数据节点组成,和文件系统类似。zookeeper的数据全部存储在内存中,性能高;zookeeper也支持集群,实现了高可用;同时基于zookeeper的特性,也支持事件监听(服务的暴露方发生变化,可以进行推送),所以zookeeper适合作为dubbo的注册中心区使用。redis、Simple也可以作为dubbo的注册中心来使用。

项目中主要用zookeeper做了什么?(作用)

作为注册中心用;主要是在服务器上搭建zookeeper,其次在spring管理的dubbo的配置文件中配置(暴露方和消费方都需要配置)
 

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
### 回答1: SpringCloud的核心思想是基于微服务的架构,它提供了一种分布式系统架构,能够快速、低成本地构建、部署和管理分布式系统。而Dubbo是一个性能的分布式服务框架,它实现了服务的自动注册和发现、接口定义、容错处理、以及负载均衡等机制。总的来说,SpringCloud提供了更加完整的微服务架构,而Dubbo则更专注于远程服务调用的开发和性能优化。 ### 回答2: Spring Cloud和Dubbo都是常用的微服务框架,但在某些方面有一些区别。 首先,Spring Cloud是由Spring团队开发的,而Dubbo是由阿里巴巴开发的。这意味着Spring Cloud更加贴合Spring生态系统,可以更好地与Spring Boot、Spring MVC等其他Spring项目进行集成。 其次,Spring Cloud更加注重提供开箱即用的解决方案。它提供了大量的功能模块,如服务注册与发现、负载均衡、断路器、配置管理等,可以帮助开发人员轻松实现常见的微服务架构中的各种需求。 而Dubbo则更加注重性能和可靠性。它采用了更效的通信协议支持长连接和异步调用等特性,可以在微服务架构中实现更的性能和可靠性。 此外,Spring Cloud更加开放和灵活,可以与各种不同的技术栈进行集成。例如,可以与Netflix的Eureka、Consul等服务注册与发现组件、Netflix的Hystrix、Resilience4j等断路器组件、ZooKeeper、Config Server等配置管理组件进行集成。 而Dubbo则更加偏向于一体化解决方案,集成了服务注册与发现、负载均衡、服务调用、容错等功能在一个框架中,减少了集成其他组件的复杂度。 综上所述,Spring Cloud和Dubbo在设计哲学、功能重点以及集成方式上有一些区别。开发人员可以根据自己的业务需求和技术栈选择适合自己的微服务框架。 ### 回答3: Spring Cloud和Dubbo是两种微服务框架,它们之间有以下几个区别: 1. 架构和设计理念: - Spring Cloud是基于Spring Framework构建的,使用Java语言开发,主要关注于构建分布式系统的组件和工具集合。 - Dubbo是由阿里巴巴开发的分布式服务框架,使用Java语言开发,主要关注于服务的治理和性能。 2. 服务注册和发现: - Spring Cloud使用Eureka或Consul等服务注册中心,通过服务注册和发现来管理各个微服务实例。 - Dubbo使用Zookeeper作为服务注册中心,通过Dubbo提供的注册中心来进行服务注册和发现。 3. 服务通信协议: - Spring Cloud支持多种通信协议,如HTTP、RESTful和消息队列等。 - Dubbo默认使用RPC通信协议,可以通过配置使用其他通信协议,如HTTP和Hessian等。 4. 服务调用方式: - Spring Cloud支持多种服务调用方式,如同步调用、异步调用和服务网关等。 - Dubbo支持同步调用和异步调用,还提供了性能的远程调用能力。 5. 社区生态: - Spring Cloud拥有庞大的开发者社区和成熟的生态系统,有大量的插件和工具可供选择。 - Dubbo在国内拥有广泛的应用和活跃的开发社区。 综上所述,Spring Cloud和Dubbo在架构设计、服务注册和发现、服务通信协议、服务调用方式以及社区生态等方面存在一些区别,开发者可以根据自身需求选择合适的微服务框架。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序员廖志伟

赏我包辣条呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值