dubbo用的什么协议 为什么要用dubbo

推荐学习消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ) Kafka 笔记 肝了30天,整出这份[分布式宝典:限流 缓存 通讯],秋招跳槽有望 一箭双雕!Alibaba架构师,纯手打Cloud Boot微服务架构笔记
杜博杜博简介?(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原生协议性能优异,是dubbo原生协议的6倍 。
杜博协议:
定义:默认协议,采用单长连接和NIO异步通信,使用线程池并发处理请求,可以减少握手,增加并发效率 。
适用范围:进出参数包较小(建议小于100K),消费者多于提供者,单个消费者无法填满提供者 。尽量不要用dubbo协议传输大文件或者超大字符串 。适用场景:通用远程服务方法调用
Hession协议:定义:用于集成Hessian的服务 。Hessian底层采用Http通信,Servlet公开服务,Dubbo默认嵌入Jetty作为服务器 。适用范围:进出参数包大,提供方数量大于使用方,提供方压力大,可以传输文件 。适用场景:页面传输、文件传输或与本地hessian服务的互操作 。
案例测试:
可以看出,dubbo通信的效率比spring can要高,那么为什么要高呢?
SpringCloud服务之间有两种通信方式 。
RestTemplate 方式Feign 的方式
无论哪种方式,都是通过REST接口调用服务的http接口,参数和结果默认由jackson进行序列化和反序列化 。
也就是说SpringCould是一个Http请求 。
Dubbo被称为RPC分布式框架 。默认情况下,它是基于dubbo的自定义二进制协议传输的 。消息体相对简单,传输的数据要小很多 。
案例测试:
结论:RPC请求的效率是HTTP请求的1.6倍左右,性能明显高于HTTP请求,因为HTTP协议包含了大量的请求头和响应头信息 。
动物园管理员【dubbo用的什么协议 为什么要用dubbo】Zookeeper是如何工作的?(工作原理)
Zookeeper维护着一个类似于标准文件系统的分层数据结构 。这个文件系统中的每个子目录项称为一个znode节点 。这个znode节点还可以有子节点,每个节点都可以存储数据 。客户端还可以在这些node节点上执行getChildren、getdata和exists方法,还可以在znode树路径上设置watch(类似于monitoring) 。当节点在监视路径上创建、删除和更新时,客户端将得到通知 。客户端可以在得到通知后获取数据并执行业务逻辑操作 。Zookeeper的作用主要是维护和监控这些数据在存储的节点节点上的状态变化,通过监控这些数据状态的变化来实现基于数据的集群管理 。
为什么要用zookeeper作为dubbo的注册中心?可以选别的吗?
Zookeeper的数据模型由一系列Znode数据节点组成,类似于文件系统 。Zookeeper的数据全部存储在内存中,性能较高;Zookeeper还支持集群,这使得它具有高可用性;同时,基于zookeeper的特性,它还支持事件监控(当服务的暴露方发生变化时,可以推送),所以zookeeper适合作为dubbo的注册表 。Redis和Simple也可以作为dubbo的注册中心 。
zookeeper在项目中主要做了什么?(功能)
用作注册中心;主要是在服务器上构建zookeeper,其次是在spring管理的dubbo的配置文件中配置(曝光方和消费者都需要配置) 。
作者:java Joker
原文链接:https://blog.csdn.net/java_wxid/article/details/107029848

    推荐阅读