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

这篇具有很好参考价值的文章主要介绍了Dubbo接口级服务发现-数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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接口级服务发现---易用性的代价

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,适应云原生、更大规模集群的服务发现类型。

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

问题点:

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

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

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

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

升级后的变化:

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

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

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

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

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

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

Dubbo负载均衡机制
常规负载均衡算法

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

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

负载均衡策略:

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

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端设置静态的最大并发值,然而该值的合理选取对用户来讲并不容易。文章来源地址https://www.toymoban.com/news/detail-514021.html

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

到了这里,关于Dubbo接口级服务发现-数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL5.7数据目录结构

    以CentOS7为例,数据目录为 /var/lib/mysql/ ,其内容如下: 其中 mysql 、 sys 等为数据库,即一个数据库对应的一个目录。 ibdata1 存放的是 InnoDB 的元数据、变更缓冲区、双写缓冲区和撤销日志。 ib_logfile0 和 ib_logfile1 存放普通日志。 ib_buffer_pool 存放缓存池信息。 以 test 数据库为例

    2024年02月12日
    浏览(44)
  • 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中。。。。。。 第一章高精度计算 1307【例1.3】高精度乘法 1308【例1.5】高精除 1309【例1.6】回文数(Noip1999) 1168大整数加法 1169大整数减法 1170计算2的N次方 1171大整数的因子 1172求10000以内n的阶乘 1173阶乘

    2024年02月16日
    浏览(46)
  • 【数据结构】栈各个接口的实现

    目录 前言: 一、栈的概述: 1.栈的概念: 二、栈接口的实现: 1.栈的初始化: 2.压栈: 3.出栈: 4.取栈顶元素: 5.计算栈内有效数据: 6.判断栈是否为空: 7.栈的销毁: 三、完整代码: 1.Stack.h: 2.Stack.c: 总结:      前面我们已经学习了 顺序表和链表的相关知识和对各个接

    2023年04月14日
    浏览(26)
  • 【Java数据结构 -- 实现双链表的接口方法】

    双链表是一种数据结构,其中每个节点包含 一个指向前一个节点的指针和一个指向后一个节点的指针 。由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来,因此双链表可以任意且快速的插入和删除元素。 引用接口IList,在把

    2024年01月16日
    浏览(57)
  • 数据结构 —— 双向链表(超详细图解 & 接口函数实现)

    数据结构 —— 顺序表 数据结构 —— 单链表 数据结构 —— 双向链表 数据结构 —— 队列 数据结构 —— 栈 数据结构 —— 堆 数据结构 —— 二叉树 数据结构 —— 八大排序 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元

    2024年02月11日
    浏览(41)
  • go数据类型-空结构体、空接口、nil

    有经验的开发人员都知道,所有的空结构体是指向一个 zerobase的地址,而且大小为0 一般用来作结合map作为set 或者 在channel中 传递信号。 能看到当一个空结构体中,包含了其他类型的变量,就不指向 zerobase。 go中的接口都是隐式的,增加的封装的灵活性,也为阅读源码增加了

    2024年02月05日
    浏览(55)
  • 【Dubbo核心 详解三】Dubbo服务接口的详解

    ✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Dubbo专栏 本文将介绍 Dubbo 服务接口的基本概念和特点,实现方式和应用场景,以及注册与发现、调用、属性和参数、异常处理、日志和监控、高级特性、微

    2023年04月24日
    浏览(80)
  • 【数据结构】 List与顺序表及接口的实现

    在集合框架中, List是一个接口,继承自Collection。 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示: Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下: List 的官方文档 站在数据结构的角度来看, List就是一

    2024年02月12日
    浏览(39)
  • 【免杀前置课——PE文件结构】十八、数据目录表及其内容详解——数据目录表(导出表、导入表、IAT表、TLS表)详解;如何在程序在被调试之前反击?TLS反调试(附代码)

    数据目录表:可选PE头最后一个成员,就是数据目录.一共有16个 分别是:导出表、导入表、资源表、异常信息表、安全证书表、重定位表、调试信息表、版权所以表、全局指针表 TLS表、加载配置表、绑定导入表、IAT表、延迟导入表、COM信息表 最后一个保留未使用,默认为0。

    2024年01月15日
    浏览(39)
  • java -- 简单的数据结构、List接口和Collections类

    数据结构 : 数据用什么样的方式组合在一起。 数据存储的常用结构有:栈、队列、数组、链表 栈: stack ,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。 采用该结构的集合,对元素

    2023年04月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包