重庆汽车网站建设/推荐友情链接
dubbo核心组件
层次名 作 用
Service 业务层。包括业务代码的接口与实现,即开发者实现的业务代码
config 配置层。主要围绕ServiceConfig (暴露的服务配置)和ReferenceConfig (引用的服务配置)两个实现类展开,初始化配置信息。可以理解为该层管理了整个Dubbo的配置
proxy 服务代理层。在Dubbo中,无论生产者还是消费者,框架都会生成一个代理类,整个过程对上层是透明的。当调用一个远程接口时,看起来就像是调用了一个本地的接口一样, 代理层会自动做远程调用并返回结果,即让业务层对远程调用完全无感
registry 注册层。负责Dubbo框架的服务注册与发现。当有新的服务加入或旧服务下线时,注册中心都会感知并通知给所有订阅方。整个过程不需要人工参与
cluster 集群容错层。该层主要负责:远程调用失败时的容错策略(如失败重试、快速失败); 选择具体调用节点时的负载均衡策略(如随机、一致性Hash等);特殊调用路径的路由
策略(如某个消费者只会调用某个IP的生产者)
monitor 监控层。这一层主要负责监控统计调用次数和调用时间等
protocol 远程调用层。封装RPC调用具体过程,Protocol是Invoker暴露(发布一个服务让别人
可以调用)和引用(引用一个远程服务到本地)的主功能入口,它负责管理Invoker的
整个生命周期。Invoker是Dubbo的核心模型,框架中所有其他模型都向它靠拢,或者
转换成它,它代表一个可执行体。允许向它发起invoke调用,它可能是执行一个本地的
接口实现,也可能是一个远程的实现,还可能一个集群实现
exchange 信息交换层。建立Request-Response模型,封装请求响应模式,如把同步请求转化为异步请求
transport 网络传输层。把网络传输抽象为统一的接口,如Mina和Netty虽然接口不一样,但是Dubbo在它们上面又封装了统一的接口。用户也可以根据其扩展接口添加更多的网络传
输方式
Serialize 序列化层。如果数据要通过网络进行发送,则需要先做序列化,变成二进制流。序列化层负责管理整个框架网络传输时的序列化/反序列化工作
服务暴露:
注册中心:
动态加入。一个服务提供者通过注册中心可以动态地把自己暴露给其他消费者,无须消费者逐个去更新配置文件。
动态发现。一个消费者可以动态地感知新的配置、路由规则和新的服务提供者,无须重启服务使之生效。
动态调整。注册中心支持参数的动态调整,新参数自动更新到所有相关服务节点。
统一配置。避免了本地配置导致每个服务的配置不一致问题。
注册中心的四种实现:ZooKeeper、 Redis 、 Simple 、Multicast
ZooKeeper是官方推荐的注册中心,在生产环境中有过实际使用,具体的实现在Dubbo 源码的dubbo-registry-zookeeper模块中。
Redis 注册中心并没有经过长时间运行的可靠性验证,其稳定性依赖于Redis本身。
Simple注册中心 是一个简单的基于内存的注册中心实现,它本身就是一个标准的RPC服务,不支持集群,也可 能出现单点故障。
Multicast模式则不需要启动任何注册中心,只要通过广播地址,就可以互相 发现。服务提供者启动时,会广播自己的地址。消费者启动时,会广播订阅请求,服务提供者 收到订阅请求,会根据配置广播或单播给订阅者。不建议在生产环境使用。
zookeeper:
是树形结构的注册中心,每个节点的类型分为持久节点、持久顺序节点、临时节点和临时顺序节点。
持久节点:服务注册后保证节点不会丢失,注册中心重启也会存在。
持久顺序节点:在持久节点特性的基础上增加了节点先后顺序的能力。
临时节点:服务注册后连接丢失或session超时,注册的节点会自动被移除。
临时顺序节点:在临时节点特性的基础上增加了节点先后顺序的能力。
- /dubbo
±- service
±- providers
±- consumers
±- routers
±- configurators
(1)树的根节点是注册中心分组,下面有多个服务接口,分组值来自用户配置
dubbo:registry中的 group 属性,默认是/dubbo。
(2) 服务接口下包含4类子目录,分别是providers、consumers、 routers、 configurators,这个路径是持久节点。
(3) 服务提供者目录(/dubbo/service/providers)下有多个服务者URL元数据信息。
(4) 服务消费者目录(/dubbo/service/consumers)下有多个消费者元数据信息。
(5) 路由配置目录(/dubbo/service/routers)下面包含多个用于消费者路由URL策略元数据信息。
(6) 动态配置目录(/dubbo/service/configurators)下面包含多个用于服务者动态配置URL元数据信息。
配置中心的订阅/发布
订阅通常有pull和push两种方式,一种是客户端定时轮询注册中心拉取配置,另一种是注册中心主动推送数据给客户端。这两种方式各有利弊,Dubbo采用的是第一次启动拉取方
式,后续接收事件重新拉取数据。
在服务暴露时,服务端会订阅configurators用于监听动态配置,在消费端启动时,消费端会订阅providers、routers和configuratops这三个目录,分别对应服务提供者、路由和动
态配置变更通知。
ZooKeeper注册中心采用的是“事件通知” + “客户端拉取”的方式,客户端在第一次连接上注册中心时,会获取对应目录下全量的数据。并在订阅的节点上注册一个watcher,客户端与
注册中心之间保持TCP长连接,后续每个节点有任何数据变化的时候,注册中心会根据watcher的回调主动通知客户端(事件通知),客户端接到通知后,会把对应节点下的全量数据都拉取过
来(客户端拉取),这一点在NotifyListener#notify List urls 接口上就有约束的注释说明。全量拉取有一个局限,当微服务节点较多时会对网络造成很大的压力。
注册中心的缓存:在类AbstractRegistry中实现
private final Properties properties = new Properties();
private File file;//磁盘文件服务缓存对象
private final ConcurrentMap Map>> notified = new ConcurrentHashMap List>>(); //内存中的服务缓存对象
notified是ConcurrentHashMap里面又嵌套了一个Map,外层Map的key是消费者的 URL,内层 Map 的 key 是分类,包含 providers、 consumers、 routes、 configurators
四种。value则是对应的服务列表,对于没有服务提供者提供服务的URL,它会以特殊的empty://前缀开头
在服务初始化的时候,AbstractRegistry构造函数里会从本地磁盘文件中把持久化的注册数据读到Properties对象里,并加载到内存缓存中
Properties保存了所有服务提供者的URL,使用URL#serviceKey()作为key,提供者列表、 路由规则列表、配置规则列表等作为value。由于value是列表,当存在多个的时候使用空格隔
开。还有一个特殊的key.registies,保存所有的注册中心的地址。如果应用在启动过程中,注册中心无法连接或宕机,则Dubbo框架会自动通过本地缓存加载Invokers。
首先在客户端启动时会从注册中心拉取和订阅对应的服务列表,Cluster会把拉取的服务列
表聚合成一个Invoker,每次RPC调用前会通过Directory#list获取providers地址(已经生成
好的Invoker列表),获取这些服务列表给后续路由和负载均衡使用。对应图6.1,在①中主要
是将多个服务提供者做聚合。在框架内部另外一个实现Directory接口是RegistryDirectory
类,它和接口名是一对一的关系(每一个接口都有一个RegistryDirectory实例),主要负责拉取
和订阅服务提供者、动态配置和路由项。
dubbo发起服务调用,在客户端经过负载均衡选择一台机器进行RPC调用。
Dubbo协议详解
一次RPC调用包括协议头和协议体两部分。
16字节长的报文头部主要携带了魔法数(0xdabb),以及当前请求报文是否是Request、Response 心跳和事件的信息,请求时也会携
带当前报文体内序列化协议编号。除此之外,报文头部还携带了请求状态,以及请求唯一标识和报文体长度。
魔法数:来分割处理粘包问题
Dubbo中的编码器(123)主要将Java对象编码成字节流返回给客户端,主要做两部分事情,构造报文头部,然后对消息体进行序列化处理。所有编解码层实现都应该继承自Exchangecodec,
Dubbo协议编码器也不例外。当Dubbo协议编码请求对象时,会调用ExchangeCodec#encode方法。
相关文章:

dubbo:深入理解Apache Dubbo与实战
dubbo核心组件 层次名 作 用 Service 业务层。包括业务代码的接口与实现,即开发者实现的业务代码 config 配置层。主要围绕ServiceConfig (暴露的服务配置)和ReferenceConfig (引用的服务配置)两个实现类展开…...

写着玩的程序:pycharm实现无限弹窗程序(非病毒程序,仅整蛊使用)
运行环境 PyCharm 2023.2.1 python3.11 具体内容 源代码 import tkinter as tk from tkinter import messagebox import threadingclass PopupGenerator:def __init__(self):self.root tk.Tk()self.root.geometry("200x120")self.root.title("无限弹窗&qu…...

计算机网络——运输层(2)暨小程送书
计算机网络——运输层(2)暨小程送书 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 运输层(2)TCP/IP对比TCP(传输控制协议):IP(互联网协议):总结 拥塞…...

FPGA高端项目:Xilinx Zynq7020 系列FPGA纯verilog图像缩放工程解决方案 提供3套工程源码和技术支持
目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Artix7 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产FPGA高云系列上的应…...

【分布式技术专题】「分布式技术架构」 探索Tomcat集群架构原理和开发分析指南
探索Tomcat技术架构设计模式的奥秘 Tomcat集群原理Tomcat集群能带来什么Tomcat集群产生什么问题Tomcat 单服务体系架构Tomcat集群"简单版"首先要解决Session共享的问题典型负载均衡策略分析Session管理-Session Sticky粘滞会话:Session管理-Session 复制S…...

c++类与对象(五):友元、内部类、临时对象、匿名对象
上次重新再次补全了构造函数的内容,以及static成员:C类与对象(四):再谈构造函数(详解初始化列表)、Static成员 今天就来进行类与对象最后一部分的内容 文章目录 1.友元1.1友元函数1.2友元类 2.内…...

细数语音识别中的几个former
随着Transformer在人工智能领域掀起了一轮技术革命,越来越多的领域开始使用基于Transformer的网络结构。目前在语音识别领域中,Tranformer已经取代了传统ASR建模方式。近几年关于ASR的研究工作很多都是基于Transformer的改进,本文将介绍其中应…...

【MySQL进阶】锁
文章目录 锁概述全局锁语法特点 表级锁表锁意向锁 行级锁行锁间隙锁&临键锁 面试了解数据库的锁吗?介绍一下间隙锁InnoDB中行级锁是怎么实现的?数据库在什么情况下会发生死锁?说说数据库死锁的解决办法 锁 概述 锁机制:数据库…...

redis复制和分区:主从复制、哨兵模式和集群模式
概述 在 Redis 中,复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述: 主从复制 (Replication) 基本概念:Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操…...

个人实现的QT拼图游戏(开源),QT拖拽事件详解
文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 
gin渲染篇
1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…...

第三方控价服务商怎么选
用对了方法,事半功倍,品牌控价也是如此,品牌方在治理工作中,如果选择自建团队进行处理,需要包含对数据技术的抓取团队,还要有对治理规则熟悉的操作团队,涉及人员和系统,费用成本相应…...

大模型的学习路线图推荐—多维度深度分析【云驻共创】
🐲本文背景 近年来,随着深度学习技术的迅猛发展,大模型已经成为学术界和工业界的热门话题。大模型具有数亿到数十亿的参数,这使得它们在处理复杂任务时表现得更为出色,但同时也对计算资源和数据量提出了更高的要求。 …...

【学习】focal loss 损失函数
focal loss用于解决正负样本的不均衡情况 通常我们需要预测的正样本要少于负样本,正负样本分布不均衡会带来什么影响?主要是两个方面。 样本不均衡的话,训练是低效不充分的。因为困难的正样本数量较少,大部分时间都在学习没有用…...

几个好玩好用的AI站点
本文作者系360奇舞团前端开发工程师 ai能力在去年一年飞速增长,各种AI产品如雨后春笋般冒出来,在各种垂直领域上似乎都有AI的身影出现,今天就总结几款好玩的场景,看大家工作生活中是否会用到。 先说一个比较重要的消息是ÿ…...

Java算法 leetcode简单刷题记录5
Java算法 leetcode简单刷题记录5 老人的数目: https://leetcode.cn/problems/number-of-senior-citizens/ substring(a,b) 前闭后开 统计能整除数字的位数: https://leetcode.cn/problems/count-the-digits-that-divide-a-number/ 并不复杂,…...

计算机网络自顶向下Wireshark labs1-Intro
Wireshark labs1 实验文档:http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深,具体而言,就是观察两个协议实体之间交换的报文序列&…...

CSS实现图片放大缩小的几种方法
参考 方法一: 常用使用img标签,制定width或者height的任意一个,图片会自动等比例缩小 <div><img src"https://avatar.csdn.net/8/5/D/1_u012941315.jpg"/> </div> <!-- CSS--> <style> img {widt…...

时间序列预测 — CNN-LSTM-Attention实现多变量负荷预测(Tensorflow):多变量滚动
专栏链接:https://blog.csdn.net/qq_41921826/category_12495091.html 专栏内容 所有文章提供源代码、数据集、效果可视化 文章多次上领域内容榜、每日必看榜单、全站综合热榜 时间序列预测存在的问题 现有的大量方法没有真正的预测未…...

angular-tree-component组件中实现特定节点自动展开
核心API 都在 expandToNode这个函数中 HTML treeData的数据结构大概如下 [{"key": "3293040275","id": "law_category/3293040275","name": "嘿嘿嘿嘿","rank": 0,"parentKey": "0&q…...

Linux系统下安装Vcpkg,并使用Vcpkg安装、编译OpenSceneGraph
环境:CentOS7 内存:8g(内存过少编译osg时会出现内存不足导致编译失败的情况,内存设置为4G时失败了,我直接加到了8g,所以就以8g为准了) 安装和配置vcpkg cd ~/ git clone https://www.github.com/microsoft/vcpkg cd …...

设计模式二(工厂模式)
本质:实例化对象不用new,用工厂代替,实现了创建者和调用者分离 满足: 开闭原则:对拓展开放,对修改关闭 依赖倒置原则:要针对接口编程 迪米特原则:最少了解原则,只与自己直…...

Maven应用手册
没加载出来就reimport,这个时候clean和install没用,那是编译安装项目的。 reimport干了什么? 结合idea的maven教程 父子模块 子模块不需要groupId ruoyi中父模块还添加了子模块的依赖,,, 先安装父再是子…...

笨蛋学设计模式行为型模式-状态模式【20】
行为型模式-状态模式 8.7状态模式8.7.1概念8.7.2场景8.7.3优势 / 劣势8.7.4状态模式可分为8.7.5状态模式8.7.6实战8.7.6.1题目描述8.7.6.2输入描述8.7.6.3输出描述8.7.6.4代码 8.7.7总结 8.7状态模式 8.7.1概念 状态模式是指对象在运行时可以根据内部状态的不同而改变它们…...

C++从零开始的打怪升级之路(day18)
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.只出现一次的数字1 136. 只出…...

浅谈安科瑞直流电表在新加坡光伏系统中的应用
摘要:本文介绍了安科瑞直流电表在新加坡光伏系统中的应用。主要用于光伏系统中的电流电压电能的计量,配合分流器对发电量进行计量。 Abstract: This article introduces the application of Acrel DC meters in PV system in Indonesia.The device is …...

C++参悟:数值运算相关
数值运算相关 一、概述二、常用数学函数1. 基础运算1. 浮点值的绝对值( |x| )2. 浮点除法运算的余数3. 除法运算的有符号余数4. 除法运算的有符号余数和最后三个二进制位5. 混合的乘加运算6. 两个浮点值的较大者7. 两个浮点值的较小者8. 两个浮点值的正数…...

【Web前端开发基础】CSS的定位和装饰
CSS的定位和装饰 目录 CSS的定位和装饰一、学习目标二、文章内容2.1 定位2.1.1 定位的基本介绍2.1.2 定位的基本使用2.1.3 静态定位2.1.4 相对定位2.1.5 绝对定位2.1.6 子绝父相2.1.7 固定定位2.1.8元素的层级关系 2.2 装饰2.2.1 垂直对齐方式2.2.2 光标类型2.2.3 边框圆角2.2.…...

[pytorch入门] 3. torchvision中的transforms
torchvision中的transforms 是transforms.py工具箱,含有totensor、resize等工具 用于将特定格式的图片转换为想要的图片的结果,即用于图片变换 用法 在transforms中选择一个类创建对象,使用这个对象选择相应方法进行处理 能够选择的类 列…...

WINCC读写EXCEL-VBS
原创 RENHQ WINCC 关于VBS操作EXCEL的文档不管在论坛上还是在网上,相关的脚本已经很多,但是依然有很多人在问这个问题,于是把我以前在论坛上发的一个集合帖子的脚本拿来,重新开个帖子,如果再有人问的话,可…...