Dubbo 四大角色
前言
大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 四大角色:在 Dubbo 中所有的编程模型设计都是围绕这四大角色展开,那么理解了这些角色之间的关系也就理解了整个 Dubbo 的架构设计思想。他们分别是注册中心、服务提供者、服务消费者、监控中心。那么这些角色之间的关系以及他们在整个 Dubbo 中作用是什么呢?那就让我们开始吧!
1. 四大角色概述
下图展示了 Dubbo 中四大角色关系图:
从上图我们可以简单的了解到服务提供者、服务消费者、注册中心和监控中心之间的关系,在后面小节中我会详细分析他们之间的调用关系。这里我们从整体上去简单的认识这些角色之间的关系:首先服务消费者与注册中心是通知和订阅关系、服务提供者与注册中心是注册服务关系、服务提供者和服务消费者与监控中心是统计信息同步关系、服务消费者与服务提供者是调用关系。我们举个更形象的例子:
在图中我们把角色和Dubbo中的四大角色一一对应就很容易理解了。其中我们的酒店前台
充当的注册中心角色负责酒店房间状态维护和提供房间查询/登记工作、酒店
的房间充当的就是服务提供者专门提供服务的、客人充当的消费者主要就是查询房间/订购房间和使用、最后我们的执法机构可能要对我们的入住客人和房间做一些检查。
服务提供者:
当我们需要为某个功能对外提供服务时我们可以暴露服务给使用者调用,那么这个服务就是服务提供者。举个例子:我们的 Web 服务对外提供 REST API 服务那么这个 Web 服务就是服务提供者。
服务消费者:
调用远程服务的调用者就是服务消费者。举个例子:我们通过浏览器访问某个 Web 网站那么 Web 网站就是服务提供者而我们的浏览器就服务消费者。
注册中心:
这里的注册中心表示当我们的服务提供者应用启动的时候需要向注册中心注册自己对外暴露服务的元数据信息其中包括:接口名称、版本号、分组、服务提供者所在机器IP和端口等信息,同时我们的服务消费者也同样注册自己的相关元信息。服务消费者从注册中心获取服务提供者元数据就可以调用远程服务。
监控中心:
在服务调用过程中会把相关服务调用时间、调用次数等统计信息异步发送到监控中心。类似于我们的Prometheus 监控中间件。
2. 服务调用关系
Tips: 在一般情况下我们的应用服务的 Bean 容器管理器指的是 Spring 容器。下面说的容器代指 Spring 容器。
结合上面的服务关系图,下面分析下四大角色之间的服务调用关系:
- 应用服务容器负责启动、加载、运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务相关元信息数据。
- 服务消费者在启动时,向注册中心注册/订阅自己所需的服务相关元信息数据。
- 从注册中心获取服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从获取的提供者地址列表中基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用(这里后面讲解负载均衡算法)。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
3. 服务提供者元信息
从上图中可以观察到服务提供者元信息主要包括:
- IP+端口
- 服务端标识
- 方法列表
- Dubbo版本
- 接口名称
- 服务版本
- 是否泛化调用
- 应用名称
- 分组
4. 服务消费者元信息
从上图中可以观察到消费者元信息主要包括:
- IP+端口
- 消费端标识
- 方法列表
- QOS端口
- Dubbo版本
- 接口名称
- 服务版本
- 是否泛化调用
- 应用名称
- 分组
5. 四大角色表示类
服务提供者
实现类
org.apache.dubbo.config.spring.ServiceBean
服务调用者
实现类
org.apache.dubbo.config.spring.ReferenceBean
注册中心:
接口定义
org.apache.dubbo.registry.Registry
实现类:
- Zookeeper实现类
org.apache.dubbo.registry.zookeeper.ZookeeperRegistry
- Nacos实现类
org.apache.dubbo.registry.nacos.NacosRegistry
- Consul实现类
org.apache.dubbo.registry.consul.ConsulRegistry
- Dubbo实现类
org.apache.dubbo.registry.dubbo.DubboRegistry
- Etcd实现类
org.apache.dubbo.registry.etcd.EtcdRegistry
- Multicast实现类
org.apache.dubbo.registry.multicast.MulticastRegistry
- Redis实现类
org.apache.dubbo.registry.redis.RedisRegistry
- Zookeeper实现类
监控中心
- 接口定义
org.apache.dubbo.monitor.Monitor
- 实现类
org.apache.dubbo.monitor.dubbo.DubboMonitor
- 接口定义
6. 获取服务元信息
从上面的关系图中我们可以大致总结如下获取元信息流程
服务提供者首先启动应用程序,同时把暴露服务的相关元信息(接口名称、分组、版本等)注册到注册中心。
然后启动服务消费应用程序,同时拉取注册中心相关注册的元信息并缓存到本地缓存中。
当服务提供者上线或下线服务时消费方会订阅到服务变更通知并更新本地缓存。
Tips: 这里在2.7版本之前是全量通知,大规模集群服务发布会有性能瓶颈。
7. 小结
在本小节中我们主要学习了 Dubbo 中的四大角色,Dubbo 整个编程模型都是围绕者这四大角色展开。我们分别学习了四大角色在 Dubbo 中所扮演的角色和元数据的作用以及他们之间的调用关系什么。同时在 Dubbo 编程模型中对这四大角色的分别使用相应的类进行表示。
本节课程的重点如下:
理解 Dubbo 中四大角色
理解四大角色之间的调用关系
了解 Dubbo 中对四大角色的表示类
服务提供者和服务消费者注册的元数据
作者
个人从事金融行业,就职过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就职于某银行负责统一支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域。同时也热衷于技术分享创立公众号和博客站点对知识体系进行分享。
博客地址:http://youngitman.tech
微信公众号:
知识星球:
Dubbo 四大角色相关推荐
- 产品部门四大角色——PM/PD/UE/UI
按照产品从规划到最终成型的任务流方向,从抽象到具体.商业到技术的过程,涉及产品经理.产品设计师.用户体验师.视觉设计师四个角色. PM:产品经理,俗称老大.一个产品,首先由PM来分析细分市场.目标客户 ...
- PM、PD、UE与UI:互联网公司产品部门的四大角色
这周从产品部门的角度出发,讲一下我心目中的几大主要任务和相应的职责区别,涉及产品经理.产品设计师.用户体验师.视觉设计师四个角色.一般来说,这个顺序就是一个产品从规划到最终成型的任务流方向,是一个从抽 ...
- 30道Dubbo面试题及答案
Q1:服务调用超时问题怎么解决 A: 消费者调用服务超时会引起服务降级的发生,即从发出调用请求到获取到提供者的响应结果 这个时间超出了设定的时限.默认服务调用超时时限为 1 秒.可以在消费者端与提供者 ...
- 想看Dubbo源码?建议先看看这一篇
> **本文首发于公众号[看点代码再上班],建议关注公众号,及时阅读最新文章.** 一定要看的原文地址:https://mp.weixin.qq.com/s?__biz=M-- 大家好,我是t ...
- dubbo内置哪几种服务容器_dubbo启动服务之容器(Container)
讲解dubbo启动服务的时候先来了解下java的spi机制 后期文章会首发于本专栏,欢迎关注 JAVA高级进阶zhuanlan.zhihu.com 一:SPI 简介 SPI 全称为 (Service ...
- 微服务 ZooKeeper ,Dubbo ,Kafka 介绍应用
目录 微服务 微服务的优缺点 微服务技术栈 编辑 常见的微服务框架 ZooKeeper 工作原理 ZooKeeper 集中存放管理 ZooKeeper 功能 动物园管理员 ZooKeeper 服务 ...
- dubbo官方文档_Dubbo(一)
"dubbo概念*dubbo框架结构(角色介绍.执行流程.支持协议.支持的注册中心.组件选型和成熟度)*Dubbo入门案例" 昨天面试某银行,问到dubbo,这块一直没了解的太深, ...
- Dubbo源码分析:小白入门篇
关注公众号"java后端技术全栈" 回复"000"获取优质面试资料 大家好,我是老田 答应了小伙伴的Dubbo源码分析系列,今天终于来了,希望不是很晚. 主要也 ...
- 整个项目流程中测试团队究竟该做哪些事情和承担了一个怎样的角色?
文章目录 前言 项目整个阶段 一些规范说明 前言 当前 IT 公司一般拥有四大角色 产品(业务) 开发(Web,App) 测试(测开,自动化,手工) 运维 大型的 IT 企业拥有着强大 QA 团队和运 ...
最新文章
- 企业网络推广——企业网络推广更注重网站内部链接优化!
- Django中的auth模块
- 区块链BaaS云服务(24)秘猿科技CITA
- 如何选择String
- SqlServer中dateTime、dateTime2、date、datetimeoffset的区别
- 练习答案-分支与循环-超市买苹果练习-猜数字小游戏
- python2.7.10 VS2015编译方法
- CNN已老,GNN来了:重磅论文讲述深度学习的因果推理(附资源)
- 关于《windows游戏编程大师技巧》的源代码
- 【学习】人工智能:一种现代的方法
- CAD增强属性编辑器的使用
- java语言中int占,int数据类型是Java语言中是最常用的整数类型,它在计算机中存储时占多少位bit?A.8B.16C.32D.64...
- 171025_matlab_imag函数
- geany怎么创建文件夹_安装 Geany
- IOS端微信小程序API播放视频无效,应该这样做
- 南柯服务器压力,从纳兰性德《木兰花》中看网络暴力和舆论压力带来的抑郁现象...
- 童瑶担任奥伦纳素“冰白大使”,高端护肤品类加速扩张中国市场
- java全栈系列之JavaSE--数组的三种初始化方法及内存分析024
- LuatOS | 轻松DIY简易天气时钟,训练营资料福利全开放
- Lucid EDI需求分析及项目注意事项