探究Dubbo服务版本,揭开内置服务器之谜与功能揭秘

Dubbo内置的服务器是什么

1、Dubbo 是阿里巴巴开源的分布式服务框架,它是一款功能强大的远程调用框架,在网络环境中进行数据传输时,Dubbo 需要依赖通信协议和序列化机制,Dubbo 支持包括 dubbo、RMI、Hessian、HTTP、WebServices、Thrift、Redis 在内的多种通信协议,但 *** 推荐使用 dubbo 协议,并且在默认情况下也是采用 dubbo 协议。

2、Dubbo 通过创建标签解析器来解析 dubbo 标签,进一步解析 ServiceBean,并在容器创建完成后进行服务暴露。

3、在消费端,Dubbo 已经实现了负载均衡功能,但这一功能无法满足灰度发布的特定需求,在执行负载均衡之前,Dubbo 的调用流程会通过路由器链筛选,返回一组符合条件的目标服务器地址列表,这一步骤是实现灰度发布的关键环节,为了支持灰度发布,Dubbo 提供了两种内置的路由策略:条件路由和标签路由。

Dubbo协议

探究Dubbo服务版本,揭开内置服务器之谜与功能揭秘  第1张

1、Dubbo 协议是 Dubbo 的默认通信协议,其特点包括:采用经典的定长包头加变长包体的设计,包头中记录了数据的序列化方式、请求状态、数据长度等信息,而包体则是经过序列化后的请求/响应对象的二进制数据。

2、经过升级的 Triple 协议能够提供高效、全双工的 Streaming 流式通信模型,同时支持 Request-Response 和 Streaming 等多种通信模式,并且可以在 HTTP/1 和 HTTP/2 上运行,用户可以使用 cURL 等标准 HTTP 工具访问通过 Triple 协议发布的服务。

3、Dubbo RPC 直连应用概念指的是消费者(Consumer)直接访问提供者(Provider),无需注册中心的介入,Dubbo 实现的基本功能是 RPC,从这个角度来看,Dubbo RPC 直连与 SpringCloud 中的 OpenFeign 功能类似,Dubbo 直连设计的核心在于细化网络通信过程,其操作流程主要包括三个核心环节。

4、Dubbo 协议提供了详细的协议结构和帧组成说明,使用前需要安装 Zookeeper,在开发过程中,需要管理依赖项,配置服务端和客户端,并在 API、Provider 和 Consumer 包中编写相应的代码,Provider 端的 YAML 配置需要包含服务端地址,而 Consumer 端则通过 URL 进行访问,REST 协议虽然与 Httpx 协议相关联,但它更便于直接访问和与 SpringCloud 集成。

5、Dubbo 默认采用 dubbo 协议,该协议使用单一长连接和 NIO 异步通信方式,适合处理小数据量大并发的服务调用,以及服务消费者机器数量远大于服务提供者机器数量的场景,它不适合传输大数据量的服务,如文件传输或视频传输,除非请求量非常低。

6、Dubbo 协议基于 Mina7 和 Hessian1 的 TbRemoting 交互实现,采用单一长连接和 NIO 异步通信方式,而 RMI 协议基于 JDK 标准的 java.rmi.* 实现,使用阻塞式短连接和 JDK 标准序列化方式。

基于Dubbo的灰度发布

1、尽管Dubbo在消费端实现了负载均衡功能,但这一功能并不能满足灰度发布的特定需求,在执行负载均衡之前,Dubbo 的调用流程会经过路由器链,筛选出一组符合条件的目标服务器地址列表,这一过程是实现灰度发布的关键步骤,为了满足灰度发布的需求,Dubbo 提供了条件路由和标签路由两种内置的路由策略。

2、利用 SpringCloud 和 Dubbo 的注册中心特性,可以实现动态添加模块节点,从而赋予系统强大的横向扩展能力,无需修改代码即可提升系统性能,在部署时采用灰度发布策略,逐步部署新版本,通过 SpringCloud *** 的 WeighRouterFilter 实现流量监控和自动回滚,确保系统的稳定运行。

3、在汽车行业的 DMS 系统应用中,华为云通过 Sermant 提供了一套端到端的灰度发布方案,以应对汽车智能升级带来的多样化业务场景挑战,作为汽车经销商的管理工具,DMS 系统负责业务流程的管理和优化,随着汽车行业向智能化、电动化和共享化方向发展,DMS 系统需要不断升级以适应这些多变的需求。

4、功能概述:在保持原有服务查询与治理功能的基础上,版本 7 的服务治理功能有了显著改进,大部分功能通过 Dubbo Admin 实现,新增的标签路由功能,通过在应用维度上打上不同标签,设置客户端标签来实现流量的隔离和灰度发布,提供了配置示例以供参考。

5、Dubbo 通过抽象出一套开放通用的微服务治理标准和规范,旨在统一管理众多组件,如 Dubbo、Nacos 和稳定性中间件,从而降低使用和维护成本,OpenSergo 关注云原生架构,不仅支持流量路由,还扩展了灰度发布、流量控制和熔断保护等功能,以满足变更态和运行态的稳定性需求。

Dubbo——服务调用、服务暴露、服务引用过程

1、在前面的内容中,我们已经探讨了消费者端服务发现和提供者端服务暴露的相关内容,并了解到消费者端通过内置的负载均衡算法获取合适的调用 Invoker 进行远程调用,我们将重点探讨远程调用过程中的网络通信细节。

2、通过 Dubbo 配置中的 version 参数,我们可以控制服务的版本,实现服务的版本管理,服务暴露流程如下:服务提供者将服务暴露给注册中心,消费者从注册中心获取服务信息并进行调用,服务引用流程则是:消费者从注册中心获取服务信息,通过调用远程服务实现业务功能。

3、Dubbo 服务支持参数的动态调整,例如动态调整权重,Dubbo 的实现方式比较特殊,与常规的思路有所不同。

4、URL 在整个 Dubbo 服务的发布和调用过程中扮演着至关重要的角色,它可以在服务发布后在 dubbo-monitor 中查看,在 ServiceConfig.doExportUrlsFor1Protocol() 方法中,根据 scope 参数判断服务的发布范围:如果配置 scope 为 none,则不需要发布该 Dubbo 服务;如果没有配置 scope 为 none,且配置的 scope 不等于 remote。

5、这正是 Dubbo 动态代理需要完成的功能,Dubbo 框架层面抽象了这一层次,具体功能由框架来实现,Dubbo 动态代理有两种实现方案:Javaassist 和 JDK 提供的方案,选择 Javaassist 是基于性能的考虑,因为生成字节码的速度比 JDK 的方案更快,服务暴露的目的是告诉客户端如何访问服务。