dubbo——dubbo及注册中心原理

程序员超时空 程序员超时空     2022-11-30     792

关键词:

1.Dubbo意义

网站应用的架构变化经历了一个从所有服务分布在一台服务器上(All in one 、单一应用架构)到 垂直应用架构 (MVC模式,按照各模块的职能划分)到分布式应用架构(RPC、按照服务不同分布在不同的服务器上)再到面向服务的架构(SOA,增加调度中心,负责集群的调度和管理)的过程。 Dubbo就是处在SOA架构阶段的一个远程服务调用框架。

2.系统结构

Dubbo系统分为五个部分:远程服务运行容器(Container),远程服务提供方(Provider)、注册中心(Register)、远程服务调用者(Consumer)、监控中心(Monitor)。

Dubbo服务调用过程:

  • 服务提供方(Provider)所在的应用在容器中启动并运行(这个容器可以说是该应用部署的tomcat)
  • 服务提供方(Provider)将自己要发布的服务注册到注册中心(Registry)
  • 服务调用方(Consumer)启动后向注册中心订阅它想要调用的服务
  • 注册中心(registry)存储着Provider注册的远程服务,并将其所管理的服务列表通知给服务调用方(Consumer),且注册中心和提供方和调用方之间均保持长连接,可以获取Provider发布的服务的变化情况,并将最新的服务列表推送给Consumer
  • Consumer根据从注册中心获得的服务列表,根据软负载均衡算法选择一个服务提供者(Provider)进行远程服务调用,如果调用失败则选择另一台进行调用。(Consumer会缓存服务列表,即使注册中心宕机也不妨碍进行远程服务调用)
  • 监控中心(Monitor)对服务的发布和订阅进行监控和统计服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心(Monitor);Monitor可以选择Zookeeper、Redis或者Multiast注册中心等,后序介绍。

3.Dubbo + Zookeeper

Dubbo可以用Zookeeper作为注册中心,存储Provider注册的远程服务信息。

Zookeeper采用树形的目录结构来存储信息。

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地 址
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地 址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地 址。

支持以下功能:

  • 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
  • 当注册中心重启时,能自动恢复注册数据,以及订阅请求
  • 当会话过期时,能自动恢复注册数据,以及订阅请求
  • 当设置<dubbo:registry check=“false” />时,记录失败注册和订阅请求,后台定时重试
  • 可通过设置<dubbo:registry username=“admin” password=“124”/>设置zookeeper 登录信息
  • 可通过<dubbo:registry group=“dubbo” />设置 zookeeper 的根节点,不设置将使用无 根树
  • 支持 * 号通配符 <dubbo:redistry group=“*” version=“*” />,可订阅服务的所有分组 和所有版本的提供者

4.Dubbo + Redis

Redis是一个基于内存的,以Key-Value形式存储数据的高性能Nosql数据库,可以用来存储远程服务信息用作注册中心

使用 Redis 的 Key—Map 结构存储数据结构:

  • 主键 Key 为服务名和服务类型:比如./dubbo/com.foo.BarService/providers或./dubbo/com.foo.BarService/providers,相当于Zookeeper中的第三层目录
  • 值 Map 中的 Key 为 URL 地址 ,Map 中的 Value 为过期时间,用于判断脏数据,脏数据由监控中心删除

使用 Redis 的 Publish/Subscribe 事件通知数据变更:

  • 通过事件的值区分事件类型: register , unregister , subscribe , unsubscribe
  • 普通消费者直接订阅指定服务提供者的 Key,只会收到指定服务的 register , unregister 事件
  • 监控中心通过 psubscribe 功能订阅 /dubbo/* ,会收到所有服务的所有变更事件

调用过程:

  • 服务提供方启动时,向 Key:/dubbo/com.foo.BarService/providers 下,添加当前提供者的地址,并向 Channel:/dubbo/com.foo.BarService/providers 发送 register 事件
  • 服务消费方启动时,从 Channel:/dubbo/com.foo.BarService/providers 订阅 register 和 unregister 事件 ,并向 Key:/dubbo/com.foo.BarService/providers 下,添加当前消费者的地址
  • 服务消费方收到 register 和 unregister 事件后,从 Key:/dubbo/com.foo.BarService/providers 下获取提供者地址列表
  • 服务监控中心启动时,从 Channel:/dubbo/* 订阅 register 和 unregister ,以及subscribe 和 unsubsribe 事件
  • 服务监控中心收到 register 和 unregister 事件后,从 Key:/dubbo/com.foo.BarService/providers 下获取提供者地址列表
  • 服务监控中心收到 subscribe 和 unsubsribe 事件后,从 Key:/dubbo/com.foo.BarService/consumers 下获取消费者地址列表

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(中)(代码片段)

...心架构」带你探索Dubbo3体系下的配置中心和元数据中心、注册中心的原理及开发实战(上),让我们对Dubbo3的三中心架构体系有了一定的认识和了解。Dubbo3的三中心部署架构回顾一下部署架构(注册中心、配置中... 查看详情

dubbo的spi机制与jdk机制的不同及原理分析

...角色。服务提供方(Provider)、服务消费方(Consumer)、注册中心和监控中心。通过注册中心对服务进行注册和订阅,通过监控中心对服务进行监控。核心功能Remoting:远 查看详情

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(上)

Dubb3的应用级服务发现Dubbo3提供了全新的应用级服务发现模型,该模型在设计与实现上区别于Dubbo2的接口级服务发现模型。概括来说,Dubbo3引入的应用级服务发现主要有以下优势适配云原生微服务变革。云原生时代的基础设施能... 查看详情

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(上)

Dubb3的应用级服务发现Dubbo3提供了全新的应用级服务发现模型,该模型在设计与实现上区别于Dubbo2的接口级服务发现模型。概括来说,Dubbo3引入的应用级服务发现主要有以下优势适配云原生微服务变革。云原生时代的基础... 查看详情

说一下dubbo的工作原理?注册中心挂了可以继续通信吗?

...进行说明:1.dubbo的调用流程2.Dubbo整体设计3.从源码上说明注册中心挂了还是可以继续通信的Dubbo调用流程架构图流程说明:1.Provider(提供者)绑定指定端口并启动服务2.提供者连接注册中心,并发本机IP、端口、应用信息和提供服务... 查看详情

dubbo3高级特性「框架与服务」开发内嵌式注册中心及多注册中心的开发实践(代码片段)

开发内嵌式注册中心引入Maven依赖<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId> 查看详情

dubbo中zookeeper注册中心原理分析(代码片段)

vivo互联网服务器团队-LiWanghong本文通过分析Dubbo中ZooKeeper注册中心的实现ZooKeeperResitry的继承体系结构,自顶向下分析了AbstractRegistry(提供了服务数据的本地缓存)、FailbackRegistry(服务注册订阅相关的异常重试ÿ... 查看详情

dubbo服务注册与动态发现机制的原理与实现细节

参考技术A总结一下服务注册与发现机制:基于注册中心的事件通知(订阅与发布),一切支持事件订阅与发布的框架都可以作为Dubbo注册中心的选型。1、服务提供者在暴露服务时,会向注册中心注册自己,具体就是在$serviceinterf... 查看详情

dubbo面试题

...服务暴露中本地暴露,并画图辅助说明?10、一般选择什么注册中心,还有别的选择吗?11、dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?12、项目中有使用过多线程吗?有的话讲讲你在哪里用到了多... 查看详情

深入浅出dubbo3原理及实战「springcloud-alibaba系列」基于nacos作为注册中心进行发布springcloud-alibaba生态的rpc接口实战(代码片段)

SpringCloudAlibabaNacosDiscoverySpringBoot应用程序在服务注册与发现方面提供和Nacos的无缝集成。通过一些简单的注解,您可以快速来注册一个服务,并使用经过双十一考验的Nacos组件来作为大规模分布式系统的服务注册中心。服... 查看详情

dubbo原理和机制是啥?

...实现服务的输出和输入功能,可以和Spring框架无缝集成。注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。监控中心负责统计各服务调用... 查看详情

dubbo--服务注册与发布原理分析(代码片段)

文章目录1、解析配置1.1检查配置1.2多协议多注册中心导出服务1.3组装URL2.导出Dubbo服务2.1Invoker创建过程2.2导出服务到本地2.3导出服务到远程2.3.1服务导出1.doLocalExport2.DubboProtocol的export3.DubboExporter.openServer(url)4.DubboExporter.createServer(U... 查看详情

dubbo简介及优缺点

...提供方。Consumer:调用远程服务的服务消费方。Registry:服务注册与发现的注册中心。Monitor:统计服务的调用次数和调用时间的监控中心。调用流程Dubbo注册中心对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务... 查看详情

dubbo的多注册中心配置

...Zookeeper,因为底层不同服务之间的调用,涉及到了不同的注册中心。由此写一下关于多注册中心的配置。SpringBoot框架:使用yml配置:dubbo:    registry:        protocol:zookeeper   ... 查看详情

dubbo源码学习--优雅停机原理及在springboot中遇到的问题

...果想在关闭应用时,执行一些释放资源的操作一般是通过注册一个ShutDownHook,当关闭应用时,不是调 查看详情

dubbo的底层实现原理和机制

...ovider和cusomer模式!作为SOA:具有服务治理功能,提供服务的注册和发现!用zookeeper实现注册中心!启动时候服务端会把所有接口注册到注册中心,并且订阅configurators,服务消费端订阅provide,configurators,routers,订阅变更时,zk会推送pro... 查看详情

dubbo--系统学习笔记--示例--多注册中心

...,请参见:快速启动,这里只列出各种场景的配置方式多注册中心可以自行扩展注册中心,参见:注册中心扩展(1)多注册中心注册比如:中文站有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就... 查看详情

dubbo整体架构

参考技术A一、dubbo核心调用链路消费者、生产者、注册中心、监控中心二、dubbo详细流程调用图三、dubbo分层架构图Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻... 查看详情