dubbo深入学习
RPC简介
- 影响性能的主要俩点: 通信和序列化反序列化,远程方法调用。
DUBBO概念
- 面向接口代理的高性能的RPC调用:像调用本地方法一样调用远程服务
- 智能负载均衡:实现流量均衡
- 服务注册与发现:一般配合zk,比如dubbo怎么知道所调用的服务在哪台服务器上,所有的服务都注册到zk上dubbo会询问zk我要调用的这个服务在哪个节点上然后zk返回在哪几个服务器,然后dubbo进行调用目标服务
- 高度可扩展能力:dubbo是基于微内核和插件的设计原则
- 运行期间流量调度:给指定ip给予少量流量可实现灰度发布
- 可视化的服务治理与维护:运维工具,查询服务元数据,服务健康状态,实时下发路由策略等
设计架构
- Provider:服务提供者相当于我们的后端服务,相当于被调用方
- Consumer:服务消费者相当于我们的调用方
- Container:dubbo框架容器
- Monitor:监控中心
- 详解:容器启动服务提供者会将自己提供的信息注册到注册中心里,消费者启动就会从注册中心订阅所需要的服务,某一个服务提供者下线了 注册中心和消费者通过长连接的方式告知消费者,消费者根据负载均衡算法调用此时已知在线的提供者,服务之间的调用信息比如时间调用地址会定期向Monitor提交
环境搭建
zookeeper注册中心搭建
然后运行bin目录下的zkServer.cmd 启动成功后运行zkCli.cmd
至此zk已经准备完毕!
管理控制台环境搭建Monitor
-
下载 dubbo-admin 项目然后解压,可以用idea打开也可以不用打开,因为后续会全局替换所以我用idea打开,可能加载外部依赖有点慢没事可以做别的事等等它!!!!
-
进入dubbo-admin-ui目录,当前目录下打开cmd,如果是在C盘用管理员打开cmd,然后输入:npm install 和npm run dev
-
然后最重要的一步切记,如果本地8080端口被占用,则需要修改dubbo-admin-server下resources的application.properties打开添加server.port=8081
-
如果改了端口还需要在idea中全局更改前端ui调用的端口因为默认实8080所以我们在idea中全局替换,然后重新执行第一步
-
进入dubbo-admin-server目录,当前目录打开cmd,输入以下命令:mvn install -Dmaven.test.skip=true
-
进入dubbo-admin-server/target目录将刚刚打包后的jar包运行
-
然后访问 http://localhost:8082/ 输入root root
-
-
最终成功示例
**
至此我们简单的注册中心和监控中心就搭建起来了,后续的提供者和消费者可以自己搞下接下来我们搞点荤的!!!
**
dubbo调用原理
- 服务提供者启动然后需要将接口和ip+port注册到注册中心,然后在本地注册也就是将服务名称(方法名)对应的实现类类名保存内存中,然后暴漏启动服务启动tomcat或者nettyserver
- 服务消费者启动拉取注册中心的服务提供者信息缓存到本地,然后通过watch实时监听提供者信息动态变化,获取代理对象调用提供者方法 通过服务名称也就是方法名获取到ip+port然后传入方法名参数类型参数值发送到提供者
- 提供者通过传入过来的方法名从本地注册中心(内存)找到实现的类名然后通过反射调用其中的方法返回给消费者
- 监控中心会定期收到提供者和消费者传过来的调用信息
dubbo源码spi机制
- 主要是通过配置文件拿到对应的文件获取相应实现类来达到扩展机制