Dubbo

Dubbo是什么,有哪些核心功能

Dubbo是一款高性能分布式的服务调用框架

由十层模型构成

Dubbo的核心功能

1.远程通信:提供多种基于长连接的NIO框架抽象封装,包括多线程模型,序列化,以及请求-响应模式的信息交换消息,透明化的远程方法调用。使调用远程方法就像调用本地方法一样简单。只需要简单的配置。

2.集群容错:提供基于接口方法的透明远程调用,包括多协议支持,负载均衡,集群容错,服务降级,地址路由,动态配置等集群设置,实现高可用

3.自动发现:基于注册中心服务,服务自动注册与发现,不用手动添加服务地址,注册中心基于接口名查询服务地址,并自动删除和添加服务。 

 Dubbo 核心的服务治理功能 

Dubbo 抽象了一套微服务治理模式并发布了对应的官方实现,服务治理可帮助简化微服务开发与运维,让开发者更专注在微服务业务本身。

  • 地址发现

Dubbo 服务发现具备高性能、支持大规模集群、服务级元数据配置等优势,默认提供 Nacos、Zookeeper、Consul 等多种注册中心适配,与 Spring Cloud、Kubernetes Service 模型打通,支持自定义扩展。

  • 负载均衡

Dubbo 默认提供加权随机、加权轮询、最少活跃请求数优先、最短响应时间优先、一致性哈希和自适应负载等策略

  • 流量路由

Dubbo 支持通过一系列流量规则控制服务调用的流量分布与行为,基于这些规则可以实现基于权重的比例流量分发、灰度验证、金丝雀发布、按请求参数的路由、同区域优先、超时配置、重试、限流降级等能力。

  • 链路追踪

Dubbo 官方通过适配 OpenTelemetry 提供了对 Tracing 全链路追踪支持,用户可以接入支持 OpenTelemetry 标准的产品如 Skywalking、Zipkin 等。另外,很多社区如 Skywalking、Zipkin 等在官方也提供了对 Dubbo 的适配。

  • 可观测性

Dubbo 实例通过 Prometheus 等上报 QPS、RT、请求次数、成功率、异常次数等多维度的可观测指标帮助了解服务运行状态,通过接入 Grafana、Admin 控制台帮助实现数据指标可视化展示。

Dubbo 服务治理生态还提供了对 API 网关限流降级数据一致性认证鉴权等场景的适配支持。

Dubbo常用的5种负载均衡策略

第一种是加权随机(默认):假设我们有一组服务器 servers = [A, B, C],他们对应的权 重为 weights = [5, 3, 2],权重总和为 10。现在把这些权重值平铺在一维坐标值 上,[0, 5) 区间属于服务器 A,[5, 8) 区间属于服务器 B,[8, 10) 区间属于服 务器 C。接下来通过随机数生成器生成一个范围在 [0, 10) 之间的随机数,然后 计算这个随机数会落到哪个区间上就可以了。

第二种是最小活跃数:每个服务提供者对应一个活跃数 active,初始情况下, 所有服务提供者活跃数均为 0。每收到一个请求,活跃数加 1,完成请求后则将 活跃数减 1。在服务运行一段时间后,性能好的服务提供者处理请求的速度更快, 因此活跃数下降的也越快,此时这样的服务提供者能够优先获取到新的服务请求。

第三种是一致性 hash:通过 hash 算法,把 provider 的 invoke 和随机节点生成 hash,并将这个 hash 投射到 [0, 2^32 - 1] 的圆环上,查询的时候根据 key 进 行 md5 然后进行 hash,得到第一个节点的值大于等于当前 hash 的 invoker。

第四种是加权轮询:比如服务器 A、B、C 权重比为 5:2:1,那么在 8 次请求中, 服务器 A 将收到其中的 5 次请求,服务器 B 会收到其中的 2 次请求,服务器 C 则收到其中的 1 次请求。

第五种是最短响应时间权重随机: 计算目标服务的请求的响应时间,根据响应 时间最短的服务,配置更高的权重进行随机访问。

Dubbo的工作原理

1.服务启动的时候,provider 和 consumer 根据配置信息,连接到注册中心 register,分别向注册中心注册和订阅服务

2.register 根据服务订阅关系,返回 provider 信息到 consumer,同时 consumer 会把 provider 信息缓存到本地。如果信息有变更,consumer 会收到来自 register 的推送

3.consumer 生成代理对象,同时根据负载均衡策略,选择一台 provider,同时 定时向 monitor 记录接口的调用次数和时间信息

4.拿到代理对象之后,consumer 通过代理对象发起接口调用

5.provider 收到请求后对数据进行反序列化,然后通过代理调用具体的接口实现

Dubbo和SpringCloud的区别

Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流 量监控和熔断。而 Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理 的方方面面,另外由于依托了 Spirng、Spirng Boot 的优势之上,两个框架在 开始目标就不一致,Dubbo 定位服务治理、Spirng Cloud 是一个生态。

两者最大的区别是 Dubbo 底层是使用 Netty 这样的 NIO 框架,是基于 TCP 协议传输的,配合以 Hession 序列化完成 RPC 通信。而 SpringCloud 是基 于 Http 协议+Rest 接口调用远程过程的通信,相对来说,Http 请求会有更大 的报文,占的带宽也会更多。但是 REST 相比 RPC 更为灵活,服务提供方和调 用方的依赖只依靠一纸契约,不存在代码级别的强依赖。

Dubbo的优点

  1. 高性能:Dubbo采用了基于NIO的网络通信模型和多种序列化协议,提供了高性能的远程调用能力。
  2. 高扩展性:Dubbo支持灵活的扩展机制,可根据需求定制化各种扩展。例如,可通过自定义的负载均衡策略、集群容错机制、序列化协议等来满足特定的业务需求。
  3. 高可用性:Dubbo提供了多种容错机制,如失败自动切换、负载均衡、重试等,保证了系统的高可用性和可靠性。
  4. 配置管理:Dubbo提供了统一的配置中心,可以集中管理服务的配置信息,方便运维配置管理和动态更新。
  5. 监控和管理:Dubbo内置了丰富的统计监控模块,可以监控服务的调用次数、成功率等指标,并提供了可视化的管理界面。

注册中心挂了,服务是否可以正常访问

可以,已经注册过的旧服务仍然可以访问,因为在当注册的时候,消费者已经在注册中心将提供者的地址存到了本地,以后再调用的时候不会访问注册中心

当提供者的地址发生了变更,注册中心的monitor会将新地址更新到消费者中

Dubbo的SPI机制

Dubbo的SPI(Service Provider Interface)机制是一种插件扩展机制,用于实现在框架内部定义的接口的实现类的动态加载和扩展。它允许开发者通过在配置文件中注册不同的实现类,来替换或扩展框架默认的实现。

主要步骤为 4 个:

  • 读取并解析配置文件
  • 缓存所有扩展实现
  • 基于用户执行的扩展名,实例化对应的扩展实现
  • 进行扩展实例属性的 IOC 注入以及实例化扩展的包装类,实现 AOP 特性

Dubbo的SPI和JDK的优势

JDK

1.需要遍历所有的实现类,并实例化。有的实现类会消耗资源但又用不上,就会产生浪费

2.JDK的SPI没有缓存,每次load都要重新加载

Dubbo

1.每个实现类都有名字,需要哪个实现类通过名字获取,按需加载

2.增加了缓存存储实例,提高读取性能

3.提供了对IOP和AOC的支持,可以实现更多类型的扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值