Dubbo接口级服务发现-数据结构

news2024/10/5 17:26:56

目录

Dubbo服务治理易用性的原理:

URL地址数据划分:

Dubbo接口级服务发现---易用性的代价

Proposal,适应云原生、更大规模集群的服务发现类型。

Dubbo3应用级服务发现---基本原理

Dubbo负载均衡机制

常规负载均衡算法

负载均衡策略:

Weighted Random

RoundRobin

LeastActive

ShortestResponse

配置方式:

自适应负载均衡与服务柔性

整体介绍:

P2C算法原理介绍:


Dubbo服务治理易用性的原理:

  1. 地址发现聚合Key==RPC粒度服务
  2. 注册中心同步的地址包含地址、元数据与配置
  3. 得益于1与2,Dubbo可以支持应用、RPC、方法粒度的服务治理
URL地址数据划分:
  1. 首先是实例可访问地址,主要信息包含ip port,是消费端将基于这条数据生成tcp网络连接,作为后续RPC数据的传输载体
  2. 其次是RPC元数据,元数据用于定义和描述一次RPC请求,一方面表明这条地址数据是与某条具体的RPC服务有关的,它的版本号,分组以及方法相关信息,另一方面表明。
  3. 下一部分是RPC配置数据,部分配置用于控制RPC调用的行为,还有一部分配置用于同步Provider进程实例的状态,典型的如超时时间,数据编码的序列化方式等。
  4. 最后一部分是自定义的元数据,这部分内容区别于以上框架预定义的各项配置,给了用户更大的灵活性,用户可任意扩展并添加自定义元数据,以进一步丰富实例状态。

以上就是Dubbo2在易用性、服务治理功能性、可扩展性上强于很多服务框架的真正原因。

Dubbo接口级服务发现---易用性的代价

一个事物总是有其两面性,Dubbo2地址模型带来易用性和强大功能的同时,也给整个架构的水平可扩展性带来了一些限制。这个问题在普通规模的微服务集群下是完全感知不到的,而随着集群规模的增长,当整个集群内应用、机器达到一定数量时,整个集群内的各个组件才开始遇到规模瓶颈。在总结 包括阿里巴巴、工商银行等多个大厂用户在生产环境特点后,我们总结出以下两点突出问题。

  1. 首先,注册中心集群容量达到上限阈值。由于所有的URL地址数据都被发送到注册中心,注册中心的存储容量达到上限,推送效率也随着下降。
  2. 而在消费端这一侧,Dubbo2框架常驻内存已超40%,每次地址推送带来的CPU等资源消耗率也非常高 ,影响正常的业务调用。
  3. 青色部分,假设这里有一个普通的Dubbo Provider应用,该应用内部定义有10个RPC Service,应用被部署在100个机器实例上,这个应用在集群中产生的数据量将会是“Service数*机器实例数”,也就是10*100=1000条,数据被从两个维度放大了。
    1. 从地址角度:100条唯一的实例地址,被放大了10倍
    2. 从服务角度:10条唯一的服务元数据,被放大100倍

Proposal,适应云原生、更大规模集群的服务发现类型。

问题点:

  1. 如何重新组织数据(地址、RPC元数据、RPC配置),避免冗余数据的出现
  2. 如何在保留易用性的同时,在地址发现层面(注册中心数据格式)与其他微服务体系打通

Dubbo3应用级服务发现---基本原理

Dubbo3的应用级服务发现方案设计本质上就是围绕以上两个问题展开。其基本思路是:地址发现链路上的聚合元素也就是我们之前提到的key由服务调整为应用,这也是其名称叫做应用级服务发现的由来;另外,通过注册中心同步的数据内容上做了大幅精简,只保留最核心的IP、port地址数据。

升级后的变化:

首先:在Provider实例这一侧,相比于之前每个RPC Service注册一条地址数据,一个Provider实例只会注册一条地址到注册中心。

其次,在注册中心这一侧,地址以应用名为粒度做聚合,应用名节点下是精简过后的Provider实例地址。

Dubbo3引入了一个内置MetadataService元数据服务,由中心化推送为Customer到Provider的点对点拉取,在这个模式下,元数据传输的数据量将不在一个问题,因此可以在元数据中扩展出更多的参数,暴露出更多的治理数据。

消费端Cusumer的地址订阅行为,消费端从分两步读取地址数据,首先是从注册中心收到精简后的地址,随后通过调用MetadataService元数据服务,读取对端的元数据信息、在收到这两部分数据之后,消费端会完成地址数据的聚合,最终在运行态还原出类似Dubbo2的URL地址格式,因此从最终结果而言,应用级地址模型同时兼顾了地址传输层面的性能与运行层面的功能性。

Dubbo负载均衡机制

常规负载均衡算法

在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为weighted random基于权重的随机负载均衡策略。

具体实现上,Dubbo提供的是客户端负载均衡,即由Consumer通过负载均衡算法得出需要将请求提交到那个Provider实例。

负载均衡策略:

目前Dubbo内置如下负载均衡算法,可通过调整配置项进行启用

Weighted Random

加权机制,按权重设置随机概率。

在一个截面上碰撞概率高,但是调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

缺点:存在慢的提供者累计请求的问题,比如:第二台机器很慢,但是没有宕机,当前请求调用到第二台时就卡了。时间长了之后,所有的请求都卡在第二台机器上面了。

RoundRobin

加权轮询,按公约后的权重设置轮询比例,循环调用节点。

缺点:同样存在慢的提供者累计请求的问题

加权轮询过程中,如果某节点权重过大,会存在某段时间内调用过于集中的问题。

LeastActive

加权最少活跃调用优先,活跃数越低,越优先调用,相同活跃数的进行加权随机处理。活跃数指调用前后技术差(针对特定提供者,请求发送数-响应返回数),表示特定提供者的任务堆积量,活跃数越低,代表提供者处理能力越强。

慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大,相对的,处理能力越强的节点,处理更多的请求。

ShortestResponse

加权最短响应优先,在最近一个滑动窗口中,响应时间越短,越优先调用,相同响应时间的进行加权随机。

使得响应时间越快的提供者,处理更多的请求

缺点:可能会造成流量过于集中于高性能节点的问题

这里的响应时间=某个提供者在窗口时间内的平均响应时间,窗口时间默认是30s

ConsistentHash

一致性Hash,相同参数的请求总是发到同一提供者

当某一台提供者宕机时,原本提供者的请求,基于虚拟节点,平摊到其他提供者,不会引起剧烈变动。

缺省只对第一个参数Hash,如果要修改,需要配置:<dubbo:parameter

key="hash.arguments" value="0,1" />

缺省用160份虚拟节点,如果要修改,请配置置 <dubbo:parameter

key="hash.nodes" value="320" />

配置方式:

Dubbo支持在服务提供者一侧配置默认的负载均衡,这样所有消费者都默认使用提供者指定的负载均衡策略,消费者可以自己配置要使用的负载均衡策略,如果没有任何配置,则默认使用随机负载均衡策略。

同一个应用内支持配置不同的服务使用不同的负载均衡策略,支持同一服务的不同方法配置不同的负载均衡策略。

自适应负载均衡与服务柔性
整体介绍:

所谓的“柔性服务”主要是指consumer端的负载均衡和provider端的限流两个功能,在这之前dubbo版本中,负载均衡部分更多的考虑是公平性原则,即consumer端尽可能平等的从provider中做出选择,在某些情况下表现并不够理想。而限流部分只提供了静态的限流方案,需要用户对provider端设置静态的最大并发值,然而该值的合理选取对用户来讲并不容易。

P2C算法原理介绍:
  1. 对于每次调用,从可用的Provider列表中做两次随机选择,选出两个节点providerA和providerB.
  2. 比较providerA和providerB两个节点,选择其“当前正在 处理的连接数”较小的那个节点。

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

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

相关文章

leetcode526. 优美的排列(回溯算法-java)

优美的排列 leetcode526. 优美的排列题目描述接替思路代码演示: 动态规划专题 leetcode526. 优美的排列 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/beautiful-arrangement 题目描述 假设有从 1 到 n 的 n 个整数。用…

【Python 随练】判断一个5位数是否为回文数

题目&#xff1a; 一个 5 位数&#xff0c;判断它是不是回文数。即 12321 是回文数 &#xff0c;个位与万位相同&#xff0c;十位与千位相同。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个编程问题&#xff1a;判断一个5位数是否为回文数。回文数是指从左到右…

数字IC前端学习笔记:近期最少使用(LRU)算法

相关文章 数字IC前端学习笔记&#xff1a;LSFR&#xff08;线性反馈移位寄存器&#xff09; 数字IC前端学习笔记&#xff1a;跨时钟域信号同步 数字IC前端学习笔记&#xff1a;信号同步和边沿检测 数字IC前端学习笔记&#xff1a;锁存器Latch的综合 数字IC前端学习笔记&am…

Java新特性-Functon接口

Java新特性-Functon接口 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ Spring专栏&#x1f449;https://blog.csdn.net/weixin_53580595/category_12279588.html Sprin…

使用CRM系统如何让你的企业受益

随着市场的竞争日益加剧&#xff0c;企业需要更好地管理客户关系和提高销售。为此&#xff0c;很多企业已经开始使用CRM系统。CRM系统是一种管理客户关系的工具&#xff0c;可以帮助企业更好地了解客户需求&#xff0c;提高销售效率&#xff0c;提高客户满意度和忠诚度等。在这…

【ARM AMBA APB 入门 2 -- Debug APB总线介绍】

文章目录 1.1 DEBUG APB 介绍1.1.1 Debug APB interface 1.2 Debug APB 与 APB 的区别 1.1 DEBUG APB 介绍 ARM Debug APB是一种用于调试ARM处理器的总线协议。它是一种简化的、低功耗的调试接口&#xff0c;用于与处理器内部的调试逻辑进行通信。 ARM Debug APB具有以下特点…

使用Py2neo构建知识图谱(概念与实现)

知识图谱是一种用于描述实体之间关系的图形化知识表示方法&#xff0c;它将实体、属性和关系组织成一个大型的、半结构化的知识库。知识图谱的应用非常广泛&#xff0c;包括语义搜索、智能问答、个性化推荐、内容分发等领域。 知识图谱的构建方法有很多种&#xff0c;其中比较…

基于SpringBoot和Vue的医疗设备管理系统的设计与实现(源码+文档+报告)

伴随着网络技术的发展&#xff0c;网络巨头们也在各自的行业中展开了激烈的竞争。网络技术已经渗透到了社会的各个角落&#xff0c;移动支付、远程医疗和健康管理等多种网络技术的普及也日益广泛。同时&#xff0c;网络产业的崛起也极大地影响了传统产业。对医疗设备管理系统的…

Axure设计之动态柱状图教程(中继器)

中继器作为复杂的元件&#xff0c;通常被用来制作“高保真”的动态原型&#xff0c;以达到良好的视觉效果和交互效果。本文将教大家通过AxureRP9工具如何使用中继器设计动态柱状图表。 一、案例效果 下载地址&#xff1a; https://download.csdn.net/download/u010709330/8797…

多元分类预测 | Matlab鹈鹕算法(POA)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,POA-HKELM分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab鹈鹕算法(POA)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,POA-HKELM分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab…

QT5.12安卓环境的搭建(转载保存留档查看)

1. QT环境搭建 Qt 5.12.6安装的时候 添加 “Android ARM64-v8a”&#xff0c;也可以添加 “Android ARMv7” 。 &#xff08;其它为搭建qgc时需要添加的&#xff09; 2. Android 环境搭建 QT官方的指导&#xff1a; Qt 5.12 Getting Started with Qt for Android Qt 5.15 …

C语言-函数栈帧(每次调用函数,开辟函数的大概流程)

思路&#xff1a; emm&#xff0c;有点懵&#xff0c;这一块&#xff0c;只知道个大概&#xff0c;如果后期我深挖的话&#xff0c;我再回头来补充上图括号的位置&#xff0c;便是每次创建&#xff0c;调用函数的时候&#xff0c;所产生的函数栈帧&#xff0c;也可以理解为每次…

(五)Qt 动态手势识别“左右滑动”以及实现翻页效果

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…

Spring Boot 中的 SockJS

Spring Boot 中的 SockJS 在 Spring Boot 中&#xff0c;SockJS 是一个用于实现 WebSocket 的兼容性解决方案。本文将介绍 SockJS 的原理、使用方法和示例代码。 什么是 SockJS SockJS 是一种浏览器与服务器之间的通信协议&#xff0c;它可以在浏览器和服务器之间建立一个基于…

python--tornado服务

一、前言 Tornado是一个基于非阻塞I/O的Web框架&#xff0c;具有可以处理大量并发连接&#xff0c;适用于高并发的场景的高性能&#xff0c;轻量级和异步支持的优点。 本篇主要展示了使用 tornado http post 和 get 服务 二、代码 tornado http post 和 get 服务 # -*- codin…

视频拼接融合产品的产品与架构设计(一)

1视频拼接产品概述 将多达8个视频拼接在一起&#xff0c;拼成上帝视角的大图&#xff0c;并且可以共享最终生成的画面。 1.1 三维方案 三维方案是我在晚上思考的时候无意想到&#xff0c;这种方案应该是最接近事实的方案&#xff0c;多个画面应该是在三个维度&#xff0c;x&…

智慧产业园区管理系统主要包含哪些

智能设备管理 本文介绍的是智慧产业园区管理系统中的智能设备管理。智能设备管理是智慧产业园区管理系统中的重要组成部分&#xff0c;它可以为企业提供高效、智能化的设备管理服务。通过智能设备管理系统&#xff0c;企业可以对设备进行实时监控和在线运维&#xff0c;及时发…

JS知识点汇总(五)--执行上下文

1. JavaScript中执行上下文和执行栈是什么&#xff1f; 1、执行上下文 执行上下文是一种对Javascript代码执行环境的抽象概念&#xff0c;也就是说只要有Javascript代码运行&#xff0c;那么它就一定是运行在执行上下文中 执行上下文的类型分为三种&#xff1a; 全局执行上…

2023年智慧水利综合解决方案,数字孪生,领导驾驶舱,水文监测

导读&#xff1a;原文《2023年智慧水利综合解决方案》共56页PPT&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取…