三、Dubbo 注册中心

news2024/11/24 16:28:57

三、Dubbo 注册中心
3.1 注册中心概述

  • 主要作用
    • 动态加入:服务提供者通过注册中心动态地把自己暴露给其他消费者
    • 动态发现:消费者动态地感知新的配置、路由规则和新的服务提供者
    • 动态调整:注册中心支持参数的动态调整,新参数自动更新到所有相关服务节点
    • 统一配置:避免本地配置导致每个服务的配置不一致问题
  • 工作流程
    • 服务提供者启动时,会向注册中心写入自己的元数据信息,同时会订阅配置元数据信息
    • 消费者启动时,也会向注册中心写入自己的元数据信息,并订阅服务提供者、路由和配置元数据信息
    • 服务治理中心(dubbo-admin)启动时,会同时订阅所有消费者、服务提供者、路由和配置元数据信息
    • 当有服务提供者离开或有新的服务提供者加入时,注册中心服务提供者目录会发生变化,变化信息会动态通知给消费者、服务治理中心
    • 当消费方发起服务调用时,会异步将调用、统计信息等上报给监控中心(dubbo-monitor・simple)
  • 数据结构
    • 不同的注册中心有不同的实现方式。其数据结构也不相同、
  • ZooKeeper 原理概述
    • 树形结构的注册中心,每个节点类型分为持久节点、持久顺序节点、临时节点和临时顺序节点。Dubbo使用ZooKeeper作为注册中心时,只会创建持久节点和临时节点两种
      • 持久节点:服务注册后保证节点不会丢失,注册中心重启也会存在
      • 持久顺序节点:在持久节点特性的基础上增加了节点先后顺序的能力
      • 临时节点:服务注册后连接丢失或session超时,注册的节点会自动被移除
      • 临时顺序节点:在临时节点特性的基础上增加了节点先后顺序的能力
    • 树形结构的关系:
      • 树的根节点是注册中心分组,下面有多个服务接口,分组值来自用户配置dubbo:registry中的 group 属性,默认是/dubbo
      • 服务接口下包含4类子目录,分别是providers、consumers、routers、configurators,这个路径是持久节点
      • 服务提供者目录(/dubbo/service/providers) 包含的接口有多个服务者URL元数据信息
      • 服务消费者目录(/dubbo/service/consumers) 包含的接口有多个消费者URL元数据信息
      • 路由配置目录(/dubbo/service/routers)下面包含多个用于消费者路由策略元数据信息
      • 动态配置目录(/dubbo/service/configurators)下面包含多个用于服务者动态配置URL元数据信息
        3.2 订阅/发布
  • ZooKeeper 的实现
    • 发布的实现
      • 服务提供者和消费者都需要把自己注册到注册中心。服务提供者的注册是为了让消费者感知服务的存在,从而发起远程调用;也让服务治理中心感知有新的服务提供者上线
    • 订阅的实现
      • 订阅通常有pull和push两种方式,一种是客户端定时轮询注册中心拉取配置,另一种是注册中心主动推送数据给客户端。目前Dubbo采用的是第一次启动拉取方式,后续接收事件重新拉取数据
        3.3 缓存机制
  • 消费者或服务治理中心获取注册信息后会做本地缓存。内存中会有一份,保存在Properties对象里,磁盘上也会持久化一份文件,通过file对象引用
  • 缓存的加载
    • 在服务初始化的时候,AbstractRegistry构造函数里会从本地磁盘文件中把持久化的注册数据读到Properties对象里,并加载到内存缓存中
  • 缓存的保存与更新
    • 缓存的保存有同步和异步两种方式。异步会使用线程池异步保存,如果线程在执行过程中出现异常,则会再次调用线程池不断重试
      3.4 重试机制
  • FailbackRegistry 继承了AbstractRegistry,并在此基础上增加了失败重试机制作为抽象能力
  • FailbackRegistry抽象类中定义了一个ScheduledExecutorService,每经过固定间隔(默认为5秒)调用FailbackRegistry#retry()方法
    3.5 设计模式
  • 模板模式
    • 整个注册中心的逻辑部分使用了模板模式

      • 在这里插入图片描述
      • AbstractRegistry实现了 Registry接口中的注册、订阅、查询、通知等方法,还实现了磁盘文件持久化注册信息这一通用方法。但是注册、订阅、查询、通知等方法只是简单地把URL加入对应的集合,没有具体的注册或订阅逻辑
    • FailbackRegistry又继承了 AbstractRegistry,重写了父类的注册、订阅、查询和通知等方法,并且添加了重试机制。此外,还添加了四个未实现的抽象模板方法

  • 工厂模式
    • 所有的注册中心实现,都是通过对应的工厂创建

    • 在这里插入图片描述

    • AbstractRegistryFactory 实现了 RegistryFactory 接口的 getRegistry(URL url)方法,是一个通用实现,主要完成了加锁,以及调用抽象模板方法createRegistry(URL url)创建具体实现等操作,并缓存在内存中

    • 每种注册中心都有自己具体的工厂类,在RegistryFactory接口中判断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/878681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[HDLBits] Exams/m2014 q4d

Implement the following circuit: module top_module (input clk,input in, output out);always(posedge clk) beginout<out^in;end endmodule直接写out^in就行

LangChain手记 Chains

整理并翻译自DeepLearning.AILangChain的官方课程&#xff1a;Chains&#xff08;源代码可见&#xff09; Chains 直译链&#xff0c;表达的意思更像是对话链&#xff0c;对话链的背后是思维链 LLM Chain&#xff08;LLM链&#xff09; 首先介绍了一个最简单的例子&#xff0c…

解决xss转义导致转码的问题

一、xss简介 人们经常将跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;缩写为CSS&#xff0c;但这会与层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;的缩写混淆。因此&#xff0c;有人将跨站脚本攻击缩写为XSS。跨站脚本攻击&#xff…

【量化课程】02_3.投资学基础概念

文章目录 1. 投资和投资学的关系1.1 什么是投资&#xff1f;1.2 什么是投资学&#xff1f; 2. 投资学的主要内容2.1 金融市场与投资环境2.1.1 金融资产2.1.2 债券市场的意义2.1.3 金融市场与经济2.1.4 投资过程2.1.5 竞争性的市场2.1.6 市场参与者2.1.7 主要的市场债券市场外汇…

KCC@广州开源读书会广州开源建设讨论会

亲爱的开源读书会朋友们&#xff0c; 在下个周末我们将举办一场令人激动的线下读书会&#xff0c;探讨两本引人入胜的新书《只是为了好玩》和《开源之迷》。作为一个致力于推广开源精神和技术创新的社区&#xff0c;这次我们还邀请了圈内大咖前来参与&#xff0c;会给大家提供一…

概念解析 | 隐式神经表示:揭开神经网络黑盒的奥秘

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:隐式神经表示(Implicit Neural Representations) 隐式神经表示:揭开神经网络黑盒的奥秘 近年来,神经网络在各种任务上取得了惊人的进步,但其内部表示方式依然难以解读,被称为“…

交互消息式IMessage扩展开发记录

IMessage扩展简介 iOS10新加入的基于iMessage的应用扩展&#xff0c;可以丰富发送消息的内容。&#xff08;分享表情、图片、文字、视频、动态消息&#xff1b;一起完成任务或游戏。&#xff09; 简单的将发送的数据内型分为三种&#xff1a; 1.贴纸Stickers&#xff1b; 2.交…

arcgis pro3.0-3.0.1-3.0.2安装教程大全及安装包下载

一. 产品介绍&#xff1a; ArcGIS Pro 这一功能强大的单桌面 GIS 应用程序是一款功能丰富的软件&#xff0c;采用 ArcGIS Pro 用户社区提供的增强功能和创意进行开发。 ArcGIS Pro 支持 2D、3D 和 4D 模式下的数据可视化、高级分析和权威数据维护。 支持通过 Web GIS 在一系列 …

栈和队列--受限制的线性表

目录 和队列的定义和特点 1.1栈的定义和特点、 1.2队列的定义和特点 1.3栈和队列的应用 2.栈的表示和操作的实现 2.1栈的类型定义 2.2顺序栈的表示和实现 2.2.1初始化 2.2.2入栈 2.2.3出栈 2.2.4取栈顶元素 2.3链栈的表示和实现 2.2.1初始化 2.2.2入栈 2.2.3出栈…

【Servlet】(Servlet API HttpServlet 处理请求 HttpServletRequest 打印请求信息 前端给后端传参)

文章目录 Servlet APIHttpServlet处理请求 HttpServletRequest打印请求信息前端给后端传参 Servlet API Servlet中常用的API HttpServlet 实际开发的时候主要重写 doXXX 方法, 很少会重写 init / destory / service destory 服务器终止的时候会调用. //下面的注解把当前类和…

结构体的定义与赋值

1、结构体定义 首先定义一个学生结构体&#xff0c;如下所示&#xff1a; struct Student {int num;char name[32];char sex;int age; }; 接着在主函数中对学生进行声明&#xff0c;如下所示&#xff1a; #include<iostream> using namespace std;struct Student {in…

Redis——SringBoot集成Redis

创建项目 导入如下依赖 jedis:采用的直连&#xff0c;多个线程操作的话&#xff0c;是不安全的&#xff0c;如果想要避免不安全的&#xff0c;使用 edis pool 连接池!更像 BIO 模式 lettuce: 采用netty&#xff0c;实例可以再多个线程中进行共享&#xff0c;不存在线程不安全…

探索未来:元宇宙与Web3的无限可能

随着科技的奇迹般发展&#xff0c;互联网已经成为了我们生活的不可分割的一部分。然而&#xff0c;尽管它的便利性和普及性带来了巨大的影响&#xff0c;但我们仍然面临着传统互联网体验的诸多限制。 购物需要不断在实体店与电商平台间切换&#xff0c;教育依然受制于时间与地…

C# int和uint类型学习

在C#中&#xff0c;使用int表示整数类型&#xff0c;对应于.NET的System.Int32结构&#xff1b; C#中的int类型占4字节(4*832位)内存空间&#xff0c;其范围从-2,147,483,648 到 2,147,483,647&#xff1b; int类型是默认的整数类型&#xff0c;并且默认值是0&#xff1b; u…

【芯片前端】auto_testbench的大版本升级——加入简单预期与自动比对

前言 前文提要&#xff1a; 【芯片前端】一键生成简易版本定向RTL验证环境的脚本——auto_verification_rtl脚本_尼德兰的喵的博客-CSDN博客 【芯片前端】可能是定向验证的巅峰之作——auto_testbench_autotestbench_尼德兰的喵的博客-CSDN博客 工具路径&#xff1a; auto…

「量化」快乐:UC Berkeley 利用 AI 追踪多巴胺释放量及释放脑区

内容一览&#xff1a;多巴胺是神经系统中重要的神经递质&#xff0c;与运动、记忆和奖赏系统息息相关&#xff0c;它是快乐的信使&#xff0c;当我们看到令人愉悦的东西时&#xff0c;体内就会分泌多巴胺&#xff0c;诱导我们向它追寻。然而&#xff0c;多巴胺的准确定量分析目…

利用logstash/filebeat/插件,将graylog日志传输到kafka中

1.graylog配置输出 在System-outputs&#xff0c;选择GELF Output&#xff0c;填写如下内容&#xff0c;其它选项默认 在要输出的Stream中&#xff0c;选择Manage Outputs 选择GELF Output&#xff0c;右边选择刚才创建好的test。 2.安装logstash&#xff0c;作为中间临时…

idea报错:java: 程序包org.springframework.web.bind.annotation不存在

这个错误通常都是maven仓库的问题&#xff0c;试了网上很多方法&#xff0c;都没有解决&#xff0c;如果大家有遇到这个问题&#xff0c;且试了很多方法之后都没有解决&#xff0c;不妨可以试试我这个方法 先编译一下已经写好的代码&#xff0c;这时候会出现以上报错&#xff…

网络安全 | 揭秘网络安全攻防实战:探索互联网发展史,守护数字世界的安全堡垒

大家好&#xff0c;我是沐尘而生。 互联网发展史&#xff1a;数字世界的壮阔画卷 从早期的ARPANET到今天的万物互联&#xff0c;互联网经历了漫长的发展过程。然而&#xff0c;随着技术的进步&#xff0c;网络安全问题也随之而来。我们不仅要探索互联网的壮阔历程&#xff0c;…

普通索引和唯一索引,应该怎么选择(已经那个changebuffer - 和你这个线程连接池)

普通索引和唯一索引是什么 普通索引和唯一索引都是数据库中常用的索引类型&#xff0c;它们的主要区别在于索引列的值是否允许重复 普通索引允许索引列的值重复&#xff0c;也就是说&#xff0c;如果多个记录在索引列中具有相同的值&#xff0c;那么这些记录仍然可以通过普通…