首页 > 其他分享 >Dubbo(四)_全局架构

Dubbo(四)_全局架构

时间:2023-07-29 23:56:32浏览次数:38  
标签:Dubbo 调用 服务 模块 中心 Registry 注册 架构 全局

整体架构

全局架构分为注册中心,通常为 zk/redis;服务提供者 Provider,用来提供并注册服务到注册中心;服务消费者 Consumer,用来向注册中心订阅服务,当注册中心服务发生变动时 notify 通知消费者,消费者通过 invoke 远程调用服务提供者;Monitor 监控者用来监控服务,统计服务的调用次数和调用时间等信息。

注册中心架构

注册中心主要有两部分作用:(1)作为第三方存储介质,存储支持服务信息和通知服务变更功能,例如 zookeeper/redis 可以作为注册中心;(2)对注册中心的抽象,将注册中心抽象为 Registry组件,这些组件可以被引入到服务端和消费端,这样就将服务注册/服务订阅等操作就可以被执行了。

注册中心模块的核心组件包含如下:

  • Registry:对注册中心的抽象,一个 Registry表示一个注册中心;
  • RegistryFactory:注册中心工厂,用于在初始化时创建 Registry
  • Directory:服务目录,用于刷新和保存可用于远程调用的 Invoker,是一个公共组件;
  • NotifyListener:定义了通知接口,用于接收服务变更的通知。
  • RegistryDirectory:实现了 DirectoryNotifyListener两个接口,既可以接收服务变更的通知,又可以保存远程调用的 Invoker

消费者架构


消费者可以拆分为 RegistryProxyProtocolClusterInvokerClient 几个部分,各部分作用如下:

  • Registry:注册中心中介绍过,主要用于订阅服务、监听服务变化、发现服务。
  • Proxy:服务代理,用于代理依赖的接口,在使用时通过 <dubbo:refrence/> 标签配置依赖接口后会生成一个代理,实际调用接口时调用的是这个代理类;
  • Protocol:服务协议,用来封装 RPC调用,在初始化时会创建用于远程调用的 Invoker,并通过 Client 模块与服务端建立连接;
  • Cluster:服务内部集群,在请求服务时通过内部保存的服务目录 Directory进行目标服务选择,通过 loadBalance 组件进行负载均衡来确定服务提供方地址和端口;
  • Invoker:服务调用者,通过调用 Client模块来和服务提供方通信;
  • Client:客户端模块,实现与服务提供方连接、请求响应等功能。

模块初始化流程

发送请求流程

接收响应流程

服务提供者架构

将服务提供方划分为以下模块:

  • Server:通信模块,与消费者通信等作用;
  • Registry:同注册中心模块讲接,主要起服务注册等作用;
  • Invoker:服务消费者中是 DubboInvoker,封装了远程调用比较复杂;服务提供者中是 AbstractProxyInvoker,内容简单用于调用本地生成的 Proxy
  • Proxy:代理模块服务消费者配置类是 RefrenceConfig,服务提供者的配置类是 ServerConfig;服务消费者的代理类用于封装调用远程方法的细节,提供者代理类用于调用本地实现。

标签:Dubbo,调用,服务,模块,中心,Registry,注册,架构,全局
From: https://www.cnblogs.com/istitches/p/17590834.html

相关文章

  • Dubbo(三)_spi
    DubboSPI源码分析DubboSPI的核心实现是ExtensionLoader,分析时先分析ExtensionLoader的成员变量和对公方法,依次分析扩展点的加载、扩展点的依赖注入、扩展点的自适应、扩展点的激活。分析中的名词约定:扩展点————扩展点实例化的对象,如org.apache.dubbo.rpc.protocol.d......
  • nsq整体架构及各个部件作用详解
    文章目录        前言        nsq的整体架构图        部件:nsqd        部件:nsqlookupd        部件:nsq连接库        部件:nsqadmin 前言我们讲了nsq是什么,有什么用,它的内部组成部件,下载,单点搭建,集群搭建等等这一篇博客,我们开始......
  • 《面试1v1》Kafka的架构设计是什么样子
    面试官:嗨,小明!听说你对Kafka的架构设计很感兴趣,是吗?候选人:是的,我一直对Kafka很好奇。它是如何处理大规模数据流的呢?面试官:哈哈,没错!Kafka是一个强大的分布式流处理平台。它的架构设计非常有趣,我们来一起探索一下吧!候选人:太好了!我迫不及待想了解更多。面试官:那我们先从Kafka的基......
  • 如何拉取指定CPU架构的并且指定ubuntu版本的并且指定cuda和cudnn版本的docker镜像
    本篇讲的重点是如何拉取带有cuda和cudnn的docker镜像,因此这些的镜像源的频道为NVIDIA:官方地址:https://hub.docker.com/r/nvidia/cuda   根据官方资料我们知道NVIDIA的docker的tag分为三类:  base版本、runtime版本、devel版本:base版本只安装了cuda,runtime版本安装......
  • EF 管理数据库架构
    本章会主要了解EF提供的独立迁移项目,用独立迁移项目自动创建dgml设计关系图和sql脚本。迁移项目通常也叫(CodeFirst代码优先),在EF中迁移项目是在,在代码中设计数据库,每次对数据库的设计都将被保留记录。这种模式只会向前修改,不会向后修改。因为一旦数据已经存在,不易删除改变结构,只能......
  • Python全局变量和局部变量
    目录1.python的全局变量和局部变量第一种:global定义全局变量在自定义函数内部第二种:全局定义全局变量,并给其赋值2.python类中public,protected,private定义方式3.python中类的实例化1.python的全局变量和局部变量全局变量定义:在函数外部定义的变量。所有函数内部都可以使用......
  • 如何拉取指定CPU架构的并且指定ubuntu版本的docker镜像
     拉取不同CPU架构下ubuntu22.04镜像:aarch64(armv8)CPU架构:dockerpull--platform=linux/aarch64ubuntu:22.04 x86_64CPU架构:dockerpull--platform=linux/x86_64ubuntu:22.04  ---------------------------------------------------------------------------......
  • KV存储架构学习
    原文: 美团万亿级KV存储架构与实践美团KV存储历程一致性hash->memcached宕机摘除节点,会丢失数据扩容一致性hash也会丢数据。一致性hash->redis主从哨兵可以管理节点宕机扩缩容还是不行。阿里Tair美团基于tair研发出Cellar美团自研Squirrel基于开源redi......
  • Dubbo相关
    RPCDubbo阿里2012开源的。和HSF是同一批人开发的。Dubbo3.0,18年更的。轻量级+高性能的RPC框架。 HTTP方式调用:服务名和路径RPC调用:反射,获取服务特征量,方法寻址逻辑,找到正确的服务方。传输借助序列化和反序列化。Dubbo特性调用远程服务方便,类似Feign,比Feign更简单,不用建......
  • QEMU启动RISC-V架构OpenEuler并配置OSC环境
    基于Ubuntu18.04,QEMU8.0.2,OpenEuler22.09安装QEMU安装基础编译工具sudoaptinstallbuild-essentialautoconfautomakeautotools-devpkg-configbccurl\gawkgitbisonflextexinfogperflibtoolpatchutilsmingw-w64libmpc-dev\......