侵入式服务治理方案,读这一篇就够(2)

简介: 侵入式服务治理方案,读这一篇就够(2)


核心流程


简单来说,Dubbo中必有的核心概念只有服务提供者、服务消费者和注册中心这三个,治理中心以及监控中心并非必需品。


服务提供者和服务消费者启动时,都会初始化一个Dubbo的运行时容器,多为Spring容器。服务提供者完成初始化后,将向注册中心注册服务;服务消费者完成初始化后,将向注册中心订阅服务。


注册中心在服务提供者列表发生变化时会将变化的内容主动通知给服务消费者。服务提供者和服务消费者在初次连通后,即持有长连接,它们之间将通过透明化的远程调用进行通信。每次调用的信息将传递至监控中心用于统计。Dubbo启动的核心流程如图6-3所示。



微信图片_20220123181539.jpg


图6-3 Dubbo启动的核心流程



注册中心


Dubbo通过注册中心来实现服务发现,它支持Multicast、ZooKeeper、Redis和Simple这四种类型的注册中心。虽然看似选择不少,但Multicast注册中心受网络结构限制,只适合小规模使用,而Simple注册中心不支持集群,因此,实际上生产级别可用的只有ZooKeeper注册中心和Redis注册中心。


无论是使用ZooKeeper还是使用Redis作为注册中心,都不是阿里巴巴内部的实现方案,而是开源的桥接实现方案,因此没有经历阿里巴巴内部的长时间考验。通过服务发现一章中的介绍可知,虽然ZooKeeper并不是首选的用于服务发现的注册中心,但相较于Redis,它的可靠性更强。除了Dubbo,其他很多第三方组件也采用ZooKeeper作为注册中心或元数据管理系统,如Kafka、Hadoop、Mesos,而Redis更加适合于存储应用数据的缓存体系。因此,大部分情况下,Dubbo都是配合ZooKeeper注册中心来使用的。


无论使用ZooKeeper还是Redis作为注册中心,服务注册和服务发现的流程都是相同的,只是存储数据结构以及监听等功能的具体实现不同而已,因此,下文仅选用ZooKeeper作为注册中心来举例说明。图6-4展示了Dubbo注册服务后在ZooKeeper注册中心的Znode中的存储结构。


微信图片_20220123181552.jpg


图6-4 Dubbo的存储结构


Dubbo所有的运行时状态信息都会集中存入一个统一的根节点,根节点的名称就是dubbo。每个服务会以类全称独立创建一个节点,服务节点下会分别创建名为providers和consumers的子节点,用于存储服务提供者和服务消费者信息,每个服务提供者和服务消费者的副本都会在相应的节点位置创建一个临时节点,该临时节点以URL的形式存储当前服务提供者或服务消费者的信息,包括IP地址、端口、调用方法等元数据,以及传输协议、最大连接承载数、路由策略等配置信息。另外还有configurators和routers节点用于存储全局配置和全局路由信息。


服务提供者启动时会在相应服务节点的providers节点下写入包含自身信息的URL作为临时节点;服务消费者启动时会在相应服务节点的consumers节点下写入包含自身信息的URL作为临时节点,并且监听providers节点的变化。当新的服务提供者加入,或当前服务提供者下线时,所有的服务消费者将通过ZooKeeper的监听机制自动感知变化。声明一个最简化的注册中心很容易,以Dubbo最常用的Spring命名空间的配置方式为例,代码如下。

<dubbo:registryaddress="zookeeper://zk_host:2181" />


Dubbo支持多注册中心同时提供服务,以分组的方式隔离不同的注册中心。只有设置为同一组别的服务才会注册到同一个注册中心下。提供多注册中心需要以ID进行区分,声明多注册中心的示例代码如下。

<dubbo:registryid="global" address="zookeeper://zk_host:2181"group="global" />
<dubbo:registry id="custom"address="zookeeper://zk_host:3181" group="custom" />


前面介绍ZooKeeper时提到过,除了原生客户端,还有两个较为常用的第三方客户端,它们是ZkClient和Curator。Dubbo支持这两种客户端对ZooKeeper进行操作,只需在配置注册中心时指明ZooKeeper的实现客户端即可,代码如下。

<dubbo:registryaddress="zookeeper://zk_host:2181" client="curator" />                        



负载均衡


Dubbo采用客户端负载均衡方式,即由服务消费者一方决定将当前通信发送至哪个服务提供者的副本。服务消费者实例启动时会从注册中心同步一份当前有效的服务提供者实例列表,并在服务提供者列表发生变化时更新本地数据副本。每次远程调用发生时,服务消费者都会读取内存中的服务提供者实例列表,并根据合适的负载均衡策略选择一个最合适的服务提供者实例进行访问。


微信图片_20220123181609.jpg



Dubbo的服务发现和负载均衡机制,使得基于它开发的分布式系统具有弹性好、高可用、性能优的特征。


相关文章
|
C语言
error: expected expression C语言 X形图案打印
进行代码实现遇到的问题
292 6
|
安全 Java 数据库连接
Spring框架:IoC容器、AOP、事务管理等知识讲解梳理
Spring框架:IoC容器、AOP、事务管理等知识讲解梳理
263 1
|
19天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
32198 117
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
9天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4721 4
|
15天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6821 18
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
14天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4780 11
|
16天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5679 21
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
12天前
|
人工智能 JavaScript 安全
Claude Code 安装指南
Claude Code 是 Anthropic 推出的本地 AI 编程助手,支持 Mac/Linux/WSL/Windows 多平台一键安装(Shell/PowerShell/Homebrew/NPM),提供 CLI 交互、代码生成、审查、Git 提交等能力,并内置丰富斜杠命令与自动更新机制。
4273 0