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
监控中心
接口定义
org.apache.dubbo.monitor.Monitor
实现类
org.apache.dubbo.monitor.dubbo.DubboMonitor
6. 获取服务元信息
从上面的关系图中我们可以大致总结如下获取元信息流程
服务提供者首先启动应用程序,同时把暴露服务的相关元信息(接口名称、分组、版本等)注册到注册中心。
然后启动服务消费应用程序,同时拉取注册中心相关注册的元信息并缓存到本地缓存中。
当服务提供者上线或下线服务时消费方会订阅到服务变更通知并更新本地缓存。
**Tips:**这里在 2.7 版本之前是全量通知,大规模集群服务发布会有性能瓶颈。
7. 小结
在本小节中我们主要学习了 Dubbo 中的四大角色,Dubbo 整个编程模型都是围绕者这四大角色展开。我们分别学习了四大角色在 Dubbo 中所扮演的角色和元数据的作用以及他们之间的调用关系什么。同时在 Dubbo 编程模型中对这四大角色的分别使用相应的类进行表示。
本节课程的重点如下:
理解 Dubbo 中四大角色
理解四大角色之间的调用关系
了解 Dubbo 中对四大角色的表示类
服务提供者和服务消费者注册的元数据
作者
个人从事金融行业,就职过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就职于某银行负责统一支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域。同时也热衷于技术分享创立公众号和博客站点对知识体系进行分享。关注公众号:青年 IT 男 获取最新技术文章推送!
博客地址: http://youngitman.tech
微信公众号:
知识星球:
版权声明: 本文为 InfoQ 作者【青年IT男】的原创文章。
原文链接:【http://xie.infoq.cn/article/cb2786f02f541945e3cda3bbe】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论