博客
关于我
Dubbo——服务治理(dubbo-Admin)平台
阅读量:797 次
发布时间:2023-03-29

本文共 2217 字,大约阅读时间需要 7 分钟。

Apache Dubbo 服务治理平台实现原理

Dubbo 是一个灵活高效的服务治理平台,能够帮助开发者管理和优化分布式服务。在本文中,我们将深入探讨 Dubbo 服务治理平台的核心实现原理,包括服务搜索、路由规则、动态配置、权重管理和负载均衡等关键功能。


服务治理平台总体结构

Dubbo 早期版本的服务治理平台已经被逐步淘汰,取而代之的是一个全新的服务治理平台,这个新平台与 Dubbo 源码无关,而是作为一个独立的项目(可在 GitHub 上找到 dubbo-ops 仓库)。新平台分为前端和后台两大部分,采用前后端分离的架构设计。前端使用 Vue + Vuetify 的组合方式,后台则基于 Spring Boot 实现。

目前新平台仍在开发中,部分功能尚未上线。因此,本文将基于新平台的现有功能进行讲解,对于尚未实现的功能,则将基于旧平台进行说明。


API 接口功能

服务治理平台的前端通过 REST 接口与后端服务进行通信,后端 Controller 接收请求后,通过 Service 处理具体逻辑。平台提供了多个 Controller,分别负责不同的服务治理功能:

  • ServiceController:负责接收服务搜索请求,包括服务列表的查询和单个服务详情的查询。
  • RoutesController:负责接收路由规则的请求,包括规则的新增、删除、修改、更新,以及单条规则详情的查询。
  • OverridesController:负责接收动态配置的请求,包括配置的新增、删除、修改、更新、禁用、启用,以及单条配置详情的查询。
  • AccessesController:负责接收访问控制的请求,包括访问规则的新增、删除、修改、更新,以及单条规则详情的查询。
  • Weightcontroller:负责权重管理的请求,包括权重配置的新增、删除、修改、更新,以及单条权重详情的查询。
  • LoadBalanceController:负责负载均衡规则的请求,包括负载均衡配置的新增、删除、修改、更新,以及单条权重详情的查询。

服务治理平台的实现原理

服务搜索

服务搜索是通过不同的过滤条件,在本地的注册数据缓存里,查找出合适的结果集。主要是通过一个工具类 RegistryServerSync 实现的,它继承了两个 Spring 接口和一个 Dubbo 注册中心接口。

RegistryServerSync 实现了 InitializingBeanDisposableBean 接口,分别在 Bean 的初始化和销毁时订阅和取消订阅注册中心的数据。同时,它还继承了 NotifyListener 接口,监听到注册中心的变化时,会调用 notify(List<URL> urls) 方法更新本地缓存数据。

具体实现逻辑如下:

  • 在 Bean 初始化时,通过 afterPropertiesSet() 方法订阅注册中心。
  • 监听到变化时,根据协议类型(empty 协议或 non-empty 协议)更新本地缓存。
  • Bean 被销毁时,通过 destroy() 方法取消订阅。
  • 通过这种方式,服务提供者和消费者的查找就变得非常简单了,只需要在本地缓存中遍历数据,过滤出符合条件的结果即可。


    路由规则

    路由规则可以为不同的服务指定特定的路由规则,路由协议在注册中心的 URL 以 route:// 开头。前端可以配置的参数如表 12-3 所示。

    路由规则的实现基于 Dubbo 的服务路由功能,具体包括以下内容:

    • 最终的 conditions 是用来匹配服务方法的,例如 find、list、get 等开头的方法。
    • 路由规则的实现逻辑与 override 功能相似,均使用“注册”和“取消注册”方法来实现。

    动态配置

    override 特性主要用于动态参数的更新。各个节点监听到注册中心的参数变化后,会更新本地的参数信息。override 类型的 URL 是以 override:// 开头的,允许部分属性的动态更新。

    具体操作逻辑如下:

  • 新增:将 override 对象转换为 URL,通过 registryService.register(url) 将 URL 注册到注册中心。
  • 修改:根据 Hash 值找到老的 URL,取消注册老的 URL,再注册新的 URL。
  • 删除:根据 ID 获取老的 URL,再直接取消注册。
  • 启用/禁用:根据 ID 获取老的 URL,在新 URL 的 params 属性中设置 enabled 字段,取消注册老的 URL,再注册新的 URL。

  • 权重管理

    框架中不同的负载均衡策略还会受到权重的影响。当用户对服务设置了权重后,对权重高的节点会提高调用频率,对权重低的节点会降低调用频率。权重的实现与其他配置功能的实现相似,首先把前端传入的参数转换为 Weight 对象,然后把 Weight 对象转换为 URL,最后使用 overrideService 将 URL发布到注册中心。


    负载均衡

    如果用户不做任何配置,则默认使用 RandomLoadBalance,即加权随机负载算法。用户可以在服务治理平台中修改某个服务的负载均衡策略,其配置参数较少。负载均衡对象会被转换成一个 override 对象,并使用 override 协议实现新增、更新、删除等操作。


    博文参考

    • 深入理解 Apache Dubbo 与实战.pdf

    转载地址:http://tlhfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现selection sort选择排序算法(附完整源码)
    查看>>
    Objective-C实现sha256算法(附完整源码)
    查看>>
    Objective-C实现shell sort希尔排序算法(附完整源码)
    查看>>
    Objective-C实现SinglyLinkedList单链表算法(附完整源码)
    查看>>
    Objective-C实现skew heap倾斜堆算法(附完整源码)
    查看>>
    Objective-C实现Skip List跳表算法(附完整源码)
    查看>>
    Objective-C实现slack message松弛消息算法(附完整源码)
    查看>>
    Objective-C实现slow sort慢排序算法(附完整源码)
    查看>>
    Objective-C实现tanh函数功能(附完整源码)
    查看>>
    Objective-C实现z-algorithm算法(附完整源码)
    查看>>
    Objective-C实现zellers congruence泽勒一致算法(附完整源码)
    查看>>
    Objective-C实现Zero One Knapsack零一背包计算算法(附完整源码)
    查看>>
    Objective-C实现一个Pangram字符串至少包含一次所有字母算法(附完整源码)
    查看>>
    Objective-C实现一个通用的堆算法(附完整源码)
    查看>>
    Objective-C实现一分钟倒计时(附完整源码)
    查看>>
    Objective-C实现三次样条曲线(附完整源码)
    查看>>
    Objective-C实现上传文件到FTP服务器(附完整源码)
    查看>>
    Objective-C实现两数之和问题(附完整源码)
    查看>>
    Objective-C实现串口通讯(附完整源码)
    查看>>
    Objective-C实现串逐位和(附完整源码)
    查看>>