Dubbo
文章目录
什么是dubbo?
dubbo 官网
Apache Dubbo 是一款高性能,轻量级的开源java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册与发现。
那么RPC是什么呢?
就是不同的应用部署到不同的服务器上,应用之间想要调用没有办法直接调用,因为不在一个内存空间,需要通过网络通讯来调用,或者传达调用的数据。而且RPC会将远程调用的细节隐藏起来,让调用远程服务像调用本地服务一样简单。(简单来说,就是远程调用,A电脑上写了一个应用,B电脑可以调用A电脑里的应用)
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发送统计信息,统计信息包含,访问次数,频率等